MATLAB图像处理:加噪,滤波等

文章目录

  • 前言
  • 一、理想低通滤波
    • 1. 图片缩放
    • 2. 低通滤波
  • 总结


前言

不知不觉就到了大四,以前觉得离自己很远的毕业设计,转眼间就需要自己动手去完成。这篇文章的作用,是记录一些自己在写查资料的时候查到的一些原理性的东西,目的是方便自己在后期写论文的时候不至于一脸懵。所以会不定期更新,希望能早日完成毕设


一、理想低通滤波

1. 图片缩放

为了提高运算速率,对原图进行缩放,在本实验中,所提供的的数据集中图片大小为 512×512,使用函数 imresize

files = dir(fullfile('地址','*.jpg'));
lengthFiles = length(files);
for i = 1:lengthFiles
    address=strcat('地址',files(i).name);
    new_address=strcat('地址\resize_',files(i).name);
    Img = imread(address);
    new_img=imresize(Img,0.25);
    imwrite(new_img,new_address);
end

2. 低通滤波

使用函数 fft2fftshift 。其中 fft2 是二维快速傅里叶变换;fftshift 的作用是将零频点移动到频谱的中央。首先探究低通滤波应该选用的阈值是哪个(判断标准是滤波后的图像出现模糊,但是又不至于太过于模糊)
MATLAB图像处理:加噪,滤波等_第1张图片
根据图像,应该选用阈值为50.

低通滤波使用的函数如下:

function [img_origin,img_lpf] = Lpf(address,threshold,if_noise)
%Lpf:Low pass filtering(低通滤波)
%address:图像地址
%threshold:低通滤波阈值
%if_noise:是否需要加噪
Img = imread(address);
%imshow(Img)                                    %展示图像
img_origin=Img;
img_origin=rgb2gray(img_origin);                %彩色图转灰度图
if if_noise 
    %img_noise=imnoise(img_origin,'salt');          % 加椒盐噪声
    img_noise=imnoise(img_origin,'gaussian');       % 加高斯噪声
    img_f=fftshift(fft2(double(img_noise)));        %傅里叶变换得到频谱(带噪声
end
img_f=fftshift(fft2(double(img_origin)));        %傅里叶变换得到频谱(无噪声
[m, n]=size(img_f);
m_mid=fix(m/2);  %是不是可以有其他取整方式?
n_mid=fix(n/2);
img_lpf=zeros(m,n);
h=zeros(m,n);
for i=1:m
    for j=1:n
        d=sqrt((i-m_mid)^2+(j-n_mid)^2);   %理想低通滤波,求距离
        if d<=threshold
            h(i,j)=1;
        else
            h(i,j)=0;
        end
        img_lpf(i,j)=h(i,j)*img_f(i,j);
    end
end

img_lpf=ifftshift(img_lpf);                     %反傅里叶变换
img_lpf=uint8(real(ifft2(img_lpf)));            %取实数部分
end

总结

你可能感兴趣的:(学习笔记,matlab,图像处理,计算机视觉)