|
- function H = freqfilter_btw(M,N,D0,W,n)
- % 巴特沃斯带阻滤波器
- % input:
- % 滤波器的类型,‘btw’
- % M,N:频域滤波器的尺寸
- % D0:带阻滤波器的截止频率
- % n:巴特沃斯滤波器的阶数
- % output:
- % H:M xN的矩阵,表示频域滤波器矩阵,数据类型为double,
- if nargin == 5
- n=1;
- end
- u = -M/2:M/2-1;
- v = -N/2:N/2-1;
- [U,V] = meshgrid(u,v);
- D = sqrt(U.^2+V.^2);
- H = 1./(1+(D*W./(D.^2-D0^2)).^(2*n));
- end
复制代码- function Z = fftfilt2(X,H)
- % 频域滤波
- % 函数输入:
- % X:输入的空域图像矩阵,double类型
- % H,频域滤波器,一般为图像X的2倍时较好
- % 函数输出:
- % Z:输出的空域图像局长呢,数据类型为double类型
- % 二维傅里叶变换
- F = fft2(X,size(H,1),size(H,2));
- % 傅里叶反变换
- Z = H.*F;
- Z = ifftshift(Z);
- Z = abs(ifft2(Z));
- Z = Z(1:size(X,1),1:size(X,2));
复制代码 主程序为:- D0 = 50; % 阻止的频率点与频域中心的距离
- W = 3; % 带宽
- n = 2; % 阶次
- im = imread('coloredChips.png'); % 原图像
- R = imnoise(im(:,:,1),'gaussian',0,0.01); % R + 白噪声
- G = imnoise(im(:,:,2),'gaussian',0,0.01); % G + 白噪声
- B = imnoise(im(:,:,3),'gaussian',0,0.01); % B + 白噪声
- im = cat(3,R,G,B); % 原图像 + 白噪声
- H = freqfilter_btw(2*size(R,1),2*size(R,2),D0,W,n);
- R1 = fftfilt2(R,H);
- G1 = fftfilt2(G,H);
- B1 = fftfilt2(B,H);
- im1 = cat(3,R1,G1,B1);
- im1 = uint8(im1);
- figure('color',[1,1,1])
- subplot(121),imshow(im,[]); title('原始图像')
- subplot(122),imshow(im1,[]); title('巴特沃斯带阻滤波图像')
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|