- function H = freqfilter_ideal_Hp(M,N,D0)
- % 理想高通滤波器
- % input:
- % M,N:频域滤波器的尺寸
- % D0:带阻滤波器的截止频率
- % output:
- % H:M x N的矩阵,表示频域滤波器矩阵,数据类型为double,
- u = -M/2:M/2-1;
- v = -N/2:N/2-1;
- [U,V] = meshgrid(u,v);
- D = sqrt(U.^2+V.^2);
- H = double(D>=D0);
- end
复制代码 主程序如下:
- clc,clear,close all
- warning off
- feature jit off
- D0 = 64; % 阻止的频率点与频域中心的距离
- 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_ideal_Hp(2*size(R,1),2*size(R,2),D0); % 理想高通滤波器
- 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('理想高通滤波图像');
复制代码 子函数:- 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));
复制代码
|