我正在尝试使用 2D FFT 和傅里叶变换移位定理来移位表示具有亚像素精度的图像的 2D 数组。当移位值是整数(像素精度)时效果很好,但是当移位值不是整数时,我会得到很多伪像,即像素的一小部分。代码如下:
import numpy as np
from scipy.fftpack import fftfreq
def shift_fft(input_array,shift):
shift_rows,shift_cols = shift
nr,nc = input_array.shape
Nr, Nc = fftfreq(nr), fftfreq(nc)
Nc,Nr = np.meshgrid(Nc,Nr)
fft_inputarray = np.fft.fft2(input_array)
fourier_shift = np.exp(1j*2*np.pi*((shift_rows*Nr)+(shift_cols*Nc)))
output_array = np.fft.ifft2(fft_inputarray*fourier_shift)
return np.real(output_array)
因此, shift_fft(input_array,[2,0]) 将起作用,但 shift_fft(input_array,[2.4,0]) 在没有工件的情况下将不起作用。我做错了什么?例如,考虑 128x128 像素的 Lena 图像。如果我想在每个方向上移动 10.4 像素,我会得到一些图像的摆动调制。图像如下:
前:
后: