MATLAB图像处理--高斯低通滤波、高斯高通滤波(代码及示例)

本文目录

  • 常用的滤波器
  • 高斯低通滤波器
    • matlab代码
  • 高斯高通滤波器
  • Butterworth 低通滤波器

常用的滤波器

常用的滤波器有以下几种:

频域滤波器
频域平滑滤波器
理想低通滤波器
巴特沃斯低通滤波器
高斯低通滤波器

频域锐化滤波器
理想高通滤波器
巴特沃斯高通滤波器
高斯高通滤波器
频域拉普拉斯算子
高频提升滤波
同态滤波器

低通滤波器通过过滤掉频域的高频成分达到平滑目的。
滤波的基本模型G(u,v) = H(u,v)F(u,v),其中 F(u,v) 是图像的傅立叶变换结果, H(u,v) 称为滤波器传输函数
低通滤波器(Low pass filters) – 仅保留低频分量而过滤掉高频分量。

理想低通滤波器计算简单,但是存在振铃效应,应用不多;
MATLAB图像处理--高斯低通滤波、高斯高通滤波(代码及示例)_第1张图片

高斯低通滤波器

Gaussian 低通滤波器的传输函数定义为:
在这里插入图片描述
选取不同的D0来达到不同的效果:

MATLAB图像处理--高斯低通滤波、高斯高通滤波(代码及示例)_第2张图片

使用高斯低通滤波器连接断裂的笔画
MATLAB图像处理--高斯低通滤波、高斯高通滤波(代码及示例)_第3张图片

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');

运行图片示例:
MATLAB图像处理--高斯低通滤波、高斯高通滤波(代码及示例)_第4张图片
通过调整D0来达到不同的效果。

滤波器的核心都是滤波函数的构建,其余基本一致

高斯高通滤波器

Gaussian 高通滤波器定义为:
在这里插入图片描述
MATLAB图像处理--高斯低通滤波、高斯高通滤波(代码及示例)_第5张图片
对于高斯高通滤波器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

结果示例:
MATLAB图像处理--高斯低通滤波、高斯高通滤波(代码及示例)_第6张图片
可以获得轮廓。

同理:对于其他滤波器也是一样,只需要更改滤波函数的构建即可。

Butterworth 低通滤波器

截至频率为D0 的n 阶Butterworth 低通滤波器定义为:
MATLAB图像处理--高斯低通滤波、高斯高通滤波(代码及示例)_第7张图片
MATLAB图像处理--高斯低通滤波、高斯高通滤波(代码及示例)_第8张图片

Butterworth 高通滤波器定义为:
MATLAB图像处理--高斯低通滤波、高斯高通滤波(代码及示例)_第9张图片
MATLAB图像处理--高斯低通滤波、高斯高通滤波(代码及示例)_第10张图片
最后感谢各位的指正!☺

你可能感兴趣的:(MATLAB图像处理,计算机视觉,matlab,信号处理,高斯滤波器,滤波器)