OpenCV-Python學(xué)習(xí)(十):圖像濾波之傅里葉變換

濾波分析又分為 時(shí)域分析、頻域分析:

  • 時(shí)域分析: 直接對(duì)信號(hào)本身進(jìn)行分析。
  • 頻域分析: 對(duì)信號(hào)的變化快慢進(jìn)行分析。

傅里葉變換可把信號(hào)從時(shí)間域轉(zhuǎn)換到頻率域,進(jìn)而研究信號(hào)的頻譜結(jié)構(gòu)和變化規(guī)律。

圖像濾波中空間域相當(dāng)于信號(hào)中的時(shí)間域,使用傅里葉變換和逆傅里葉變換可實(shí)現(xiàn)空域與頻域的相互轉(zhuǎn)換。傅里葉變換的物理意義是將圖像的灰度分布函數(shù)變換為圖像的頻率分布函數(shù)。圖像的頻率是表征圖像中灰度變化劇烈程度的指標(biāo),是灰度在平面空間上的梯度。對(duì)于邊界點(diǎn)或噪聲,其灰度值變化劇烈,是圖像中的高頻分量。


Numpy和OpenCV的傅里葉變換

圖像的傅里葉變換流程:

  • 0.先將圖片轉(zhuǎn)化為灰度圖

  • 1.將空域轉(zhuǎn)化為頻域-->傅里葉變換
    ??Numpy: FFT(Fast Fourier Transform) 快速傅里葉變換
    ????numpy.fft.fft2()
    ??OpenCV: DFT(Discrete Fourier Transform) 離散傅里葉變換
    ????dft(src, dst=None, flags=None, nonzeroRows=None)

    ????示例: dft = cv2.dft(numpy.float32(gray), flags=cv2.DFT_COMPLEX_OUTPUT)
    ????src: 轉(zhuǎn)為numpy.float32類(lèi)型
    ????flags: 轉(zhuǎn)換的標(biāo)識(shí)符,默認(rèn)flags=0,表示正向變換。其他標(biāo)識(shí)符如下:
    ??????DFT_INVERSE = 1
    ??????DFT_SCALE = 2
    ??????DFT_ROWS = 4
    ??????DFT_COMPLEX_OUTPUT = 16
    ??????DFT_REAL_OUTPUT = 32
    ??????DFT_COMPLEX_INPUT = 64

  • 2.中心化:將四周低頻移動(dòng)到圖像中心
    ??numpy.fft.fftshift

  • 3.進(jìn)行濾波操作(包括高頻、低頻等)

  • 4.去中心化:將低頻和高頻的位置還原
    ??numpy.fft.ifftshift()

  • 5.將頻域轉(zhuǎn)化為空域-->逆傅里葉變換
    ??Numpy: numpy.fft.ifft2()
    ??OpenCV: cv2.idft()

  • 6.二維向量取模(幅值): x + yj ==> \sqrt{x^2 + y^2}
    ??Numpy: numpy.abs(x + yj)
    ??OpenCV: cv2.magnitude(x, y)

1.Numpy中的FFT(快速傅里葉變換)
# 1.Numpy中的 FFT(Fast Fourier Transform) 快速傅里葉變換
import numpy
import cv2
import matplotlib.pyplot as plt

img = cv2.imread("image/9.jpg")
# 0.轉(zhuǎn)化為灰度圖
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
rows, cols = gray.shape

# 1.FFT快速傅里葉變換: 空域-->頻域
fft = numpy.fft.fft2(gray)  # 參數(shù)為灰度圖
# 2.中心化: 將低頻移動(dòng)到圖像中心
fftshift = numpy.fft.fftshift(fft)

# 獲取振幅譜(展示圖片用): 20 * numpy.log()是為了將值限制在[0, 255]
magnitude_spectrum = 20 * numpy.log(numpy.abs(fftshift))

# 3.濾波操作之高通濾波(去低頻,保高頻)
fftshift[rows // 2 - 30:rows // 2 + 30, cols // 2 - 30: cols // 2 + 30] = 0

# 4.去中心化: 將低頻和高頻的位置還原
ifftshift = numpy.fft.ifftshift(fftshift)
# 5.逆傅里葉變換: 頻域-->空域
ifft = numpy.fft.ifft2(ifftshift)
# 6.二維向量取模(幅值)
img_back = numpy.abs(ifft)

# 結(jié)合matplotlib展示多張圖片
plt.figure(figsize=(10, 10))
plt.subplot(221), plt.imshow(gray, cmap="gray"), plt.title("Input Gray Image")
plt.xticks([]), plt.yticks([])
plt.subplot(222), plt.imshow(magnitude_spectrum, cmap="gray"), plt.title("Magnitude Spectrum")
plt.xticks([]), plt.yticks([])
plt.subplot(223), plt.imshow(img_back, cmap="gray"), plt.title("Image after HPF")
plt.xticks([]), plt.yticks([])
plt.subplot(224), plt.imshow(img_back), plt.title("Result in JET")  # 默認(rèn)cmap='jet'
plt.xticks([]), plt.yticks([])
plt.show()
2.OpenCV中的DFT(離散傅里葉變換)
# 2.OpenCV中的 DFT(Discrete Fourier Transform) 離散傅里葉變換
import numpy
import cv2
import matplotlib.pyplot as plt

img = cv2.imread("image/9.jpg")
# 0.轉(zhuǎn)化為灰度圖
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
rows, cols = gray.shape

# 1.DFT離散傅里葉變換: 空域-->頻域
dft = cv2.dft(src=numpy.float32(gray), flags=cv2.DFT_COMPLEX_OUTPUT)  # src為灰度圖,并且是numpy.float32類(lèi)型
print(dft.shape)
# 2.中心化: 將低頻移動(dòng)到圖像中心
fftshift = numpy.fft.fftshift(dft)

# 獲取振幅譜(展示圖片用): 20 * numpy.log()是為了將值限制在[0, 255]
magnitude_spectrum = 20 * numpy.log(cv2.magnitude(fftshift[:, :, 0], fftshift[:, :, 1]))

# 3.濾波操作之低通濾波(去高頻,保低頻)
mask = numpy.zeros((rows, cols, 2), dtype=numpy.uint8)
mask[rows // 2 - 30: rows // 2 + 30, cols // 2 - 30: cols // 2 + 30] = 1
fftshift = fftshift * mask

# 4.去中心化: 將低頻和高頻的位置還原
ifftshift = numpy.fft.ifftshift(fftshift)
# 5.逆傅里葉變換: 頻域-->空域
idft = cv2.idft(ifftshift)
# 6.二維向量取模(幅值)
img_back = cv2.magnitude(idft[:, :, 0], idft[:, :, 1])

# 結(jié)合matplotlib展示多張圖片
plt.figure(figsize=(10, 10))
plt.subplot(221), plt.imshow(gray, cmap="gray"), plt.title("Input Gray Image")
plt.xticks([]), plt.yticks([])
plt.subplot(222), plt.imshow(magnitude_spectrum, cmap="gray"), plt.title("Magnitude Spectrum")
plt.xticks([]), plt.yticks([])
plt.subplot(223), plt.imshow(img_back, cmap="gray"), plt.title("Image after LPF")
plt.xticks([]), plt.yticks([])
plt.subplot(224), plt.imshow(img_back), plt.title("Result in JET")  # 默認(rèn)cmap='jet'
plt.xticks([]), plt.yticks([])
plt.show()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,117評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,860評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事?!?“怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 177,128評(píng)論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,291評(píng)論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,025評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,421評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,477評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,642評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,177評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,970評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,157評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,717評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,410評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,821評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,053評(píng)論 1 289
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,896評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,157評(píng)論 2 375