当前位置:   article > 正文

Matlab图像处理频域滤波实现——巴特沃斯低通、高通、带通带阻滤波器_巴特沃斯图像高通滤波器

巴特沃斯图像高通滤波器

巴特沃斯滤波器是一种常用于图像处理的滤波器,它在频域中的传递函数具有更加平滑的过渡,相对于理想滤波器来说,巴特沃斯滤波器可以更好地控制截止频率和滤波器的阶数。下面是巴特沃斯滤波器的不同类型的原理简介:

1.原理

(1)巴特沃斯低通滤波(Butterworth Lowpass Filtering)

巴特沃斯低通滤波器通过在频域中滤除高频成分来实现图像的平滑。其传递函数为:

 其中D(u,v) 是频域中点 (u,v) 到中心的距离,D0​ 是截止频率,n 是滤波器的阶数。

(2)巴特沃斯高通滤波(Butterworth Highpass Filtering)

巴特沃斯高通滤波器通过滤除低频成分来增强图像中的细节和边缘。其传递函数为:

 其中D(u,v) 是频域中点 (u,v) 到中心的距离,D0​ 是截止频率,n 是滤波器的阶数。

(3)巴特沃斯带通滤波(Butterworth Bandpass Filtering)

巴特沃斯带通滤波器保留图像中一定频率范围内的成分,同时滤除低频和高频成分。其传递函数为:

 其中D(u,v) 是频域中点(u,v) 到中心的距离,D0​ 和 D1​ 是两个截止频率,n 是滤波器的阶数。

(4)巴特沃斯带阻滤波(Butterworth Bandstop Filtering)

巴特沃斯带阻滤波器与带通滤波器相反,它滤除一定频率范围内的成分,同时保留低频和高频成分。其传递函数为:

 其中D(u,v) 和 D0​、D1​ 同上,n 是滤波器的阶数。

2.实现代码

(1)巴特沃斯低通滤波(Butterworth Lowpass Filtering)
  1. clear
  2. clc
  3. I = imread('1.jpg'); % 读入图像
  4. I = rgb2gray(I);
  5. I=im2double(I);
  6. M=2*size(I,1); %滤波器的行数
  7. N=2*size(I,2); %滤波器的列数
  8. u=-M/2:(M/2-1);
  9. v=-N/2:(N/2-1);
  10. [U,V]=meshgrid(u, v);
  11. D=sqrt(U.^2+V.^2);
  12. D0=50; %截止频率
  13. n=6; %滤波器的阶数
  14. H=1./(1+(D./D0).^(2*n)); %设计巴特沃斯滤波器
  15. J=fftshift(fft2(I, size(H, 1), size(H, 2))); %空域转换到频域
  16. K=J.*H; %滤波处理
  17. L=ifft2(ifftshift(K)); %傅里叶反变换
  18. L=L(1:size(I,1), 1:size(I, 2)); %改变图像大小
  19. % 显示原始图像和滤波后的图像
  20. figure;
  21. % 显示原始图像
  22. subplot(221);
  23. imshow(I);
  24. title('原始图像');
  25. % 显示滤波后的图像
  26. subplot(222);
  27. imshow(L);
  28. title('滤波后的图像');
  29. % 显示原始图像的频域
  30. subplot(223);
  31. imagesc(log(1 + abs(J)));
  32. title('原始图像的频域');
  33. % 显示滤波后图像的频域
  34. subplot(224);
  35. imagesc(log(1 + abs(K)));
  36. title('滤波后图像的频域');

(2)巴特沃斯高通滤波(Butterworth Highpass Filtering)
  1. clear
  2. clc
  3. I = imread('1.jpg'); % 读入图像
  4. I = rgb2gray(I);
  5. I=im2double(I);
  6. M=2*size(I,1); %滤波器的行数
  7. N=2*size(I,2); %滤波器的列数
  8. u=-M/2:(M/2-1);
  9. v=-N/2:(N/2-1);
  10. [U,V]=meshgrid(u, v);
  11. D=sqrt(U.^2+V.^2);
  12. D0=50; %截止频率
  13. n=6; %滤波器的阶数
  14. H=1./(1+(D0./D).^(2*n)); %设计巴特沃斯滤波器
  15. J=fftshift(fft2(I, size(H, 1), size(H, 2))); %空域转换到频域
  16. K=J.*H; %滤波处理
  17. L=ifft2(ifftshift(K)); %傅里叶反变换
  18. L=L(1:size(I,1), 1:size(I, 2)); %改变图像大小
  19. % 显示原始图像和滤波后的图像
  20. figure;
  21. % 显示原始图像
  22. subplot(221);
  23. imshow(I);
  24. title('原始图像');
  25. % 显示滤波后的图像
  26. subplot(222);
  27. imshow(L);
  28. title('滤波后的图像');
  29. % 显示原始图像的频域
  30. subplot(223);
  31. imagesc(log(1 + abs(J)));
  32. title('原始图像的频域');
  33. % 显示滤波后图像的频域
  34. subplot(224);
  35. imagesc(log(1 + abs(K)));
  36. title('滤波后图像的频域');

(3)巴特沃斯带通滤波(Butterworth Bandpass Filtering)
  1. clear
  2. clc
  3. I = imread('1.jpg'); % 读入图像
  4. I = rgb2gray(I);
  5. I=im2double(I);
  6. M=2*size(I,1); %滤波器的行数
  7. N=2*size(I,2); %滤波器的列数
  8. u=-M/2:(M/2-1);
  9. v=-N/2:(N/2-1);
  10. [U,V]=meshgrid(u, v);
  11. D=sqrt(U.^2+V.^2);
  12. D0=50; %截止频率
  13. D1=60;
  14. n=6; %滤波器的阶数
  15. H=1./(1+(D.*(D1-D0)./(D.^2-D0*D1)).^(2*n)); %设计巴特沃斯滤波器
  16. J=fftshift(fft2(I, size(H, 1), size(H, 2))); %空域转换到频域
  17. K=J.*H; %滤波处理
  18. L=ifft2(ifftshift(K)); %傅里叶反变换
  19. L=L(1:size(I,1), 1:size(I, 2)); %改变图像大小
  20. % 显示原始图像和滤波后的图像
  21. figure;
  22. % 显示原始图像
  23. subplot(221);
  24. imshow(I);
  25. title('原始图像');
  26. % 显示滤波后的图像
  27. subplot(222);
  28. imshow(L);
  29. title('滤波后的图像');
  30. % 显示原始图像的频域
  31. subplot(223);
  32. imagesc(log(1 + abs(J)));
  33. title('原始图像的频域');
  34. % 显示滤波后图像的频域
  35. subplot(224);
  36. imagesc(log(1 + abs(K)));
  37. title('滤波后图像的频域');

(4)巴特沃斯带阻滤波(Butterworth Bandstop Filtering)
  1. clear
  2. clc
  3. I = imread('1.jpg'); % 读入图像
  4. I = rgb2gray(I);
  5. I=im2double(I);
  6. M=2*size(I,1); %滤波器的行数
  7. N=2*size(I,2); %滤波器的列数
  8. u=-M/2:(M/2-1);
  9. v=-N/2:(N/2-1);
  10. [U,V]=meshgrid(u, v);
  11. D=sqrt(U.^2+V.^2);
  12. D0=50; %截止频率
  13. D1=60;
  14. n=6; %滤波器的阶数
  15. H=1./(1+(D0*D1./(D.^2-D0*D1)).^(2*n)); %设计巴特沃斯滤波器
  16. J=fftshift(fft2(I, size(H, 1), size(H, 2))); %空域转换到频域
  17. K=J.*H; %滤波处理
  18. L=ifft2(ifftshift(K)); %傅里叶反变换
  19. L=L(1:size(I,1), 1:size(I, 2)); %改变图像大小
  20. % 显示原始图像和滤波后的图像
  21. figure;
  22. % 显示原始图像
  23. subplot(221);
  24. imshow(I);
  25. title('原始图像');
  26. % 显示滤波后的图像
  27. subplot(222);
  28. imshow(L);
  29. title('滤波后的图像');
  30. % 显示原始图像的频域
  31. subplot(223);
  32. imagesc(log(1 + abs(J)));
  33. title('原始图像的频域');
  34. % 显示滤波后图像的频域
  35. subplot(224);
  36. imagesc(log(1 + abs(K)));
  37. title('滤波后图像的频域');

在这些公式中,阶数 n 的选择会影响滤波器的频率响应曲线的陡峭程度。较大的 n 会导致更陡峭的过渡,但也可能引入一些振铃效应。

最后:

如果你想要进一步了解更多的相关知识,可以关注下面公众号联系~会不定期发布相关设计内容包括但不限于如下内容:信号处理、通信仿真、算法设计、matlab appdesigner,gui设计、simulink仿真......希望能帮到你!

5a8015ddde1e41418a38e958eb12ecbd.png

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

闽ICP备14008679号