1. 程式人生 > >初探FFT在數字圖像處理中的應用(fft2函數的用法)

初探FFT在數字圖像處理中的應用(fft2函數的用法)

aso fig res 0.00 row 之前 得到 alt demo

初探FFT在數字圖像處理中的應用




一般FFT在通信等領域都做的一維變換就能夠了。可是在圖像處理方面,須要做二維變換,這個時候就須要用到FFT2.



在利用Octave(或者matlab)裏面的fft2()函數的時候,觀察頻率領域的圖像還是要點額外的技巧的.以下的圖像是我們想要的,也是我們人類才幹夠理解的(圖片的中心表示低頻區域,越是遠離中心。頻率越高,這裏以下圖片中,中心區域非常亮,value非常高,中心周圍越來越暗,表示低頻信號強,高頻信號慢慢減弱)


技術分享



>> result = fft2(dark_channel);
>> imshow(uint8(real(result)));
直接輸出fft2的結果例如以下(正常人應該看不出什麽吧~)

技術分享

怎麽得到之前我們給出的結果呢?



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% code writer 	:	EOF
% code date	    :	2014.09.27
% code file	    :	fft2_demo.m
% e-mail	      :	[email protected]
%
%	If there is something wrong with my code, please
% touch me by e-mail. Thank you :)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear all
clc

Original_img = imread('/home/jasonleaster/Picture/hand.png');

float_Orignal_img = double(Original_img);

F64_WHITE = 255.0;
F64_BLACK = 0.000;


Original_img_row 	= size(Original_img,1);
Original_img_col 	= size(Original_img,2);
Original_img_channel 	= size(Original_img,3);

for row = 1:Original_img_row

	for col = 1:Original_img_col

		min_piexl = F64_WHITE;
		for channel = 1: Original_img_channel 

			if(min_piexl > Original_img(row,col,channel))

				min_piexl = Original_img(row,col,channel);
			end
		end

		dark_channel(row,col) = min_piexl;
	end
end

result = fft2(dark_channel);

%spectrum = fftshift(abs(result));
spectrum = result;
figure(1);

spectrum = spectrum*255/max(spectrum(:));

imshow(spectrum);




這裏一定記得fftshift,不然會出現以下的結果,低頻結果分散在四個角落

技術分享



正確結果例如以下

技術分享




初探FFT在數字圖像處理中的應用(fft2函數的用法)