本文目录

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


常用的滤波器

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

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

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

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

理想低通滤波器计算简单,但是存在振铃效应,应用不多;

图像的高通滤波pytorch 图像高通滤波器matlab_计算机视觉

高斯低通滤波器

Gaussian 低通滤波器的传输函数定义为:

图像的高通滤波pytorch 图像高通滤波器matlab_计算机视觉_02


选取不同的D0来达到不同的效果:

图像的高通滤波pytorch 图像高通滤波器matlab_计算机视觉_03

使用高斯低通滤波器连接断裂的笔画

图像的高通滤波pytorch 图像高通滤波器matlab_信号处理_04

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

运行图片示例:

图像的高通滤波pytorch 图像高通滤波器matlab_图像的高通滤波pytorch_05


通过调整D0来达到不同的效果。

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

高斯高通滤波器

Gaussian 高通滤波器定义为:

图像的高通滤波pytorch 图像高通滤波器matlab_高斯滤波器_06


图像的高通滤波pytorch 图像高通滤波器matlab_计算机视觉_07


对于高斯高通滤波器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

结果示例:

图像的高通滤波pytorch 图像高通滤波器matlab_matlab_08


可以获得轮廓。

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

Butterworth 低通滤波器

截至频率为D0 的n 阶Butterworth 低通滤波器定义为:

图像的高通滤波pytorch 图像高通滤波器matlab_图像的高通滤波pytorch_09


图像的高通滤波pytorch 图像高通滤波器matlab_高斯滤波器_10

Butterworth 高通滤波器定义为:

图像的高通滤波pytorch 图像高通滤波器matlab_图像的高通滤波pytorch_11


图像的高通滤波pytorch 图像高通滤波器matlab_信号处理_12


最后感谢各位的指正!☺