傅里叶变换
cv2.dft(src[, dst[, flags]]) 傅里叶变换
- src:输入(必须先转换成np.float32格式)
- dst:输出
- flags:转换标志
numpy.fft.fftshift(x, axes=None) 将频率为0的部分转换到频谱的中心
将在左上角频率为0的部分转换到中心位置(一般会将低频部分置于频谱中心,高频部分由中心向四周发散,越远离中心,频率越高)
- x:输入(经过傅里叶变换(cv2.dft))
cv2.magnitude(x, y[, magnitude]) 计算2D向量的大小
- x:经过傅里叶变换(cv2.dft)和频谱转换(numpy.fft.fftshift)后的某一通道
- y:经过傅里叶变换(cv2.dft)和频谱转换(numpy.fft.fftshift)后的某一通道(必须和x有相同的size)
- 把结果映射到0~255:20*np.log(cv2.magnitude())
cv2.idft(src[, dst[, flags]]) 傅里叶逆变换
- src:输入(必须先转换成np.float32格式)
- dst:输出
- flags:转换标志
cv2.fft.ifftshift(x, axes=None) 'fftshift’的逆变换
将在中心区域的低频部分重新转换到左上角
高频:变化剧烈的灰度分量
低频:变化缓慢的灰度分量
体现在滤波方面:
高通滤波器:只保留高频,会使图像细节增强
1、制作高通滤波器的掩膜(保留频谱高频部分,即除去中心区域的低频部分):声明一个和原始图像大小相同numpy.zeros,将中心区域置为0
2、将经过傅里叶变换(cv2.dft)和频谱转换(numpy.fft.fftshift)后的频谱乘以高通滤波器的掩膜,得到图像中的高频部分
3、利用cv2.fft.ifftshift将上述高频部分进行频谱位置还原
4、利用傅里叶逆变换(cv2.idft)以及cv2.magnitude处理上述结果,得到经过高通滤波器处理后的图像
低通滤波器:只保留低频,会使图像模糊
1、制作低通滤波器的掩膜(只保留中心区域的低频部分):声明一个和原始图像大小相同numpy.zeros,将中心区域置为1
2、将经过傅里叶变换(cv2.dft)和频谱转换(numpy.fft.fftshift)后的频谱乘以低通滤波器的掩膜,得到图像中的低频部分
3、利用cv2.fft.ifftshift将上述低频部分进行频谱位置还原
4、利用傅里叶逆变换(cv2.idft)以及cv2.magnitude处理上述结果,得到经过低通滤波器处理后的图像