頻域圖像的意義:
灰度圖經過傅里葉變換,是從空間域到頻域的轉變
空間域:原圖像的橫縱坐標為底面,灰度值為高度(從信號角度看,橫縱坐標相當於時間軸,灰度值為信號值)
頻域:經過中心化后,中心是低頻,往外是高頻,某頻率的梯度越大(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)
最終效果圖: