def test_4d_input_pixel(): phantom = img_as_float(binary_blobs(length=32, n_dim=4)) reference_image = fft.fftn(phantom) shift = (-2.0, 1.0, 5.0, -3) shifted_image = fourier_shift(reference_image, shift) result, error, diffphase = phase_cross_correlation(reference_image, shifted_image, space="fourier") assert_allclose(result, -cp.array(shift), atol=0.05)
def test_correlation(): reference_image = fft.fftn(cp.array(camera())) shift = (-7, 12) shifted_image = fourier_shift(reference_image, shift) # pixel precision result, error, diffphase = phase_cross_correlation(reference_image, shifted_image, space="fourier") assert_allclose(result[:2], -cp.array(shift))
def test_subpixel_precision(): reference_image = fft.fftn(cp.array(camera())) subpixel_shift = (-2.4, 1.32) shifted_image = fourier_shift(reference_image, subpixel_shift) # subpixel precision result, error, diffphase = phase_cross_correlation(reference_image, shifted_image, upsample_factor=100, space="fourier") assert_allclose(result[:2], -cp.array(subpixel_shift), atol=0.05)
def test_size_one_dimension_input(): # take a strip of the input image reference_image = fft.fftn(cp.array(camera())[:, 15]).reshape((-1, 1)) subpixel_shift = (-2.4, 4) shifted_image = fourier_shift(reference_image, subpixel_shift) # subpixel precision result, error, diffphase = phase_cross_correlation(reference_image, shifted_image, upsample_factor=20, space="fourier") assert_allclose(result[:2], -cp.array((-2.4, 0)), atol=0.05)
def test_real_input(dtype): reference_image = cp.array(camera()).astype(dtype, copy=False) subpixel_shift = (-2.4, 1.32) shifted_image = fourier_shift(fft.fftn(reference_image), subpixel_shift) shifted_image = fft.ifftn(shifted_image).real.astype(dtype, copy=False) # subpixel precision result, error, diffphase = phase_cross_correlation(reference_image, shifted_image, upsample_factor=100) assert result.dtype == dtype assert_allclose(result[:2], -cp.array(subpixel_shift), atol=0.05)
def test_3d_input(): phantom = img_as_float(binary_blobs(length=32, n_dim=3)) reference_image = fft.fftn(phantom) shift = (-2.0, 1.0, 5.0) shifted_image = fourier_shift(reference_image, shift) result, error, diffphase = phase_cross_correlation(reference_image, shifted_image, space="fourier") assert_allclose(result, -cp.array(shift), atol=0.05) # subpixel precision now available for 3-D data subpixel_shift = (-2.3, 1.7, 5.4) shifted_image = fourier_shift(reference_image, subpixel_shift) result, error, diffphase = phase_cross_correlation(reference_image, shifted_image, upsample_factor=100, space="fourier") assert_allclose(result, -cp.array(subpixel_shift), atol=0.05)