您现在的位置是:首页 >技术教程 >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');
-
调整滤波器参数:可以尝试使用不同的滤波器参数,来观察对图像滤波效果的影响。
-
分析处理效果:可以进一步分析处理后的图像效果,比如通过计算图像的均值和方差。
-
比较不同滤波方法的影响:可以比较不同滤波方法对图像质量的影响,以评估不同方法的效果。





U8W/U8W-Mini使用与常见问题解决
QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结