Hello Mat

 找回密码
 立即注册
查看: 4454|回复: 0

巴特沃斯带阻滤波器

[复制链接]

1323

主题

1551

帖子

0

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22647
发表于 2017-3-7 21:57:38 | 显示全部楼层 |阅读模式
  1. function H = freqfilter_btw(M,N,D0,W,n)
  2. % 巴特沃斯带阻滤波器
  3. % input:
  4. %     滤波器的类型,‘btw’
  5. %     M,N:频域滤波器的尺寸
  6. %     D0:带阻滤波器的截止频率
  7. %     n:巴特沃斯滤波器的阶数
  8. % output:
  9. %       H:M xN的矩阵,表示频域滤波器矩阵,数据类型为double,
  10. if nargin == 5
  11.         n=1;
  12. end
  13. u = -M/2:M/2-1;
  14. v = -N/2:N/2-1;
  15. [U,V] = meshgrid(u,v);
  16. D = sqrt(U.^2+V.^2);

  17.     H = 1./(1+(D*W./(D.^2-D0^2)).^(2*n));
  18. end
复制代码
  1. function Z = fftfilt2(X,H)
  2. % 频域滤波
  3. % 函数输入:
  4. %       X:输入的空域图像矩阵,double类型
  5. %       H,频域滤波器,一般为图像X的2倍时较好
  6. % 函数输出:
  7. %       Z:输出的空域图像局长呢,数据类型为double类型
  8. % 二维傅里叶变换
  9. F = fft2(X,size(H,1),size(H,2));
  10. % 傅里叶反变换
  11. Z = H.*F;
  12. Z = ifftshift(Z);
  13. Z = abs(ifft2(Z));
  14. Z = Z(1:size(X,1),1:size(X,2));
复制代码
主程序为:
  1. D0 = 50; % 阻止的频率点与频域中心的距离
  2. W = 3;  % 带宽
  3. n = 2;  % 阶次
  4. im = imread('coloredChips.png');           % 原图像
  5. R = imnoise(im(:,:,1),'gaussian',0,0.01);  % R + 白噪声
  6. G = imnoise(im(:,:,2),'gaussian',0,0.01);  % G + 白噪声
  7. B = imnoise(im(:,:,3),'gaussian',0,0.01);  % B + 白噪声
  8. im = cat(3,R,G,B);                         % 原图像 + 白噪声
  9. H = freqfilter_btw(2*size(R,1),2*size(R,2),D0,W,n);
  10. R1 = fftfilt2(R,H);
  11. G1 = fftfilt2(G,H);
  12. B1 = fftfilt2(B,H);
  13. im1 = cat(3,R1,G1,B1);
  14. im1 = uint8(im1);
  15. figure('color',[1,1,1])
  16. subplot(121),imshow(im,[]); title('原始图像')
  17. subplot(122),imshow(im1,[]); title('巴特沃斯带阻滤波图像')
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-11-22 23:19 , Processed in 0.239335 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表