我是靠谱客的博主 明亮画板,最近开发中收集的这篇文章主要介绍matlab图像处理实现低通滤波,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

clc;
clear all;
img=imread('lena.jpg');
img_noise = imnoise(img, 'gaussian', 0, 0.01);
subplot(2,2,1),imshow(img_noise);
title('原图像');
% 将低频移动到图像的中心,这个也很重要
s=fftshift(fft2(img_noise)); 
subplot(2,2,3),imshow(log(abs(s)),[]);
title('图像傅里叶变换取对数所得频谱');
% 求解变换后的图像的中心,我们后续的处理是依据图像上的点距离中心点的距离来进行处理
[a,b] = size(img);
a0 = round(a/2);
b0 = round(b/2);
d = min(a0,b0)/12;
d = d^2;
for i=1:a
    for j=1:b
        distance = (i-a0)^2+(j-b0)^2;
        if distance<d
            h = 1;
        else
            h = 0;
        end
        low_filter(i,j) = h*s(i,j);
    end
end
subplot(2,2,4),imshow(log(abs(low_filter)),[])
title('低通滤波频谱');
new_img = uint8(real(ifft2(ifftshift(low_filter))));
subplot(2,2,2),imshow(new_img,[])
title('低通滤波后的图像');

这是学习图像处理使用傅里叶变换做的一个低通滤波,虽然傅里叶变换很复杂,但是matlab直接调用fft和fft2这个确实很方便

s=fftshift(fft2(img_noise));

这句话实现的是将低频转移到图像的中间,因为采用fft2变换后的图像高频在中间,低频段分散到四个角落

[a,b] = size(img);
a0 = round(a/2);
b0 = round(b/2)

一开始我也没搞明白这是干嘛的,后来明白了就茅塞顿开,这是在求解图形的中心点,之后的距离计算和滤波都与这个点有关

for i=1:a
    for j=1:b
        distance = (i-a0)^2+(j-b0)^2;
        if distance<d
            h = 1;
        else
            h = 0;
        end
        low_filter(i,j) = h*s(i,j);
    end
end

这里就是基于距离进行滤波,所谓低通就是把距离中心点近的值进行保留,那么同理高通就是把距离远的值保留,这里当然可以直接采用fft2变换之后的图像进行处理,这样应该更方便。至于什么带通带阻都是大同小异
最后展示一下结果
在这里插入图片描述

最后

以上就是明亮画板为你收集整理的matlab图像处理实现低通滤波的全部内容,希望文章能够帮你解决matlab图像处理实现低通滤波所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部