频域图像的意义:
灰度图经过傅里叶变换,是从空间域到频域的转变
空间域:原图像的横纵坐标为底面,灰度值为高度(从信号角度看,横纵坐标相当于时间轴,灰度值为信号值)
频域:经过中心化后,中心是低频,往外是高频,某频率的梯度越大(255)则亮度越强(白色)
中心化是因为:傅里叶变换后原点在左上角,直流分量在角落,低频部分位于四个角的区域
例子:
待处理图像:
目标:消除条形波纹,并且不影响原图像的清晰度
import cv2 import numpy as np import matplotlib.pyplot as plt img_joker = cv2.imread('joker.bmp',0) #直接读取为灰度图 f = np.fft.fft2(img_joker) #傅里叶变换 f1shift = np.fft.fftshift(f) #中心化
jok_f = np.log(np.abs(f1shift))
plt.imshow(jok_f,'gray'),plt.title('joker_f'), plt.show()
'''得到下面的图像'''
图中圆圈内最亮的白点代表了纹理特征所对应的频域
采用最简单的像素点置零,将四个频域点去除(点的坐标通过人工定位,也确实是最麻烦的一步)
1 #滤波,去除四个频域点 2 f1shift[152:154,145:146] = 0 3 f1shift[139:141,207:210] = 0 4 f1shift[188:190,124:126] = 0 5 f1shift[176:178,187:190] = 0 6 7 f2shift = np.fft.ifftshift(f1shift) #逆中心化 8 jok_new = np.fft.ifft2(f2shift) #逆傅里叶 9 jok_new = np.abs(jok_new) 10 11 cv2.imwrite('joker_new.bmp',jok_new)
最终效果图: