快捷搜索:  汽车  科技

傅里叶变换讲解:傅里叶变换

傅里叶变换讲解:傅里叶变换

傅里叶变换(FFT)常被用来分析滤波器的频率特性, 我们可用2维离散傅里叶变换 (DFT) 分析图像频域特性。至于FFT的定义和意义我就不在这里展开, 了大家可以自己去了解一下。其中,opencv中FFT的涉及到 cv2.dft(),cv2.idft()等函数。

我们先来看看, 如果对图像的高频和低频部分进行过滤,产生的图像有什么特性呢?我们可以从下面的图像感受一下:

傅里叶变换讲解:傅里叶变换(1)

def get_low_high_f(img radius_ratio): """ 获取低频和⾼频部分图像 """ # 傅⾥叶变换 # np.fft.fftn f = np.fft.fftn(img) # Compute the N-dimensional discrete Fourier Transform. 零频率分量位于频谱图像的左上⾓ fshift = np.fft.fftshift(f) # 零频率分量会被移到频域图像的中⼼位置,即低频 # 获取低频和⾼频部分 hight_parts_fshift = filter_low_f(img fshift.copy() radius_ratio=radius_ratio) # 过滤掉中⼼低频 low_parts_fshift = filter_high_f(img fshift.copy() radius_ratio=radius_ratio) low_parts_img = ifft(low_parts_fshift) # 先sift回来,再反傅⾥叶变换 high_parts_img = ifft(hight_parts_fshift) # 显⽰原始图像和⾼通滤波处理图像 img_new_low = (low_parts_img - np.amin(low_parts_img)) / (np.amax(low_parts_img) - np.amin(low_parts_img) 0.00001) img_new_high = (high_parts_img - np.amin(high_parts_img) 0.00001) / (np.amax(high_parts_img) - np.amin(high_parts_img) 0.00001) # uint8 img_new_low = np.array(img_new_low*255 np.uint8) img_new_high = np.array(img_new_high * 255 np.uint8) return img_new_low img_new_high def ifft(fshift): """ 傅⾥叶逆变换 """ ishift = np.fft.ifftshift(fshift) # 把低频部分sift回左上⾓ iimg = np.fft.ifftn(ishift) # 出来的是复数,⽆法显⽰ iimg = np.abs(iimg) # 返回复数的模 return iimg def fft(img): """ 傅⾥叶变换 """ f = np.fft.fft2(img) fshift = np.fft.fftshift(f) magnitude_spectrum = 20*np.log(np.abs(fshift)) return magnitude_spectrum 例子2:

傅里叶变换讲解:傅里叶变换(2)

例子3:

傅里叶变换讲解:傅里叶变换(3)

我们有没有发现比较有趣的现象? 例子2和1及3相比,低频分量更多一些,轮廓边界也不清晰, 这就为后期图像增强和处理提高了思路。

图像模糊和增强处理后效果:

傅里叶变换讲解:傅里叶变换(4)

傅里叶变换讲解:傅里叶变换(5)

傅里叶变换讲解:傅里叶变换(6)

猜您喜欢: