常用滤波算法

  • 图像滤波算法
  • 均值滤波
  • 中值滤波


惭愧惭愧,这是本人第一次写博客,文笔一般,书写过程中难免出现一些语病与格式问题,大家多担待,有问题望指出一同探讨。我还是一名学生,主要研究基于深度学习的图像处理以及遥感影像全极化SAR的处理,经常所用程序语言为Python和Matlab,并涉及tensorflow深度学习框架以及Linux系统的使用,在今后的博客中,本人将经常分享此类方面的基础知识。能力一般,望口下留情。时间有限,本博客先介绍常用的均值滤波和中值滤波,在下文中会给出基于灰度最小方差的均值滤波、K近邻平滑滤波器、对称近邻均值滤波器三种滤波方法。

图像滤波算法

图像滤波操作,简洁明了的说,就是让图像更加清晰明了(在尽可能保持图像自身细节特征的前提下去抑制噪声点),图像滤波算法有很多种,今天分享比较常用的几种基于Matlab语言的滤波代码(因各种滤波原理在网上铺天盖地,这里不再赘述)。

均值滤波

均值滤波方法非常简单,是用模板为n*n的像素均值代替原像素,它所体现的滤波意义是以随机大小的幅值污染所有点(抑制高斯噪声),此滤波方法算法简单,计算速度快,但也同时也将类间边缘进行了模糊化处理,使得边缘不平滑。以下为其Matlab代码,设置n为3。

%%
clear;
clc;
%若图像为彩色图像,执行此步骤
im=rgb2gray(imread("图像路径及名称"))
figure,
imshow(im);

%噪声处理
im=imnoise(im,"gaussion",0.01) 
figure("Name","高斯噪声图像"),
imshow(im);

%%均值滤波
[r,c]=size(im);
  %设置一个新画布
n=zeros(r,c);
  %累加超过255
im=double(im);
for i=2:r-1
    for j=2:c-1
    	n(i,j)=(im(i-1,j-1)+im(i-1,j)+im(i-1,j+1)+im(i,j-1)+im(i,j)+im(i,j+1)+im(i+1,j-1)+im(i+1,j)+im(i+1,j+1))/9;
    end
end
figure,imshow(unit8(n))

中值滤波

中值滤波则是采用模板为n*n(n为奇数)中的中值代替当前值,它所体现的滤波意义是抑制椒盐噪声(在画面中的部分点上随机出现)。该算法抑制效果佳,能保持基本清晰度,但若模板取太大的话也会使图像清晰度遭到破坏。以下为Matlab代码(取n为3)。

%%
clc;
clear;
im= rgb2gray(imread('图像路径及其名称'));
figure,imshow(im);

%噪声处理
im = imnoise(im,'salt & pepper',0.01);
figure('Name','椒盐噪声图像');
imshow(im);

%%中值滤波
[r,c] = size(im);
n= zeros(r,c);
for i=2:r-1
    for j=2:c-1
        temp = [im(i-1,j-1) im(i-1,j) im(i-1,j+1); im(i,j-1) im(i,j) im(i,j+1);im(i+1,j-1) im(i+1,j) im(i+1,j+1)];
        temp = sort(temp);
        n(i,j) = temp(5); 
    end
end
figure,imshow(uint8(n));

第一次操作整整花了我一个多小时,时间有限,今天的分享就到这了,在下次分享中会带来图像滤波算法:基于灰度最小方差的均值滤波、K近邻平滑滤波器、对称近邻均值滤波器。