本文目录
- 常用的滤波器
- 高斯低通滤波器
- matlab代码
- 高斯高通滤波器
- Butterworth 低通滤波器
常用的滤波器
常用的滤波器有以下几种:
频域滤波器
频域平滑滤波器
理想低通滤波器
巴特沃斯低通滤波器
高斯低通滤波器
频域锐化滤波器
理想高通滤波器
巴特沃斯高通滤波器
高斯高通滤波器
频域拉普拉斯算子
高频提升滤波
同态滤波器
低通滤波器通过过滤掉频域的高频成分达到平滑目的。
滤波的基本模型G(u,v) = H(u,v)F(u,v),其中 F(u,v) 是图像的傅立叶变换结果, H(u,v) 称为滤波器传输函数
低通滤波器(Low pass filters) – 仅保留低频分量而过滤掉高频分量。
理想低通滤波器计算简单,但是存在振铃效应,应用不多;
高斯低通滤波器
Gaussian 低通滤波器的传输函数定义为:
选取不同的D0来达到不同的效果:
使用高斯低通滤波器连接断裂的笔画
matlab代码
MATLAB代码示例:
clear all;
d0=50; %阈值
image=imread('path');
[M ,N]=size(image);
img_f = fft2(double(image));%傅里叶变换得到频谱
img_f=fftshift(img_f); %移到中间
m_mid=floor(M/2);%中心点坐标
n_mid=floor(N/2);
h = zeros(M,N);%高斯低通滤波器构造
for i = 1:M
for j = 1:N
d = ((i-m_mid)^2+(j-n_mid)^2);
h(i,j) = exp(-(d)/(2*(d0^2)));
end
end
img_lpf = h.*img_f;
img_lpf=ifftshift(img_lpf); %中心平移回原来状态
img_lpf=uint8(real(ifft2(img_lpf))); %反傅里叶变换,取实数部分
subplot(1,2,1);imshow(image);title('原图');
subplot(1,2,2);imshow(img_lpf);title('高斯低通滤波d=50');
运行图片示例:
通过调整D0来达到不同的效果。
滤波器的核心都是滤波函数的构建,其余基本一致
高斯高通滤波器
Gaussian 高通滤波器定义为:
对于高斯高通滤波器MATLAB代码只需非常简单的更改:
h(i,j) = 1-exp(-(dd)/(2(d0^2)));
即可
h = zeros(M,N);%高斯低通滤波器构造
for i = 1:M
for j = 1:N
d = ((i-m_mid)^2+(j-n_mid)^2);
h(i,j) = 1-exp(-(d)/(2*(d0^2)));
end
end
结果示例:
可以获得轮廓。
同理:对于其他滤波器也是一样,只需要更改滤波函数的构建即可。
Butterworth 低通滤波器
截至频率为D0 的n 阶Butterworth 低通滤波器定义为:
Butterworth 高通滤波器定义为:
最后感谢各位的指正!☺