图像处理第三章笔记

函数

1.二维离散傅里叶变换的实现:F=fft2(f)

填充时:F=fft2(f,P,Q)

傅里叶谱|F|:S=abs(F)

例子1:

>> f=imread('Fig0303(a).tif');

>> F=fft2(f);

>> S=abs(F);

>> imshow(f) , title('原图');

>>figure, imshow(S,[]), title('频谱图');

>> S2=log(1+abs(Fc));

>> imshow(S2,[]),title('对数变换后的频谱图')

MATLAB中,频率中心坐标 : (floor(M/2)+1,floor(N/2)+1)

 

2.把原点移动到频率矩阵的中心:Fc=fftshift(F)

例子2:接着例子1

>> Fc=fftshift(F);

>> imshow(abs(Fc),[])

3.ifftshift函数将居中结果反转

>> F=ifftshift(Fc)

 

4.实现傅里叶反变换:f=ifft2(F)

注 fft2(f)直接把图f无缩放变换成double型.再ifft2变回f时是数值与原f一样类型是double的结果,这样有可能由于截断造成问题,故先把f用tofloat转成single型,再fft2,ifft2,再转换成原f的类型.避开类型造成的截断问题.

理论上ifft2后应该是实数,但是由于计算误差,会带有虚部,故提取反变换的实数部分即可.f=real(ifft2(F));

 

5.Paddedsize函数:填充函数

例子3:有和没有填充的滤波效果

无填充

f=imread('Fig0305(a).tif');

[M,N]=size(f);

[f,revertclass]=tofloat(f);

F=fft2(f);

sig=10;

H=lpfilter('gaussian',M,N,sig);

G=H.*F;

g=ifft2(G);

g=revertclass(g);

figure,imshow(f);figure,imshow(g);

有填充:

f=imread('Fig0305(a).tif');

[f,revertclass]=tofloat(f);

PQ=paddedsize(size(f)); %计算填充的大小

Fp=fft2(f,PQ(1),PQ(2));

sig=10;

Hp=lpfilter('gaussian',PQ(1),PQ(2),2*sig);

Gp=Hp.*Fp;

gp=ifft2(Gp);

gpc=gp(1:size(f,1),1:size(f,2));

gpc=revertclass(gpc);

imshow(gp)figure,imshow(gpc)

6.DFT滤波的基本步骤

1.转换图像为浮点图像 tofloat

2.用paddedsize获得填充参数

3.得到有填充参数的傅里叶变换

4.用频率域中一大小为的滤波传递函数(非居中格式,若为居中,则先移动ifftshift)

5.用滤波传递函数️第3步的傅里叶变换

6.逆傅里叶变换

7.取6结果左上部(大小与原图像未填充前一致)

8. 若有需要,将7的到结果转换成原输入图像的类型

 

7.dftfilt函数:将DFT滤波的基本步骤封装在这个函数里

function g = dftfilt(f, H, classout)
[f, revertClass] = tofloat(f);

F = fft2(f, size(H, 1), size(H, 2));

g = ifft2(H.*F);

g = g(1:size(f, 1), 1:size(f, 2));

if nargin == 2 || strcmp(classout, 'original')

g = revertClass(g);

elseif strcmp(classout, 'fltpoint') % g is floating point already.

return

else

error('Undefined class for the output image.')

end

 

8.dftuv(M,N)函数:创建用于实现频率域滤波器的网格数组

function [U,V]=dftuv(M,N)

u=single(0:(M-1));

v=single(0:(N-1));

idx=find(u>M/2);

u(idx)=u(idx)-M;

idy=find(v>N/2);

v(idy)=v(idy)-N;

[V,U]=meshgrid(v,u);

 

9.理想低通滤波器

例子:

结果显示:

 

10、巴特沃斯低通滤波器

例子:

结果显示:

 

11、高斯低通滤波器

例子:

结果显示:

 

12、lpfilter函数:生成低通滤波器的传递函数,即封装三种滤波器的代码

pe类型---'ideal' 、'btw' 、'gaussian'

大小----M*N

D0-----截止频率

n------巴特沃斯滤波器所带参数

 

13、高通(锐化)频率域滤波器

若给定低通滤波器的传递函数为 则相应高通滤波器的传递函数为

function H = hpfilter(type, M, N, D0, n)

%生成高通滤波传递函数H

%type—'ideal', 'btw', 'gaussian'

if nargin == 4

n = 1; % n的默认值.

end

Hlp = lpfilter(type, M, N, D0, n);%低通滤波器

H = 1 - Hlp;

例子:

结果显示:

 

14、高频强调滤波

例子:

结果显示:

原文地址:https://www.cnblogs.com/panqiaoyan/p/13095196.html