当前位置:   article > 正文

matlab--简单滤波器的设计_理想低通滤波器设计matlab

理想低通滤波器设计matlab

       一个图像经过傅立叶变换后,就从空域变到了频域,因此我们可以用信号处理中对于频域信号的处理方法对一幅图像进行处理。比如对图像进行低通滤波、高通滤波等。

低通滤波

       数字图像处理的低通滤波是一种用于去除图像中高频噪声和细节的方法。该方法通过滤波器的运算来使图像的高频成分减小,从而达到平滑处理的效果。

      常见的低通滤波器包括均值滤波器、高斯滤波器和中值滤波器。这些滤波器通过在图像上滑动一个固定大小的窗口,计算窗口内像素的均值、高斯加权均值或中值来实现滤波操作。

        一个二维的理想低通滤波器(ILPF),它的传递函数由下式确定:

   

       式中D0是一个规定的非负的量,称为截止频率,虽然在计算机中必定能够模拟一个锐截止频率的理想低通或高通滤波器,但这种理想的滤波器不能用电子元件来实现。实际中比较常用的滤波器有:巴特沃思(Butterworth)滤波器、指数滤波器、梯形滤波器等。

高通滤波

       高通滤波是数字图像处理中一种常用的滤波技术,它可以用来增强图像的高频部分,从而突出图像的细节和边缘。高通滤波的核心思想是通过减少图像中低频分量的影响,来增强高频分量的信息。

       在图像处理中,高通滤波通常通过对图像进行傅立叶变换来实现。具体来说,可以使用一个高通滤波器来滤除图像中的低频部分,而保留高频部分。常见的高通滤波器包括布特沃斯高通滤波器、高斯高通滤波器等。

      一个二维的理想高通滤波器(IHPF),它的传递函数为:

例子

       以下以设计一个理想的低通滤波器为例加以说明。

       设计理想的低通滤波器由其定义可知只要设计一个与频域图像大小完全相同的矩阵。在某一个区域内该矩阵的值为1,其余为0即可。

例:若图像的大小为M×N,则可以这样设计一个低通滤波器:

H=zeros(M, N);

H(M/4 : M*3/4, N/4 : N*3/4)=1;  %此处的范围是人为取定的,可以根据需要更改。

若图像矩阵I的傅立叶变换是B(已经用fftshift将频谱中心移至矩阵的中心),则对这幅图像做低通滤波,再做傅立叶逆变换命令为:

LOWPASS=B.* H;  %此处变换后的矩阵为LOWPASS,另注意这儿是矩阵的点乘

C=ifft2(LOWPASS);

imshow(abs(C))

下图为一个图像的傅立叶变换谱及其频域低通、高通滤波的结果:

代码实现

       设计一个简单的理想低通滤波器(截止频率50),对图像作频域低通滤波,再作反变换,观察滤波后的图像与原图像的区别

  1. I = imread('1.png');
  2. I=rgb2gray(I);
  3. subplot(121),imshow(I);
  4. title('原始图像');
  5. % 函数fft2()用于计算二维傅立叶变换
  6. % 函数fftshift()是对函数fft2()作傅里叶变换后得到的频谱进行平移,将变换后的图像频谱中心从矩阵的原点移到矩阵的中心
  7. % 作二维傅里叶变换前一定要用函数im2double()把原始图像的数据类型由uint8转化为double类型
  8. % 否则会因为unit8数据类型只能表示0-255的整数而出现数据截断,进而出现错误结果
  9. s=fftshift(fft2(im2double(I)));
  10. [a,b]=size(s);
  11. a0=round(a/2);
  12. b0=round(b/2);
  13. d0=50; % 将理想低通滤波器的截止频率D0设置为50
  14. for i=1:a %双重for循环计算频率点(i,j)与频域中心的距离D(i,j)=sqrt((i-round(a/2)^2+(j-round(b/2)^2))
  15. for j=1:b
  16. distance=sqrt((i-a0)^2+(j-b0)^2);
  17. if distance<=d0 % 根据理想低通滤波器产生公式,当D(i,j)<=D0,置为1
  18. h=1;
  19. else
  20. h=0; % 根据理想低通滤波器产生公式,当D(i,j)>D0,置为0
  21. end
  22. s(i,j)=h*s(i,j);% 频域图像乘以滤波器的系数
  23. end
  24. end
  25. % real函数取元素的实部
  26. s=real(ifft2(ifftshift(s)));% 最后进行二维傅里叶反变换转换为时域图像
  27. subplot(122),imshow(s,[]);
  28. title('理想低通滤波所得图像');

      设计一个简单的理想高通滤波器(截止频率20),对图像作频域高通滤波,再作反变换,观察滤波后的图像与原图像的区别。选取不同的截止频率,比较结果。

  1. % 读取原始图像
  2. originalImage = imread('1.png');
  3. % 将图像转换为灰度图像
  4. grayImage = rgb2gray(originalImage);
  5. % 将图像转换为双精度类型
  6. grayImage = im2double(grayImage);
  7. % 计算图像大小
  8. [M, N] = size(grayImage);
  9. % 设置截止频率(自选)
  10. cutoffFrequency = 20;
  11. % 计算滤波器中心位置
  12. cx = round(M / 2);
  13. cy = round(N / 2);
  14. % 创建频域滤波器
  15. filter = zeros(M, N);
  16. for i = 1:M
  17. for j = 1:N
  18. distance = sqrt((i-cx)^2 + (j-cy)^2);
  19. if distance > cutoffFrequency
  20. filter(i, j) = 1;
  21. end
  22. end
  23. end
  24. % 对输入图像进行傅里叶变换
  25. F = fftshift(fft2(grayImage));
  26. % 应用高通滤波器
  27. filteredF = F .* filter;
  28. % 对滤波结果进行反傅里叶变换
  29. filteredImage = real(ifft2(ifftshift(filteredF)));
  30. % 显示原始图像和滤波后的图像
  31. figure;
  32. subplot(1, 2, 1);
  33. imshow(grayImage);
  34. title('原始图像');
  35. subplot(1, 2, 2);
  36. imshow(filteredImage);
  37. title('滤波后的图像');

总结

       低通滤波器的运算使图像中的细节和高频信息受到抑制,从而可以减少图像中的噪声并平滑图像。然而,需要注意的是,低通滤波器会使图像的细节丢失,因此需要根据具体应用场景来选择合适的滤波器和参数。

       高通滤波可以应用于许多图像处理任务,比如图像增强、边缘检测等。但需要注意的是,高通滤波可能会增加图像中的噪音,因此在应用高通滤波时需要根据具体的应用场景和图像特点进行调整。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/72542?site
推荐阅读
相关标签
  

闽ICP备14008679号