【計算機視覺】圖像增強----圖像的傅立葉變換
一:相關(guān)概念
1.什么是傅里葉變換
? ? ? ? 傅里葉變換是線性系統(tǒng)分析的一個有力工具,它能夠定量地分析諸如數(shù)字化系統(tǒng)、采樣點、電子放大器、卷積濾波器、噪音和顯示點等的作用。通過實驗培養(yǎng)這項技能,將有助于解決大多數(shù)圖像處理問題。對任何想在工作中有效應(yīng)用數(shù)字圖像處理技術(shù)的人來說,把時間用在學(xué)習(xí)和掌握博里葉變換上是很有必要的。?
2.傅里葉變換的定義
對于二維信號,二維Fourier變換定義為:

圖像的傅立葉變換與一維信號的傅立葉變換變換一樣,有快速算法,具體參見參考書目,有關(guān)傅立葉變換的快速算法的程序不難找到。實際上,現(xiàn)在有實現(xiàn)傅立葉變換的芯片,可以實時實現(xiàn)傅立葉變換。
二:傅里葉變換?
a) 繪制一個二值圖像矩陣,并將其傅立葉函數(shù)可視化。
f=zeros(30,30);
f(5:24,13:17)=1;?
imshow(f,'InitialMagnification','fit')

F=fft2(f);
F2=log(abs(F));
figure,imshow(F2,[-1 5],'InitialMagnification','fit');colormap(jet);

分析:fft2表示將二維矩陣轉(zhuǎn)換為頻域,可以看到得到的像譜圖不是中心對稱的, 因此需要進行下一步處理。可以看到,由于矩陣的零頻分量分布在矩陣的四周,而1 頻分量分布在中心,所以在矩陣中間的梯度較大,對應(yīng)的頻譜圖越暗。
F=fft2(f,256,256); %零填充為256×256矩陣

F2=fftshift(F); ???%將圖像頻譜中心由矩陣原點移至矩陣中心
figure,imshow(log(abs(F2)),[-1 5],'notruesize');colormap(jet);

分析:根據(jù)快速傅里葉變換的計算要求,需要圖像的行數(shù)、列數(shù)均滿足2的n次方,所以進行轉(zhuǎn)換前要進行補零操作。一個M行N列的二維圖像f(x,y),先按行隊列變量y做一次長度為N的一維離散傅里葉變換,再將計算結(jié)果按列向?qū)ψ兞縳做一次長度為M傅里葉變換就可以得到該圖像的傅里葉變換結(jié)果。fft2將時域信號轉(zhuǎn)換為頻域信號,低頻分布在四周,fftshift用于將fft2的 DC分量移動到頻譜中心,低頻區(qū)域移動到中央,這樣便于處理,可以看到得到的頻譜圖是中心對稱的。
b)利用傅立葉變換分析兩幅圖像的相關(guān)性,定位圖像特征。讀入圖像‘text.png',抽取其中的字母‘a(chǎn)’。
bw=imread('text.png');
a=bw(32:46,85:102);
imshow(bw);

figure,imshow(a);

C=real(ifft2(fft2(bw).*fft2(rot90(a,2),256,256)));%求相關(guān)性
figure,imshow(C,[]);

thresh=max(C(:));
figure,imshow(C>thresh-10)

figure,imshow(C>thresh-15)

在空域中f(x,y)與 與 g(x,y) 的相關(guān)等價于頻域中 F(u,v) 的共軛與 G(u,v)? 相乘,利用傅里葉變換,可以將積分求和過程轉(zhuǎn)換成頻域相乘(程序里求的是相乘后的實部),簡化了計算過程,相關(guān)定理與卷積定理類似。相關(guān)定理可用于匹配當(dāng)中,用于尋找感興趣的物體,例如題中尋找字母a,匹配之后函數(shù)相關(guān)值在匹配點達到最大值(見圖2.5.1-7,匹配點亮度最亮)。此外在尋找其他區(qū)域匹配點時,先找出了相關(guān)矩陣的最大值,然后顯示出相關(guān)值大于最大值減10的匹配點,可以看到在第一第二行基本匹配成功(見2.5.1-8),顯示出相關(guān)值大于最大值減15的匹配點時誤差比較大。其實求的也即實部誤差。
三:離散余弦變換(DCT)
a) 使用dct2對圖像‘a(chǎn)utumn.tif’進行DCT變換
RGB=imread('autumn.tif');
imshow(RGB)

I=rgb2gray(RGB); %轉(zhuǎn)換為灰度圖像
figure,imshow(I)

J=dct2(I);
figure,imshow(log(abs(J)),[]),colormap(jet(64));colorbar;

對原始圖像進行離散余弦變換,首先要把彩色圖片進行灰度化處理,可以看到變換后的DCT系數(shù)能量主要集中在左上角,其余大部分DCT系數(shù)接近于0,說明離散余弦變換適用于對圖像進行壓縮。低頻系數(shù)體現(xiàn)的是圖像中目標(biāo)的輪廓和灰度分布特性,高頻系數(shù)體現(xiàn)的是目標(biāo)形狀的細節(jié)信息。DCT變換之后,能量主要集中在低頻分量處,這也是DCT變換去相關(guān)性的一個體現(xiàn)。
b) 將上述DCT變換結(jié)果中絕對值小于10的系數(shù)舍棄,使用idct2重構(gòu)圖像并與原圖像比較。
K=idct2(J);
figure,imshow(K,[0 255])

J(abs(J)<10)=0; ?%舍棄系數(shù)
K2=idct2(J);
figure,imshow(K2,[0 255]);

DCT變換和FFT變換都屬于變換壓縮方法,變換壓縮的一個特點是將從前密度均勻的信息分布變換為密度不同的信息分布。在圖像中,低頻部分的信息量要大于高頻部分的信息量,盡管低頻部分的數(shù)據(jù)量比高頻部分的數(shù)據(jù)量要小的多。對DCT系數(shù)設(shè)置門限(將DCT系數(shù)低于10的灰度值置0),這就是圖像壓縮的量化過程,再經(jīng)過逆變換將頻域轉(zhuǎn)換成空域便可達到壓縮效果,可以看到,雖然圖像經(jīng)過了壓縮處理,但是圖像質(zhì)量肉眼看不出變化(見圖2.5.2-5)。
c) 利用DCT變換進行圖像壓縮。
I=imread('cameraman.tif');
I=im2double(I);
T=dctmtx(8);
% B=blkproc(I,[8,8],'P1*x*P2',T,T');
fun = @(block_struct)T*block_struct.data*T';
B=blockproc(I,[8 8],fun);
mask=[1? 1? 1? 1? 0? 0? 0? 0
1? 1? 1? 0? 0? 0? 0? 0
? ? ? 1? 1? 0? 0? 0? 0? 0? 0
? ? ? 1? 0? 0? 0? 0? 0? 0? 0
? ? ? 0? 0? 0? 0? 0? 0? 0? 0
? ? ? 0? 0? 0? 0? 0? 0? 0? 0
? ? ? 0? 0? 0? 0? 0? 0? 0? 0
? ? ? 0? 0? 0? 0? 0? 0? 0? 0];
% B2=blkproc(B,[8 8],'P1.*x',mask);
fun = @(block_struct)Mask.*block_struct.data;
B2=blockproc(B,[8 8],fun);
% I2=blkproc(B2,[8 8],'P1*x*P2',T',T);
fun = @(block_struct)T'*block_struct.data*T;
I2=blockproc(B2,[8 8],fun);
imshow(I)

figure,imshow(I2);

在運行參考代碼時候,出現(xiàn)警告說建議使用blockproc來替換掉blkproc,經(jīng)過查 閱得知兩者的區(qū)別是blkproc必須一次性把要處理的矩陣全部導(dǎo)入內(nèi)存中,對一些超大 型圖像就無法使用了,隨后matlab推出了可以處理任意大的圖像blockproc函數(shù)。把 blkproc改成blockproc后,出現(xiàn)了錯誤,查閱幫助文檔得知blockproc函數(shù)的原型為B = blockproc(A,[M N],FUN),A是要處理的圖像矩陣,[M,N]是每次分塊處理矩陣的大小, FUN是函數(shù)句柄,即對每塊矩陣的處理函數(shù)。不同于blkproc,F(xiàn)UN須事先定義好,且 輸入必須是結(jié)構(gòu)體,其data域是我們的矩陣數(shù)據(jù),這里由blockproc分塊后的機制決定。
? ? ? ? fun = @(block_struct)T*block_struct.data*T'的作用為進行離散余弦變換,以便于后 面進行壓縮處理,其中T表示8*8的DCT變換矩陣。由于DCT系數(shù)能量值主要分布 于左上角,因此mask將左上角的系數(shù)設(shè)置為1,其余位置設(shè)置為0,這樣就能保留每 個塊中的低頻系數(shù),而舍棄高頻系數(shù),以達到圖像壓縮的目的。最后再通過fun = @(block_struct)T'*block_struct.data*T;進行反余弦變換,將頻域轉(zhuǎn)換為空域,得到 壓縮后的圖像。
四:反變換
①對(1)中的矩陣進行反變換,代碼如下:
F3 = iff2(F);
figure,imshow(log(abs(F3)),[-1 5],'InitialMagnification','fit');colormap(jet);

由于進行傅里葉變換的是矩陣,將空域轉(zhuǎn)換成了頻域,而傅里葉反變換則將空域 轉(zhuǎn)換回頻域,重新顯現(xiàn)出原來的圖形。
②對(2)中的圖像進行反變換
K=idct2(J);
figure,imshow(K,[0 255])

DCT可以用于對圖片進行壓縮,DCT過程是將空域轉(zhuǎn)換為頻域的過程,而經(jīng)過DCT逆變換則可以將頻域轉(zhuǎn)換為空域,將圖像還原。
五:不同的圖像內(nèi)容與FFT、DCT頻譜之間的對應(yīng)關(guān)系
? ? ? ? 進行傅里葉變換(FFT2)后,頻譜的低頻部分主要集中在四周,中間則為高頻部分; 而DCT則從左上角到右下角從低頻到高頻,系數(shù)逐漸減小。相同點為圖像能量均集中在 低頻部分,低頻系數(shù)體現(xiàn)出圖像中目標(biāo)的輪廓和灰度分布特性,高頻系數(shù)體現(xiàn)了目標(biāo)形 狀細節(jié)。需要注意的是,頻譜圖上各點和原圖像不存在一一對應(yīng)的關(guān)系,即使是在不移 頻的情況下也沒有。
這里給大家準(zhǔn)備了一些我精心挑選的AI的學(xué)習(xí)資料。關(guān)注VX公眾H【咕泡AI】回復(fù)【333】即可領(lǐng)?。?/span>
①10G教學(xué)視頻包(附課件+代碼)
②AI人工智能:54份行業(yè)重磅報告匯總
③能寫進簡歷的企業(yè)級項目實戰(zhàn)。
④100篇+深度學(xué)習(xí)論文合集
⑤人工智能必讀書籍
⑥專屬學(xué)習(xí)路徑規(guī)劃
⑦不定期大神直播,學(xué)習(xí)和困惑解答
⑧拿來就能跑通的論文復(fù)現(xiàn)代碼講解及數(shù)據(jù)集
這些資料都比較珍貴,但是對自我的職業(yè)發(fā)展價值則是無價的!
別慌,這些資料這一次全部免費分享給大家。覺得好,就不要吝嗇你的三連哦,這樣我才有動力持續(xù)更新哦? ?