初探FFT在数字图像处理中的应用(fft2函数的用法)

Posted gccbuaa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初探FFT在数字图像处理中的应用(fft2函数的用法)相关的知识,希望对你有一定的参考价值。

初探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函数的用法)的主要内容,如果未能解决你的问题,请参考以下文章

数字信号处理专题——FFT运算初探

求助急用,利用MATLAB编程描绘出随机过程 的图像

p68 对数变换 关于fft2 fftshift 频谱

fft2 (matlab) 和 fftw (C) 的不同结果

傅里叶变换系数高频和低频

绘制图像的 2D FFT