MATLAB将一幅含有噪声的图像频谱通过低通滤波器,观察滤波前后图像发生的变化。

主要代码如下

clc;
An=imread('noise.bmp');
A=rgb2gray(An);
subplot(1,3,1);
imshow(An);title('噪声图像');
F=fftshift(fft2(A));
subplot(1,3,2);
imshow(log(abs(F)),[10,12]);title('傅里叶变化');
d0=50;
[M,N]=size(A);
n1=floor(M/2);
n2=floor(N/2);
for m=1:M
    for n=1:N
        d=sqrt((m-n1)*(m-n1)+(n-n2)*(n-n2));
        if d<=d0
            h=1;
        else
            h=0;  
        end
        B(m,n)=h*F(m,n);
    end
end
Bi=ifft2(ifftshift(B));
subplot(1,3,3);
imshow(uint8(real(Bi)));title('滤波后');

运行截图:

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
图像处理中的滤波可分为两种方法,一种是在空间域进行滤波,另一种是在频域进行滤波,也就是使用傅里叶变换将图像从空间域转换到频域,进行滤波后再通过傅里叶反变换将图像转换回空间域。MATLAB提供了丰富的函数和工具箱,可以方便地实现这些滤波方法。 下面是一个示例代码,演示如何使用MATLAB实现对图像频谱图的滤波运算,并与空间滤波进行比较: ```matlab % 读取图像并转换为灰度图像 originalImage = imread('lena.png'); grayImage = rgb2gray(originalImage); % 定义低通滤波器半径 D0 = 30; % 在空间域进行低通滤波 h = fspecial('gaussian', [5, 5], 2); spatialFiltered = imfilter(grayImage, h); % 在频域进行低通滤波 fftImage = fft2(double(grayImage)); fftShifted = fftshift(fftImage); [M, N] = size(fftShifted); u = 0:(M-1); v = 0:(N-1); idx = find(u > M/2); u(idx) = u(idx) - M; idy = find(v > N/2); v(idy) = v(idy) - N; [V, U] = meshgrid(v, u); D = sqrt(U.^2 + V.^2); H = exp(-(D.^2)./(2*(D0^2))); filteredShifted = H .* fftShifted; filteredImage = real(ifft2(ifftshift(filteredShifted))); % 显示原图和两种滤波结果 subplot(1,3,1) imshow(grayImage, []); title('原图') subplot(1,3,2) imshow(spatialFiltered, []); title('空间滤波') subplot(1,3,3) imshow(filteredImage, []); title('频域滤波') ``` 运行代码后,将会显示原图和两种滤波结果的对比图。可以看到,在同样的低通滤波器半径下,频域滤波和空间滤波的效果略有不同。频域滤波可以更好地保留图像细节和边缘信息,但也容易引入噪声。空间滤波则可以更好地平滑图像,但也容易导致图像模糊。因此,在实际应用中需要根据具体情况选择合适的滤波方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这辈子秃头是不可能的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值