目前計(jì)算機(jī)研究生在讀。主要研究方向是人工智能和群智能算法方向。目前熟悉python網(wǎng)頁爬蟲、機(jī)器學(xué)習(xí)、計(jì)算機(jī)視覺(OpenCV)、群智能算法。然后正在學(xué)習(xí)深度學(xué)習(xí)的相關(guān)內(nèi)容。以后可能會(huì)涉及到網(wǎng)絡(luò)安全相關(guān)領(lǐng)域,畢竟這是每一個(gè)學(xué)習(xí)計(jì)算機(jī)的夢(mèng)想嘛!目前更新:目前已經(jīng)更新了關(guān)于網(wǎng)絡(luò)爬蟲的相關(guān)知識(shí)、機(jī)器學(xué)習(xí)的相關(guān)知識(shí)、目前正在更新計(jì)算機(jī)視覺-OpenCV的相關(guān)內(nèi)容。本文摘要
本文我們將繼續(xù)講解OpenCV-圖像傅里葉變換的相關(guān)操作。文章目錄傅里葉基礎(chǔ)傅里葉基礎(chǔ)numpy實(shí)現(xiàn)逆傅里葉numpy實(shí)現(xiàn)頻域的高通濾波傅里葉OpenCV實(shí)現(xiàn)傅里葉OpenCV逆變換實(shí)現(xiàn)頻域的低通濾波傅里葉變換有什么應(yīng)用場(chǎng)景傅里葉變換matlab實(shí)現(xiàn)
傅里葉基礎(chǔ)
法國(guó)數(shù)學(xué)家吉恩·巴普提斯特·約瑟夫·傅里葉被世人銘記的最大的貢獻(xiàn)是:他指出任何周期函數(shù)都可以表示為不同頻率的正弦和/或余弦之和的形式,每個(gè)正弦項(xiàng)和/或余弦項(xiàng)乘以不同的系數(shù)(現(xiàn)在稱該和為傅里葉級(jí)數(shù))。無論函數(shù)多么復(fù)雜,只要它是周期的,并且滿足某些適度的數(shù)學(xué)條件,都可以用這樣的和來表示。即一個(gè)復(fù)雜的函數(shù)可以表示為簡(jiǎn)單的正弦和余弦之和。甚至非周期函數(shù)(單該曲線下的面積是有限的)也可以用正弦和/或許·余弦乘以加權(quán)函數(shù)的積分來表示。在這種情況下的公式就是傅里葉公式。
比如說我們以制作一個(gè)飲料的過程,使用時(shí)域的角度來看就是這樣:
這里是什么意思呢,就是說一個(gè)飲料的制作需要在18點(diǎn)整放1個(gè)單位冰糖、3個(gè)單位紅豆、2個(gè)單位的綠豆、4個(gè)單位的西紅柿,還有1個(gè)單位的純凈水。然后再18:01分只需要假如一個(gè)單位的純凈水。后面也是一致。而頻域是怎么描述這件事的呢?
具體來說就是說他發(fā)現(xiàn)了一個(gè)規(guī)律,就是說這個(gè)制作過程,每分鐘都要加入冰糖,每?jī)煞昼姸家尤爰t豆,每三分鐘都要加入一次綠豆…。對(duì)于時(shí)域角度我們這樣描述。
對(duì)于頻域角度我們這樣描述這件事,用直方圖表示就是:
如果要考慮更精準(zhǔn)的時(shí)間精度,我們就要引入相位這個(gè)概念。他是一個(gè)和時(shí)間差有關(guān)的一個(gè)表述。
這里我們說明一下就是時(shí)域和頻域的表述是互逆的,對(duì)于時(shí)域我們是時(shí)間為橫坐標(biāo),振幅為縱坐標(biāo)。對(duì)于頻域我們以頻率為橫坐標(biāo),振幅為縱坐標(biāo)。但是可以看得出來頻域的表述更加簡(jiǎn)單,但是比較抽象,不容易理解。傅里葉說:任何連續(xù)周期信號(hào),可以由一組適當(dāng)?shù)恼仪€組合而成。注意這里是一組而不是一個(gè)。比如對(duì)于這樣的一個(gè)圖像:f(x)=3np.sin(0.8x)+7np.sin(1/3x)+2np.sin(0.2x)
看上去是毫無規(guī)律可言吧,但是它也可以由一組正弦函數(shù)組成。
他們是可逆的,想不到吧,亂七八糟的東西也有規(guī)律了。但是他們就是這樣組合而成的嗎?不可能吧,所以這里就是不是同時(shí)開始的一組余弦函數(shù),在疊加時(shí)要體現(xiàn)開始的時(shí)間。也就說組合的函數(shù)他們的開始時(shí)間是不一樣的。在這里分別對(duì)應(yīng)0,2,3.看公式就看出來啦。這里多說一嘴就是說傅里葉變換從時(shí)域角度來看,這個(gè)世界是動(dòng)態(tài)的!從頻域角度來看這個(gè)世界是靜止的。從數(shù)學(xué)角度來講:傅里葉變換將一個(gè)任意的周期函數(shù)分解成為無窮個(gè)正弦函數(shù)的和的形式。從物理角度來講:傅里葉變換實(shí)現(xiàn)了將信號(hào)從空間域到頻率域的轉(zhuǎn)換。
傅里葉基礎(chǔ)numpy實(shí)現(xiàn)
python是可以實(shí)現(xiàn)傅里葉變換的,這里就要說到三劍客的numpy了。對(duì)應(yīng)的函數(shù)是:numpy.fft.fft2返回一個(gè)復(fù)數(shù)數(shù)組(complex ndarray)。numpy.fft.fftshift這個(gè)函數(shù)時(shí)表示把將零頻率分量移到頻譜中心。
還要設(shè)置頻譜的范圍20*np.log(np.abs(fshift)),對(duì)于圖像來說就是255了。
import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread(‘imagelena.bmp’,0)f = np.fft.fft2(img)fshift = np.fft.fftshift(f)result = 20*np.log(np.abs(fshift))plt.subplot(121)plt.imshow(img, cmap = ‘gray’)plt.title(‘original’)plt.axis(‘off’)plt.subplot(122)plt.imshow(result, cmap = ‘gray’)plt.title(‘result’)plt.axis(‘off’)plt.show()12345678910111213141516
結(jié)果是:
原圖和頻譜圖像。
- 傅里葉得到低頻、高頻信息,針對(duì)低頻、高頻處理能夠?qū)崿F(xiàn)不同的 目的。
- 傅里葉過程是可逆的,圖像經(jīng)過傅里葉變換、逆傅里葉變換后,能 夠恢復(fù)到原始圖像
- 在頻域?qū)D像進(jìn)行處理,在頻域的處理會(huì)反映在逆變換圖像上
逆傅里葉numpy實(shí)現(xiàn)
對(duì)于傅里葉的逆操作這里沒有什么可說的,就是把頻域圖像轉(zhuǎn)回原圖像。
函數(shù)是:numpy.fft.ifft2,那么還有一個(gè)操作就是把中間移動(dòng)回去對(duì)啊。numpy.fft.ifftshift。iimg = np.abs(逆傅里葉變換結(jié)果)而第二個(gè)圖就表示低頻部分,邊緣就表示為高頻部分。
import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread(‘imageboat.bmp’,0)f = np.fft.fft2(img)fshift = np.fft.fftshift(f)ishift = np.fft.ifftshift(fshift)iimg = np.fft.ifft2(ishift)iimg = np.abs(iimg)plt.subplot(121),plt.imshow(img, cmap = ‘gray’)plt.title(‘original’),plt.axis(‘off’)plt.subplot(122),plt.imshow(iimg, cmap = ‘gray’)plt.title(‘iimg’),plt.axis(‘off’)plt.show()1234567891011121314
首先我們要進(jìn)行傅里葉變換吧,才可以進(jìn)行逆操作。結(jié)果是:
完全一致?。。?/p>