您现在的位置是:首页 >技术教程 >MATLAB中图像低通滤波与逆滤波处理网站首页技术教程
MATLAB中图像低通滤波与逆滤波处理
clear all; close all;
I = imread('cameraman.tif');
I = im2double(I);
[m, n] = size(I);
M = 2*m; n = 2*n;
u = -m/2:m/2-1;
v = -n/2:n/2-1;
[U, V] = meshgrid(u, v);
D = sqrt(U.^2 + V.^2);
D0 = 130;
H = exp(-(D.^2) / (2*(D0^2)));
N = 0.01 * ones(size(I, 1), size(I, 2));
N = imnoise(N, 'gaussian', 0, 0.001);
J = fftfilter(I, H) + N;
figure;
subplot(121);
imshow(I);
title('Original Image');
subplot(122);
imshow(J, []);
HC = zeros(m, n);
M1 = H > 0.1;
HC(M1) = 1./H(M1);
K = fftfilter(J, HC);
HC = zeros(m, n);
M2 = H > 0.01;
HC(M2) = 1./H(M2);
L = fftfilter(J, HC);
figure;
subplot(121);
imshow(K, []);
title('Filtered Image (Threshold 0.1)');
subplot(122);
imshow(L, []);
title('Filtered Image (Threshold 0.01)');
解释:
-
clear all; close all;
:清空工作空间中的所有变量并关闭所有图形窗口。 -
I = imread('cameraman.tif');
:读取名为cameraman.tif
的图像,并赋值给I
。 -
I = im2double(I);
:将图像I
的数据类型转换为双精度浮点数,以便进行后续处理。 -
[m, n] = size(I);
:获取图像I
的尺寸。 -
M = 2*m; n = 2*n;
:定义扩展后的图像尺寸。 -
u = -m/2:m/2-1;
:创建一个线性空间,用于生成频率网格。 -
v = -n/2:n/2-1;
:创建一个线性空间,用于生成频率网格。 -
[U, V] = meshgrid(u, v);
:生成二维网格U
和V
。 -
D = sqrt(U.^2 + V.^2);
:计算频率网格中的每个点到原点的距离。 -
D0 = 130;
:定义一个阈值,用于创建低通滤波器。 -
H = exp(-(D.^2) / (2*(D0^2)));
:创建一个二维高斯低通滤波器H
。 -
N = 0.01 * ones(size(I, 1), size(I, 2));
:创建一个与图像I
相同大小的噪声矩阵N
。 -
N = imnoise(N, 'gaussian', 0, 0.001);
:在噪声矩阵N
上添加高斯噪声,均值为0,方差为0.001。 -
J = fftfilter(I, H) + N;
:使用二维傅里叶变换滤波器fftfilter
对图像I
进行滤波,并添加噪声,得到图像J
。 -
figure;
:创建一个新的图形窗口。 -
subplot(121); imshow(I);
:在第一个子图(1,2,1)中显示原始图像I
。 -
subplot(122); imshow(J, []);
:在第二个子图(1,2,2)中显示添加了噪声并滤波后的图像J
。 -
HC = zeros(m, n);
:创建一个与图像尺寸相同的零矩阵HC
。 -
M1 = H > 0.1;
:创建一个逻辑矩阵M1
,用于确定哪些频率成分被保留。 -
HC(M1) = 1./H(M1);
:计算滤波器的逆,以便对滤波后的图像进行逆滤波。 -
K = fftfilter(J, HC);
:使用fftfilter
对图像J
进行逆滤波,得到图像K
。 -
HC = zeros(m, n);
:重置HC
为零矩阵。 -
M2 = H > 0.01;
:创建一个逻辑矩阵M2
,用于确定哪些频率成分被保留。 -
HC(M2) = 1./H(M2);
:计算滤波器的逆,以便对滤波后的图像进行逆滤波。 -
L = fftfilter(J, HC);
:使用fftfilter
对图像J
进行逆滤波,得到图像L
。 -
figure;
:创建一个新的图形窗口。 -
subplot(121); imshow(K, []);
:在第一个子图(1,2,1)中显示使用阈值0.1逆滤波后的图像K
。 -
subplot(122); imshow(L, []);
:在第二个子图(1,2,2)中显示使用阈值0.01逆滤波后的图像L
。
拓展:
- 保存图像:可以将处理后的图像
K
和L
保存为文件。
% 保存处理后的图像
imwrite(uint8(K), 'cameraman_with_inverted_filter_01.png');
imwrite(uint8(L), 'cameraman_with_inverted_filter_001.png');
-
调整滤波器参数:可以尝试使用不同的滤波器参数,来观察对图像滤波效果的影响。
-
分析处理效果:可以进一步分析处理后的图像效果,比如通过计算图像的均值和方差。
-
比较不同滤波方法的影响:可以比较不同滤波方法对图像质量的影响,以评估不同方法的效果。