图像处理技术之三:降噪处理(中值、均值、最大值、最小值滤波、图像噪声)

图像噪声的成因分类与常见图像去噪算法简介

1、图像噪声的成因

  • 图像在生成和传输过程中常常因受到各种噪声的干扰和影响而是图像降质,这对后续图像的处理和图像视觉效应将产生不利影响。噪声种类很多,比如:电噪声机械噪声信道噪声其他噪声。因此,为了抑制噪声,改善图像质量,便于更高层次的处理,必须对图像进行去噪预处理。

2、图像噪声的特征

  • 图像噪声使得图像模糊,甚至淹没图像特征,给分析带来困难。

图像噪声一般具有以下特点:

  • 噪声在图像中的分布和大小不规则,即具有随机性。
  • 噪声与图像之间一般具有相关性。例如,摄像机的信号和噪声相关,黑暗部分噪声大,明亮部分噪声小。又如,数字图像中的量化噪声与图像相位相关,图像内容接近平坦时,量化噪声呈现伪轮廓,但图像中的随机噪声会因为颤噪效应反而使量化噪声变得不很明显。

噪声具有叠加性。在串联图像传输系统中,各部分窜入噪声若是同类噪声可以进行功率相加,依次信噪比要下降。

3、图像噪声的分类

3.1加性噪声和乘性噪声

  • 噪声和信号之间的关系,图像噪声可分为加性噪声乘性噪声。为了分析处理方便,往往将乘性噪声近似认为是加性噪声,而且总是假定信号和噪声是互相独立的。

假定信号为S(t),噪声为n(t),如果混合叠加波形是S(t)+n(t)的形式,则称其为加性噪声。加性嗓声和图像信号强度是不相关的,如图像在传输过程中引进的“信道噪声”电视摄像机扫描图像的噪声等。

如果叠加波形为S(t)[1+n(t)]的形式,则称其为乘性噪声。乘性噪声则与信号强度有关,往往随图像信号的变化而变化,如飞点扫描图像中的嗓声、电视扫描光栅、胶片颗粒造成等。

3.2 外部噪声和内部噪声

按照产生原因,图像噪声可分为外部噪声内部噪声。外部噪声,即指系统外部干扰电磁波或经电源串进系统内部而引起的噪声。如外部电气设备产生的电磁波干扰、天体放电产生的脉冲干扰等。由系统电气设备内部引起的噪声为内部噪声,如内部电路的相互干扰。内部噪声一般又可分为以下四种:(1)由光和电的基本性质所引起的噪声。(2)电器的机械运动产生的噪声。(3)器材材料本身引起的噪声。(4)系统内部设备电路所引起的噪声

3.3 平稳噪声非平稳噪声

  • 按照统计特性,图像噪声可分为平稳噪声非平稳噪声。统计特性不随时间变化的噪声称为平稳噪声。统计特性随时间变化的噪声称为非平稳噪声。

3.4其它几类噪声

  • 量化嗓声是数字图像的主要噪声源,其大小显示出数字图像和原始图像的差异,减少这种嗓声的最好办法就是采用按灰度级概率密度函数选择化级的最优化措施。
  • “椒盐”噪声:此类嗓声如图像切割引起的即黑图像上的白点白图像上的黑点噪声,在变换域引入的误差,使图像反变换后造成的变换噪声等。
  • 噪声幅度随时间分布形状来定义
  1. 如其幅度分布是按高斯分布的就称其为高斯噪声
  2. 雷利分布的就称其为雷利噪声
  • 噪声频谱形状来
  1. 频谱均匀分布的噪声称为白噪声
  2. 频谱与频率成反比的称为1/f 噪声
  3. 与频率平方成正比的称为三角噪声等等。
  • 根据经常影响图像质量的噪声源又可分电子噪声和光电子噪声。
  1. 电子噪声:在阻性器件中由于电子随机热运动而造成的电子噪声是三种模型中最简单的。
  2. 光电子噪声:光电子噪声是由光的统计本质和图像传感器中光电转换过程引起的。

4、图像的噪声模型

  • 实际获得的图像含有的噪声,根据不同分类可将噪声进行不同的分类。从噪声的概率分布情况来看,可分为高斯噪声、瑞利噪声、伽马噪声、指数噪声和均匀噪声。

4.1 高斯噪声

由于高斯噪声在空间和频域中数学上的易处理性,这种噪声(也称为正态噪声)模型经常被用于实践中。事实上,这种易处理性非常方便,使高斯模型经常用于临界情况下 。

高斯随机变量z的PDF由下式给出:

其中z表示灰度值,μ表示z的平均值或期望值,σ表示z的标准差。标准差的平方σ2称为z的方差。当z服从式(1.3.1)的分布时候,其值有70%落在[(μ-σ),(μ+σ)]内,且有95%落在[(μ-2σ),( μ+2σ)]范围内。

4.2 瑞利噪声

瑞利噪声的概率密度函数由下式给出:

概率密度的均值和方差由下式给出:

4.3 伽马(爱尔兰)噪声

伽马噪声的PDF由下式给出:

其中,a>0,b为正整数且“!”表示阶乘。其密度的均值和方差由下式给出:

尽管经常被用来表示伽马密度,严格地说,只有当分母为伽马函数Г(b)时才是正确的。当分母如表达式所示时,该密度近似称为爱尔兰密度。

4.4 指数分布噪声

指数噪声的PDF可由下式给出:

其中a>0。概率密度函数的期望值和方差是:

4.5 均匀噪声分布

均匀噪声分布的概率密度,由下式给出:

概率密度函数的期望值和方差可由下式给出:

4.6 脉冲噪声(椒盐噪声)

(双极)脉冲噪声的PDF可由下式给出:

  • 如果b > a,灰度值b在图像中将显示为一个亮点,相反,a的值将显示为一个暗点Pa或Pb为零,则脉冲噪声称为单极脉冲如果Pa和Pb均不可能为零,尤其是它们近似相等时,脉冲噪声值将类似于随机分布在图像上的胡椒盐粉微粒。由于这个原因,双极脉冲噪声也称为椒盐噪声。同时,它们有时也称为散粒和尖峰噪声
  • 噪声脉冲可以是正的,也可以是负的。标定通常是图像数字化过程的一部分。因为脉冲干扰通常与图像信号的强度相比较大,因此,在一幅图像中,脉冲噪声总是数字化为最大值(纯黑或纯白)。这样,通常假设a,b是饱和值,从某种意义上看,在数字化图像中,它们等于所允许的最大值和最小值。由于这一结果,负脉冲以一个黑点(胡椒点)出现在图像中。由于相同的原因,正脉冲以白点(盐点)出现在图像中。对于一个8位图像,这意味着a=0(黑)。b=255(白)

5、常见图像去噪算法简介

  • 图像噪声在数字图像处理技术中的重要性越来越明显,如高放大倍数航片的判读,X射线图像系统中的噪声去除等已经成为不可缺少的技术步骤。图像去噪算法可以分为以下几类:

(1)空间域滤波:原图像上直接进行像素的灰度值进行处理

  • 空域滤波是在原图像上直接进行数据运算,对像素的灰度值进行处理。常见的空间域图像去噪算法有邻域平均法中值滤波低通滤波等。

(2)变换域滤波:从空间域转换到变换域

  • 图像变换域去噪方法是对图像进行某种变换,将图像从空间域转换到变换域,再对变换域中的变换系数进行处理,再进行反变换将图像从变换域转换到空间域来达到去除图像嗓声的目的。将图像从空间域转换到变换域的变换方法很多,如傅立叶变换沃尔什-哈达玛变换余弦变换K-L变换以及小波变换等。而傅立叶变换小波变换则是常见的用于图像去噪的变换方法。

(3)偏微分方程

  • 偏微分方程是近年来兴起的一种图像处理方法,主要针对低层图像处理并取得了很好的效果。偏微分方程具有各向异性的特点,应用在图像去噪中,可以在去除噪声的同时,很好的保持边缘。偏微分方程的应用主要的一类是一种是基本的迭代格式,通过随时间变化的更新,使得图像向所要得到的效果逐渐逼近,以及对其改进后的后续工作。该方法在确定扩散系数时有很大的选择空间,在前向扩散的同时具有后向扩散的功能,所以,具有平滑图像和将边缘尖锐化的能力[5]。偏微分方程在低噪声密度的图像处理中取得了较好的效果,但是在处理高噪声密度图像时去噪效果不好,而且处理时间明显高出许多

(4)变分法

  • 另一种利用数学进行图像去噪方法是基于变分法的思想,确定图像的能量函数,通过对能量函数的最小化工作,使得图像达到平滑状态,现在得到广泛应用的全变分TV模型就是这一类。这类方法的关键是找到合适的能量方程,保证演化的稳定性,获得理想的结果。

(5)形态学噪声滤除器

  • 将开与闭结合可用来滤除噪声,首先对有噪声图像进行开运算,可选择结构要素矩阵比噪声尺寸大,因而开运算的结果是将背景噪声去除;再对前一步得到的图像进行闭运算,将图像上的噪声去掉。据此可知,此方法适用的图像类型是图像中的对象尺寸都比较大,且没有微小细节,对这类图像除噪效果会较好。

============================================================================

①观察灰度分布来描述一幅图像成为空间域,观察图像变化的频率被成为频域。 
②频域分析:低频对应区域的图像强度变化缓慢,高频对应的变化快。低通滤波器去除了图像的高频部分,高通滤波器去除了图像的低频部分。

(1)低通滤波

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
int main()
{
    // Read input image
    cv::Mat image= cv::imread("boldt.jpg",0);
    if (!image.data)
        return 0; 
    // Display the image
    cv::namedWindow("Original Image");
    cv::imshow("Original Image",image);
 
  // Blur the image with a mean filter
    cv::Mat result;
    cv::blur(image,result,cv::Size(5,5));   
    // Display the blurred image
    cv::namedWindow("Mean filtered Image");
    cv::imshow("Mean filtered Image",result);

结果:每个像素变为相邻像素的平均值, 快速的强度变化转化为平缓的过度 
这里写图片描述
②栗子:近的像素添加更多的权重。:高斯滤波器

cv::GaussianBlur(image,result,cv::Size(5,5),1.5);

这里写图片描述

(2)中值滤波 :非线性滤波 
有效去除椒盐噪点

cv::medianBlur(image,result,5);

这里写图片描述

(3)方向滤波(Sobel) 
强调图像中的高频分量,使用高通滤波器进行边缘检测。 
Sobel算子是一种经典的边缘检测线性滤波器,可被认为是图像在垂直和水平方向变化的测量。

#include <iostream>
#include <iomanip>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "laplacianZC.h"
 
int main()
{
     //Read input image
    cv::Mat image= cv::imread("boldt.jpg",0);
    if (!image.data)
        return 0; 
 
    // Display the image
    cv::namedWindow("Original Image");
    cv::imshow("Original Image",image);
 
    // Compute Sobel X derivative
    cv::Mat sobelX;
    cv::Sobel(image,sobelX,CV_8U,1,0,3,0.4,128);
 
    // Display the image
    cv::namedWindow("Sobel X Image");
    cv::imshow("Sobel X Image",sobelX);
 
    // Compute Sobel Y derivative
    cv::Mat sobelY;
    cv::Sobel(image,sobelY,CV_8U,0,1,3,0.4,128);
 
    // Display the image
    cv::namedWindow("Sobel Y Image");
    cv::imshow("Sobel Y Image",sobelY);
 
    // Compute norm of Sobel     得到sobel的摸
    cv::Sobel(image,sobelX,CV_16S,1,0);
    cv::Sobel(image,sobelY,CV_16S,0,1);
    cv::Mat sobel;
    //compute the L1 norm
    sobel= abs(sobelX)+abs(sobelY);
 
    double sobmin, sobmax;
    cv::minMaxLoc(sobel,&sobmin,&sobmax);
    std::cout << "sobel value range: " << sobmin << "  " << sobmax << std::endl;
 
    // Print window pixel values
    for (int i=0; i<12; i++) {
        for (int j=0; j<12; j++)
            std::cout << std::setw(5) << static_cast<int>(sobel.at<short>(i+135,j+362)) << " ";
        std::cout << std::endl;
    }
    std::cout << std::endl;
    std::cout << std::endl;
    std::cout << std::endl;
 
    // Conversion to 8-bit image
    // sobelImage = -alpha*sobel + 255
    cv::Mat sobelImage;
    sobel.convertTo(sobelImage,CV_8U,-255./sobmax,255);
 
    // Display the image
    cv::namedWindow("Sobel Image");
    cv::imshow("Sobel Image",sobelImage);
 
    // Apply threshold to Sobel norm (low threshold value)
    cv::Mat sobelThresholded;
    cv::threshold(sobelImage, sobelThresholded, 225, 255, cv::THRESH_BINARY);
 
    // Display the image
    cv::namedWindow("Binary Sobel Image (low)");
    cv::imshow("Binary Sobel Image (low)",sobelThresholded);
 
    // Apply threshold to Sobel norm (high threshold value)
    cv::threshold(sobelImage, sobelThresholded, 190, 255, cv::THRESH_BINARY);
 
    // Display the image
    cv::namedWindow("Binary Sobel Image (high)");
    cv::imshow("Binary Sobel Image (high)",sobelThresholded);

}
  • 结果: 

这里写图片描述
(4)图像的拉普拉斯变换 
是一种基于图像导数的高通线性滤波器,计算二阶倒数已衡量图像的弯曲度。

// Compute Laplacian 3x3
    cv::Mat image = cv::imread("boldt.jpg", 0);
    cv::Mat laplace;
    cv::Laplacian(image,laplace,CV_8U,1,1,128);
 
    // Display the image
    cv::namedWindow("Laplacian Image");
    cv::imshow("Laplacian Image",laplace);
 
    // Print window pixel values
    for (int i=0; i<12; i++) {
        for (int j=0; j<12; j++)
            std::cout << std::setw(5) << static_cast<int>(laplace.at<uchar>(i+135,j+362))-128 << " ";
        std::cout << std::endl;
    }
    std::cout << std::endl;
    std::cout << std::endl;
    std::cout << std::endl;
 
    // Compute Laplacian 7x7
    cv::Laplacian(image,laplace,CV_8U,7,0.01,128);
 
    // Display the image 
    cv::namedWindow("Laplacian Image");
    cv::imshow("Laplacian Image",laplace);
 
    // Print window pixel values
    for (int i=0; i<12; i++) {
        for (int j=0; j<12; j++)
            std::cout << std::setw(5) << static_cast<int>(laplace.at<uchar>(i+135,j+362))-128 << " ";
        std::cout << std::endl;
    }
 
    // Extract small window
    cv::Mat window(image,cv::Rect(362,135,12,12));
    cv::namedWindow("Image window");
    cv::imshow("Image window",window);
    cv::imwrite("window.bmp",window);
 
    // Compute Laplacian using LaplacianZC class
    LaplacianZC laplacian;
    laplacian.setAperture(7);
    cv::Mat flap= laplacian.computeLaplacian(image);
    double lapmin, lapmax;
    cv::minMaxLoc(flap,&lapmin,&lapmax);
    std::cout << "Laplacian value range=[" << lapmin << "," << lapmax << "]\n";
    laplace= laplacian.getLaplacianImage();
    cv::namedWindow("Laplacian Image (7x7)");
    cv::imshow("Laplacian Image (7x7)",laplace);
 
    // Print Laplacian values
    std::cout << std::endl;
    for (int i=0; i<12; i++) {
        for (int j=0; j<12; j++)
            std::cout << std::setw(5) << static_cast<int>(flap.at<float>(i+135,j+362)/100) << " ";
        std::cout << std::endl;
    }
    std::cout << std::endl;
 
    // Compute and display the zero-crossing points
    cv::Mat zeros;
    zeros= laplacian.getZeroCrossings(lapmax);
    cv::namedWindow("Zero-crossings");
    cv::imshow("Zero-crossings",zeros);
 
    // Compute and display the zero-crossing points (Sobel version)
    zeros= laplacian.getZeroCrossings();
    zeros= laplacian.getZeroCrossingsWithSobel(50);
    cv::namedWindow("Zero-crossings (2)");
    cv::imshow("Zero-crossings (2)",zeros);
 
    // Print window pixel values
    for (int i=0; i<12; i++) {
        for (int j=0; j<12; j++)
            std::cout << std::setw(2) << static_cast<int>(zeros.at<uchar>(i+135,j+362)) << " ";
        std::cout << std::endl;
    }
 
    // Display the image with window
    cv::rectangle(image,cv::Point(362,135),cv::Point(374,147),cv::Scalar(255,255,255));
    cv::namedWindow("Original Image with window");
    cv::imshow("Original Image with window",image);
 
    cv::waitKey();
    return 0;
}

在频率分析领域的框架中,滤波器是一个用来增强图像中某个波段或频率并阻塞(或降低)其他频率波段的操作。低通滤波器是消除图像中高频部分,但保留低频部分。高通滤波器消除低频部分、

用低通滤波来平滑图像

低通滤波器的目标是降低图像的变化率。如将每个像素替换为该像素周围像素的均值。这样就可以平滑并替代那些强度变化明显的区域。

图像的拉普拉斯变换   是一种基于图像导数的高通线性滤波器,计算二阶倒数已衡量图像的弯曲度

(3)方向滤波(Sobel)强调图像中的高频分量,使用高通滤波器进行边缘检测。 
Sobel算子是一种经典的边缘检测线性滤波器,可被认为是图像在垂直和水平方向变化的测量。

====================================================================================

用MATLAB对图像进行处理。

在原图上添加椒盐噪声,运用中值滤波、最大值滤波和最小值滤波算法对图像降噪,并比较处理前后、不同模板均值滤波算法处理的效果。

一、基本原理

1.1 噪声的产生及分类

  •          噪声是图像干扰的重要原因。一幅图像在实际应用中可能存在各种各样的噪声,这些噪声可能在传输中产生,也可能在量化等处理中产生。根据噪声和信号的关系可将其分为三种形式:(f(x,y)表示给定原始图像,g(x,y)表示图像信号,n(x,y)表示噪声。)
  1.  加性噪声
  • 此类噪声与输入图像信号无关,含噪图像可表示为f(x,y)=g(x,y)+n(x,y),信道噪声及光导摄像管的摄像机扫描图像时产生的噪声就属这类噪声;
  1.  乘性噪声
  • ,此类噪声与图像信号有关,含噪图像可表示为f(x,y)=g(x,y)+n(x,y)g(x,y),飞点扫描器扫描图像时的噪声,电视图像中的相干噪声,胶片中的颗粒噪声就属于此类噪声。
  1.  量化噪声
  • 此类噪声与输入图像信号无关,是量化过程存在量化误差,再反映到接收端而产生。

1.2 椒盐噪声

  •     椒盐噪声是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。椒盐噪声往往由图像切割引起。
  • 去除脉冲干扰及椒盐噪声最常用的算法是中值滤波
  •     路面图像属于结构光图像,使用区域分割技术中的阈值分割法消除白噪声及部分椒盐噪声,而不能使用中值滤波对白噪声及椒盐噪声进行滤波,因为滤 波模板在图像中漫游时会改变光条中像素的真实灰度分布,给随后的重心法细化过程带来负面影响。
  •     大量的实验研究发现,由摄像机拍摄得到的图像受离散的脉冲、椒盐噪声和零均值的高斯噪声的影响较严重。噪声给图像处理带来很多困难,对图像分割、特征提取、图像识别等具有直接影响。因此,实时采集的图像需进行滤波处理。消除图像中的噪声成份叫做图像的平滑化或滤波操作。滤波的目的有两个:一是抽出对象的特征作为图像识别的特征模式;二是为适应计算机处理的要求,消除图像数字化时所混入的噪声。对滤波处理的要求有两条:一是不能损坏图像轮廓及边缘等重要信息;二是使图像清晰,视觉效果好。
  •      椒盐噪声是指两种噪声,一种是盐噪声(salt noise),另一种是胡椒噪声(pepper noise)盐=白色,椒=黑色。前者是高灰度噪声,后者属于低灰度噪声。一般两种噪声同时出现,呈现在图像上就是黑白杂点

1.3 中值滤波

  •      中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是用某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。但在条纹中心分析方法中作用不大。
  • 1.3.1 实现方法
  • (1)通过从图像中的某个采样窗口取出奇数个数据进行排序
  • (2)用排序后的中值取代要处理的数据即可。
  • 1.3.2 实际应用
  • 中值滤波法对消除椒盐噪声非常有效,在光学测量条纹图象的相位分析处理方法中有特殊作用,但在条纹中心分析方法中作用不大。
  • 中值滤波在图像处理中,常用于保护边缘信息,是经典的平滑噪声的方法

1.4 最大值、最小值滤波

  •           最大值、最小值滤波与中值滤波相类似,先是排序像素值,而后对中心像素值和最大、最小像素值进行比较。若比最小值小,则将最小值替换成中心像素;同样若比最大值大,则将最大值替换成中心像素。

若设输出的图像为g(x,y)
最大值滤波:g(x,y)max{f(x s,y t),(s,t W)};
最小值滤波:g(x,y) min{f(x s,y t),(s,t W)}。

1.5 均值滤波

      均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标象素为中心的周围n个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。

  • 1.5.1 概述

          均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度个g(x,y),即个g(x,y)=1/m ∑f(x,y) m为该模板中包含当前像素在内的像素总个数。
1.5.2 不足之处
           均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在 图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。

二、结果图对比


上图显示了被概率为0.05的椒盐噪声污染了的图像,可以看出,图像上呈现出了黑白杂点,其中黑点是胡椒噪声产生的,白点是由盐噪声所产生。

均值滤波器简单的平滑了一幅图像的的局部变化,在模糊了图像的同时减少了噪声,但不能完全的消除噪声。

中值滤波器将受干扰的像素值替换为模板区域的中值,同时它可以保护图像尖锐的边缘,且比相同尺寸的线性平滑滤波器引起的模糊更少,消除脉冲噪声的效果较好。

利用最大值滤波器对胡椒噪声进行处理,成功消除了胡椒噪声,但应注意到,它同时也从黑色物体的边缘移走了一些黑色像素

利用最小值滤波器对盐噪声进行处理,在这种情况下,最小值滤波器比最大值滤波器效果更好,但它也从亮物体边缘移走了一些白色像素,使亮物体变小,暗物体变大,这是因为围绕着这些物体的白点被设置成了暗灰度级。

从3*3邻域模板到8*8邻域模板,随着模板的增大,需要计算的数据量也更大,滤波的效果越来越平滑,图像更加模糊,对比而言,通过3*3邻域模板做均值滤波处理后,不仅计算的数据量少,而且图像清晰。

用低通滤波来平滑图像

低通滤波器的目标是降低图像的变化率。如将每个像素替换为该像素周围像素的均值。这样就可以平滑并替代那些强度变化明显的区域。

图像的拉普拉斯变换

  •    是一种基于图像导数的高通线性滤波器,计算二阶倒数已衡量图像的弯曲度。

(3)方向滤波(Sobel)

  • 强调图像中的高频分量,使用高通滤波器进行边缘检测。 
  • Sobel算子是一种经典的边缘检测线性滤波器,可被认为是图像在垂直和水平方向变化的测量。
发布了377 篇原创文章 · 获赞 145 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/Windgs_YF/article/details/104355107