[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)