[DIP] 数字图像处理 (MATLAB) CH04

---慢慢地go through冈萨雷斯的DIP和配套的matlab,记下一些零碎的知识点给自己以后复习。

 

DIP CH04 频率域滤波
x = nextpow2(a)可以找到最小整数x,使得2的x次幂比a大;

 

傅里叶频谱

F = fft2(f)   ---   傅里叶变换,f为图像,空间域,F为傅里叶频域,直流分量在左上角,(1,1);

Fc = fftshift(F)   ---   居中操作,将F的直流分量从左上角移动到频率矩形的中心;

S = abs(Fc)   ---   傅里叶频谱幅值;

S2 = log(1+S)   ---   调整动态范围;

imshow(S2,[])   ---   显示;

Fi = ifftshift(Fc)   ---   逆居中操作;

fi = ifft2(Fi)   ---   逆傅里叶变换;

 

书中paddedsize是寻找合适的图像函数和滤波函数尺寸,然后以0填充,可以选择合适的最小偶数,也可以选择合适的最小的2的整数次幂为尺寸,用以加快傅里叶变换的计算。

 

通过空间滤波器构造频域滤波器

H = freqz2(h,R,C)   ---   h为空间滤波器,R,C是生成的频域滤波器的尺寸,注意,H的直流分量在频率矩形的中心位置;

                             ---   因此与图像f的傅里叶变换 fft2(f,R,C) 得到的 F 不能直接相乘,F的直流分量在左上角,先将H通过 ifftshift(H) 逆居中操作;

                             ---   可视化的时候居中的频谱更合适,平时运算用没有居中的频谱(即直流分量左上角,或者说在四个角落上,这是离散傅里叶变换的周期性);

gscale   ---   类似于 imshow(f,[]),对图像作 min -> 0,max -> 255 的映射;

 

在频域中直接生成滤波器

[U,V] = dftuv(M,N)   ---   用于生成2个M*N的矩阵,U,V的元素是位置(i,j)与“原点”的“水平距离”与“竖直距离”,其中四个角落同时为原点(这是给傅里叶变换用的,考虑周期性);

                              ---   滤波器通常以直流分量为中心对称分布,[U,V]就是 未居中的滤波器 中各处与 直流分量(四个角落) 的距离;

                              ---   D = (U.^2 + V.^2).^0.5 则是各频率分量与直流分量在频域上的距离矩阵;

                              ---   H = exp(-D.^2/(2*D0^2)) 则是标准差为D0的高斯分布(高斯低通滤波器);

[H,D] = lpfilter(type,M,N,D0,n)   ---   IPT的低通滤波器生成函数,type包括'ideal','btw'和'gaussian'(理想,巴特沃兹,高斯),M与N是滤波尺寸,D0是截止频率,n是巴特沃兹滤波器的参数;

                                                ---   H是返回的低通滤波器,如上,其直流分量的传输系数在左上角,如果需要用图像显示,最好先进行 fftshift(H) 居中处理,D则是上述的距离矩阵;

H = hpfilter(type,M,N,D0,n)   ---   与lpfilter类似,实际上即是 H(hp) = 1 - H(lp),注意,高通滤波器会阻止直流分量通过,所以图像的平均值将会降为零;

                                           ---   因此常采用高频强调滤波器,在高频率波的b倍基础上增添一个偏移量a(相当于所有频率分量都会被增强a倍);

                                           ---   a<b,也就是低频分量增强倍数不及高频分量,从而突出高频分量, H(hfe) = a + b * H(hp)

posted @ 2014-09-10 16:25  Cyrus Ho  阅读(335)  评论(0编辑  收藏  举报