天天看点

图像去噪的原理及实现

·图像噪声

图像在摄取或传输时所受的随机信号干扰,表现为图像信息或者像素亮度的随机变化。一张图像通常会包含很多噪声,很多时候将图像噪声看成是多维随机过程。

·噪声来源

①图像在拍摄时不够明亮、亮度不够均匀;②电路各元器件自身噪声和相互影响;③传感器长期工作温度过高等。

·常见噪声

💫 高斯噪声:高斯噪声又称为正态噪声,在噪声图像的统计直方图上呈正态分布。高斯噪声对原图像的影响是随机,特别常见的一种噪声。

💫 椒盐噪声:脉冲噪声又称为椒盐噪声,因为用椒盐来命名特别形象。它是一种随机出现的黑点(胡椒)或者白点(盐),前者是高灰度噪声,后者是低灰度噪声,一般两者同时出现在图像中。

·噪声的坏处

①噪声污染的图像其可读性变差,清晰度变低;②可导致违规摄像头误判,有用可读点变少;③即便对图像进行去噪,其清晰度依然没有比不上原图。

·噪声处理

💫 空间域滤波:在原图像上直接进行数据运算,对像素的灰度值进行处理,常见算法有中值和均值滤波。

💫 变换域滤波:对图像进行某种变换,将图像从空间域转换到变换域,再对变换域中的变换系数进行处理,再进行反变换将图像从变换域转换到空间域。有傅立叶变换和小波变换等方法。

💫 偏微分方程:过随时间变化的更新,使得图像向所要得到的效果逐渐逼近。可以在去除噪声的同时,很好的保持边缘。

💫 变分法:确定图像的能量函数,通过对能量函数的最小化工作,使得图像达到平滑状态。

·常见噪声处理算法

均值滤波

算术均值滤波:滤出加性噪声,但丢失细节

算术均值滤波器就是简单的计算窗口区域的像素均值,然后将均值赋值给窗口中心点处的像素

几何均值滤波:更好保护细节

滤波后图像的像素由模板窗口内像素的乘积的1/mn幂给出。

图像去噪的原理及实现

中值滤波

把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围像素的值接近真实值,从而消除孤立的噪声点。

·利用MATLAB实现图像去噪

💭利用MATLAB图像处理工具箱的imfilter函数实现均值滤波和中值滤波。

f=imread('C:\matlabworks\building.tif');
%椒盐噪声图像
f1=imnoise(f,'salt & pepper',0.2);
%高斯噪声图像
f2=imnoise(f,'gaussian',0,0.02);
w=fspecial('average',[5,5]);
%均值处理椒盐噪声图像
gm1=imfilter(f1,w,'replicate');
%均值处理高斯噪声图像
gm2=imfilter(f2,w,'replicate');
%中值处理椒盐噪声图像
gn1=medfilt2(f1,[5 5],'symmetric');
%中值处理椒盐噪声图像
gn2=medfilt2(f2,[5 5],'symmetric');
subplot(231);imshow(f1);title('椒盐噪声图像');
subplot(232);imshow(gm1);title('均值处理椒盐噪声图像');
subplot(233);imshow(gn1);title('中值处理椒盐噪声图像');
subplot(234);imshow(f2);title('高斯噪声图像');
subplot(235);imshow(gm2);title('均值处理高斯噪声图像');
subplot(236);imshow(gn2);title('中值处理高斯噪声图像');      

代码片段

图像去噪的原理及实现

结果展示图

💭利用for循环遍历图像实现均值滤波和中值滤波算法。

f=imread('C:\matlabworks\building.tif');
%椒盐噪声图像
f1=imnoise(f,'salt & pepper',0.2);
%高斯噪声图像
f2=imnoise(f,'gaussian',0,0.02);
[m,n]=size(f1);
g1=f1;
%for循环中值去噪
for i=2:m-1
    for j=2:n-1
        temp=f(i-1:i+1,j-1:j+1);
        temp=reshape(temp,1,[]);
        temp=sort(temp);
        g1(i,j)=temp(1,5);
    end
end
g2=f2;
for a=2:m-1
    for b=2:n-1
        temp=f(a-1:a+1,b-1:b+1);
        g2(a,b)=sum(temp(:))/9;
    end
end
subplot(221);imshow(f1);title('椒盐噪声图像');
subplot(222);imshow(g1);title('for循环中值去噪');
subplot(223);imshow(f2);title('高斯噪声图像');
subplot(224);imshow(g2);title('for循环均值值去噪');      

代码片段

图像去噪的原理及实现

结果展示图

通过图像不难发现

被高斯噪声污染的图像

用均值滤波处理效果较好;

而被椒盐噪声污染的图像

用中值滤波处理效果较好。

本文仅做学术分享,如有侵权,请联系删文。​