您现在的位置是:首页 >技术教程 >MATLAB中图像低通滤波与逆滤波处理网站首页技术教程

MATLAB中图像低通滤波与逆滤波处理

阿斯弗的撒旦 2025-04-02 12:01:02
简介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);:生成二维网格UV

  • 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

拓展:

  1. 保存图像:可以将处理后的图像KL保存为文件。
% 保存处理后的图像
imwrite(uint8(K), 'cameraman_with_inverted_filter_01.png');
imwrite(uint8(L), 'cameraman_with_inverted_filter_001.png');
  1. 调整滤波器参数:可以尝试使用不同的滤波器参数,来观察对图像滤波效果的影响。

  2. 分析处理效果:可以进一步分析处理后的图像效果,比如通过计算图像的均值和方差。

  3. 比较不同滤波方法的影响:可以比较不同滤波方法对图像质量的影响,以评估不同方法的效果。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。