图像处理中的高斯噪声

2015-03-27 21:06:09 u013045749 阅读数 6985

题目:对含有高斯白噪声的图像进行滤波

思考:先对图像添加高斯白噪声,在对图像进行中值滤波,高斯滤波,均值滤波,形态学滤波,以及闭运算后进行中值滤波操作。

实验结果如图:



MATLAB代码如下:

clear; clc; close all;
im = imread('apple.jpg');

%% 添加高斯白噪声
im_gaus = imnoise(im, 'gaussian', 0, 0.02); % 添加均值为0,方差为0.02的高斯白噪声
figure('NumberTitle', 'off', 'Name', 'smooth apple with gaussian noise');
subplot(3, 4, 1);
imshow(im); % 显示原始图像
title('apple-Original');
subplot(3, 4, 2);
imshow(im_gaus); % 显示添加高斯白噪声的图像
title('apple-gaussian noise');

%% 图像滤波
im_gray = rgb2gray(im_gaus); % 彩色图转灰度图
im_bw = im2bw(im_gray, 0.9); %灰度图转二值图
subplot(3, 4, 3);
imshow(im_gray); % 显示灰度图
title('apple-gray');
subplot(3, 4, 4);
imshow(im_bw); % 显示二值图
title('apple-binary');
% 中值滤波
im_med = medfilt2(im_bw);
im_med = medfilt2(im_med);
im_med = medfilt2(im_med);
subplot(3, 4, 5);
imshow(im_med); % 显示中值滤波后的图像
title('apple-medfilt_3');
% 高斯滤波
h = fspecial('gaussian', [18 18], 0.15);
im_gausfilt = imfilter(im_bw, h);
subplot(3, 4, 6);
imshow(im_gausfilt); % 显示高斯低通滤波后的图像
title('apple-gausfilt');
im_gf_med = medfilt2(im_gausfilt); % 对高斯滤波后的图像进行中值滤波
subplot(3, 4, 7);
imshow(im_gf_med); % 显示高斯+中值滤波后的图像
title('apple-gaus-med');
% 均值滤波
h = fspecial('average', [5, 5]);
im_mean = imfilter(im_bw, h);
subplot(3, 4, 8);
imshow(im_mean); % 显示均值滤波后的图像
title('apple-mean');
% 形态学滤波
se = strel('disk', 2); %  创建一个平坦的圆盘型结构元素,半径为2
% 闭运算:先膨胀再腐蚀
im_clos = imclose(im_bw, se);
subplot(3, 4, 9);
imshow(im_clos);
title('imclose');
% 闭运算之后再进行中值滤波
im_clos_med = medfilt2(im_clos);
subplot(3, 4, 10);
imshow(im_clos_med);
title('imclose+med');
% 开运算:先腐蚀再膨胀
im_op = imopen(im_bw, se);
% im_op = imopen(im_clos_med, se); % 开运算进行孔洞填充
subplot(3, 4, 11);
imshow(im_op);
title('impen');
% 利用imfill对图像进行孔洞填充
im_clos_med_fil = imfill(im_clos_med);


2016-11-17 15:38:54 u012936765 阅读数 46062

最近交了数图作业,mark一下。

1.添加高斯噪声

1.1 概率密度函数

这里写图片描述

σ为z的标准差,z为均值,用E。

1.2 生成高斯分布随机数序列

方法由Marsaglia和Bray在1964年提出,C++版本如下: mu是均值,sigma是方差,X服从N(0,1)分布

double generateGaussianNoise(double mu, double sigma)
{
    static double V1, V2, S;
    static int phase = 0;
    double X;
    double U1,U2;
    if ( phase == 0 ) {
        do {
            U1 = (double)rand() / RAND_MAX;
            U2 = (double)rand() / RAND_MAX;

            V1 = 2 * U1 - 1;
            V2 = 2 * U2 - 1;
            S = V1 * V1 + V2 * V2;
        } while(S >= 1 || S == 0);

        X = V1 * sqrt(-2 * log(S) / S);
    } else{
        X = V2 * sqrt(-2 * log(S) / S);
    }
    phase = 1 - phase;
    return mu+sigma*X;
}

1.3 添加高斯噪声

高斯噪声为加性噪声,在原图的基础上加上噪声即为加噪后的图象。
代码如下:

void AddNoise(Mat img,double mu, double sigma,int k){
    Mat outImage;
    outImage.create(img.rows,img.cols,img.type());
    for(int x=0;x<img.rows;x++){
        for(int y=0;y<img.cols;y++){
            double temp = img.at<uchar>(x, y)
                    +k*generateGaussianNoise(mu,sigma);
            if(temp>PixcelMax)
                    temp=PixcelMax;
            else if(temp<PixcelMin)
                    temp=PixcelMin;
            outImage.at<uchar>(x, y) = temp;
        }
    }
    Filter(outImage,Filter::NXBJZ,3,3,1);
    imshow("Output", outImage);
    cvWaitKey(0);
}

1.4 效果图

这里写图片描述

如图,k为高斯噪声的系数,系数越大,高斯噪声越强。

这里写图片描述

噪声服从高斯分布,所以方差越大,数据越分散,噪声也就越多。

这里写图片描述

均值决定着整个图像的明亮程度,均值大于0,表示图像加上一个使自己变亮的噪声,小 于0,表示图像加上一个使自己变暗的噪声。

2.添加椒盐噪声

2.1 概率密度函数

这里写图片描述

2.2 添加椒盐噪声

椒盐噪声是根据图像的信噪比,随机生成一些图像内的像素位置,并随机对这些像素点赋值为0或255.

代码如下:

void AddNoise(Mat img,double SNR ){
    Mat outImage;
    outImage.create(img.rows,img.cols,img.type());
    int SP = img.rows*img.cols;
    int NP = SP*(1-SNR);
    outImage = img.clone();
    for(int i=0; i<NP; i++) {

        int x = (int)(rand()*1.0/RAND_MAX* (double)img.rows);
        int y = (int)(rand()*1.0/RAND_MAX* (double)img.cols);
        int r = rand()%2;
       if(r){
            outImage.at<uchar>(x, y)=0;
        }
       else{
           outImage.at<uchar>(x, y)=255;
       }

    }
     Filter(outImage,Filter::NXBJZ,3,3,1);
    imshow("Output", outImage);
    cvWaitKey(0);
}

其中,SNR为信噪比,利用C++中的rand() 作为随机函数。

2.3 效果图

这里写图片描述

信噪比越小,噪声越多,信噪比为1时,图像不含噪声。 0为胡椒噪声,255为盐粒噪声

3.均值滤波器

3.1 算术均值滤波器

这里写图片描述

Sx,y为以(x,y)为中心,长为m宽为n的矩形范围。

3.1.1 滤除高斯噪声

这里写图片描述

3.1.2滤除椒盐噪声

这里写图片描述

总结:
只能在噪声较少的情况下去除些许噪声,并且只是平滑了图像的局部变化,令图像变得模
糊。

3.2 几何均值滤波器

这里写图片描述

Sx,y为以(x,y)为中心,长为m宽为n的矩形范围。

3.2.1 滤除高斯噪声

这里写图片描述

3.2.2 滤除椒盐噪声

这里写图片描述

总结:
处理高斯噪声时,噪声较少时,效果与算术均值滤波器基本一致。但是噪声较多时,
会对灰度值较小的噪声进行放大,导致图像出现许多黑点,使图像变暗。
处理椒盐噪声时,会对胡椒噪声放大,导致图像出现许多黑点,而对盐粒噪声有较好
的滤除作用。

3.3 谐波均值滤波器

这里写图片描述

3.3.1 滤除高斯噪声

这里写图片描述

3.3.2滤除椒盐噪声

这里写图片描述

总结:
与几何均值滤波器有相似的效果,处理高斯噪声时,会对灰度值较小的噪声进行放
大,导致图像出现许多黑点,使图像变暗。
处理椒盐噪声时,会对胡椒噪声放大,导致图像出现许多黑点,无法处理胡椒噪声,
而对盐粒噪声有较好的滤除作用。

3.4 逆谐波均值滤波器

这里写图片描述

3.4.1 滤除高斯噪声

这里写图片描述

3.4.2滤除椒盐噪声

这里写图片描述

总结:
Q为正时,会对灰度值较大的噪声进行放大,Q为负时,会对灰度值较小的噪声进行 放大。
处理椒盐噪声时,Q为正,对胡椒噪声有较好的滤除作用,Q为负,对盐粒噪声有较 好的滤除作用。

代码如下:

void Filter(Mat img,Filter f,int m,int n,int Q = 0){
    Mat outImage;
    outImage.create(img.rows,img.cols,img.type());
    int h = m/2,w=n/2;
    for(int x=0;x<img.rows;x++){
        for(int y=0;y<img.cols;y++){
            int cnt = 0;
            if(f== Filter::SSJZ){
                long double sum = 0;
                for(int i=x-h;i<=x+h;i++){
                    for(int j=y-w;j<=y+w;j++){
                        if(i<0||i>=img.rows||j<0||j>=img.cols)continue;
                        cnt++;
                        sum+=img.at<uchar>(i, j);
                    }
                }
                outImage.at<uchar>(x, y)=sum/cnt;
            }
            else if(f== Filter::JHJZ){
                long double sum = 1;
                for(int i=x-h;i<=x+h;i++){
                    for(int j=y-w;j<=y+w;j++){
                        if(i<0||i>=img.rows||j<0||j>=img.cols)continue;
                        cnt++;
                        sum*=img.at<uchar>(i, j);
                    }
                }
                outImage.at<uchar>(x, y)=pow(sum,1.0/cnt);
            }
            else if(f== Filter::XBJZ){
                long double sum = 0;
                for(int i=x-h;i<=x+h;i++){
                    for(int j=y-w;j<=y+w;j++){
                        if(i<0||i>=img.rows||j<0||j>=img.cols)continue;
                        cnt++;
                        sum+=1.0/img.at<uchar>(i, j);
                    }
                }
                outImage.at<uchar>(x, y)=cnt/sum;
            }
            else if(f== Filter::NXBJZ){
                long double sum1 = 0,sum2 = 0;
                for(int i=x-h;i<=x+h;i++){
                    for(int j=y-w;j<=y+w;j++){
                        if(i<0||i>=img.rows||j<0||j>=img.cols)continue;
                        cnt++;
                        sum1+=pow(img.at<uchar>(i, j),Q);
                        sum2+=pow(img.at<uchar>(i, j),Q+1);
                    }
                }
                outImage.at<uchar>(x, y)=sum2/sum1;
            }
        }
    }
    imshow("Output", outImage);
    imwrite("/Users/camellia/desktop/gaussnoise_NXBJZ.jpg", outImage);
    cvWaitKey(0);
}

2017.7.31更新——
补充
四种滤波器
SSJZ——算术均值滤波器
JHJZ——几何均值滤波器
XBJZ——谐波均值滤波器
NXBJZ——逆谐波均值滤波器

enum Filter{
    SSJZ,JHJZ,XBJZ,NXBJZ
};
int main()
{

    Mat image;
    image = imread("/Users/camellia/desktop/lena.jpg",0);// 测试图片路径
    if ( !image.data )
    {
        printf("No image data \n");
        return -1;
    }
    namedWindow("Display Image", WINDOW_AUTOSIZE );
    imshow("Display Image", image);
    imwrite("/Users/camellia/desktop/origin.jpg", image);

    waitKey(0);
  // AddNoise(image,0,1,64);
     AddNoise(image,0.98);
//     Filter(image,SSJZ,5,5);
//     Filter(image,JHJZ,5,5);
//     Filter(image,XBJZ,5,5);
//     Filter(image,NXBJZ,5,5);
    return 0;
}
2019-09-14 17:23:52 weixin_44225182 阅读数 15112

添加高斯噪声

概念
高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。高斯白噪声的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。高斯白噪声包括热噪声和散粒噪声。在通信信道测试和建模中,高斯噪声被用作加性白噪声以产生加性白高斯噪声。

我的理解:高斯噪声就是符合高斯分布的噪声,在数字图像处理这块就是二维的高斯分布(正态分布)。那么怎么添加高斯噪声呢?首先我们肯定要得到一个二维的、符合高斯分布的噪声矩阵,最后将其添加到原图像上。这样高斯噪声就添加成功了。

方法一:利用randn()函数生成高斯噪声
这里需要用到randn()函数,该函数就专门用来生成正态分布数据的一个函数。
比如 randn(10,10),然后这个矩阵和原图像矩阵相加即可(注意缩放灰度范围)

randn(10,10)

ans =

   -0.3587    0.6694    0.2922    0.4127   -0.4399   -0.2027    1.2917   -1.2807    0.0522   -0.2097
    1.4851   -0.2349   -0.0809   -1.0475    0.4734   -0.8012   -1.3658   -2.4489    1.2525   -0.0725
    0.1214    0.2553    0.2774   -0.9508   -0.3378   -1.1350    0.7951   -0.6749   -0.1797   -0.5646
   -0.7056    1.5769   -0.8234    1.5896    1.5743    0.1304   -0.3575   -1.0971   -0.2286   -1.5035
    1.4605    0.6227   -0.6059    1.5939    0.0120   -0.1012   -0.9397   -1.6988   -2.3375    1.0503
   -0.2038    0.7016    0.7310   -0.4053   -0.0419   -0.3276   -0.7675    0.6319    0.3662   -1.0595
   -1.3164    0.1579    0.3200   -0.2055    0.5508   -0.6350    0.7769    1.1788    1.1854   -1.0070
    0.1054    1.0071    0.4267    0.6462   -1.1893   -1.8829   -1.2166   -0.2838    1.0378    0.8280
    0.9141   -1.5962   -0.0540    1.5489    1.0449    0.6155   -0.6227    0.2447    0.2955   -0.7770
   -0.7474    0.6233    1.3306   -0.2167   -0.2423    1.3778   -1.0203   -1.1946    0.4893    0.0451

代码:

t=imread('a1.jpg');
[m,n,z]=size(t);
y=0+0.1*randn(m,n);%二维高斯分布矩阵 0是均值 0.1是标准差

%先将其double化,再除以255 便于后面计算
t1=double(t)/255;

%加上噪声
t1=t1+y;

%将像素范围扩大至0--255
t1=t1*255;

%转换为uint8类型
t1=uint8(t1);

subplot(1,2,1),imshow(t),title('原图');
subplot(1,2,2),imshow(t1),title('加入均值为0,标准差为0.1的高斯噪声后');

效果图:
在这里插入图片描述
方法二:随机生成高斯噪声(这个我还没有懂那个随机生成高斯噪声函数怎么来的!)
代码:

 image=imread('a1.jpg');
[width,height,z]=size(image);
subplot(1,2,1);
imshow(image);
title('原图');
av=0;
std=0.1;
u1=rand(width,height);
u2=rand(width,height);
x=std*sqrt(-2*log(u1)).*cos(2*pi*u2)+av;
result1=double(image)/255+x;
result1=uint8(255*result1);
subplot(1,2,2);
imshow(result1);
title('加入均值为0,标准差为0.1的高斯噪声后');

效果图:
在这里插入图片描述

方法三:利用imnoise()函数
代码

t=imread('a1.jpg');
imshow(t),title('原图');
t1=imnoise(t,'gaussian',0,0.01);
figure,imshow(t1),title('添加均值为0,方差为0.01的高斯噪声');
t2=imnoise(t,'gaussian',0,0.02);
figure,imshow(t2),title('添加均值为0,方差为0.02的高斯噪声');
t3=imnoise(t,'gaussian',0,0.03);
figure,imshow(t3),title('添加均值为0,方差为0.03的高斯噪声');
t4=imnoise(t,'gaussian',0.2,0.01);
figure,imshow(t4),title('添加均值为0.2,方差为0.01的高斯噪声');
t5=imnoise(t,'gaussian',0.4,0.01);
figure,imshow(t5),title('添加均值为0.4,方差为0.01的高斯噪声');

效果图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意:imnoise()中参数写的是方差,而方法一、二中是标准差。

更多

获取更多资料、代码,微信公众号:海轰Pro
回复 海轰 即可

2019-08-29 14:37:01 qq_41541249 阅读数 428

高斯噪声

高斯噪声是指高绿密度函数服从高斯分布的一类噪声。特别的,假设一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称这个噪声为高斯白噪声。
高斯噪声

高斯模糊

原理:是把要模糊的像素色值统计,用数学上加权平均的计算方法(高斯函数)得到色值,对范围、半径等进行模糊。
应用:一些美颜软件、美颜相机上的磨皮和毛玻璃特效基本上都是用的高斯模糊,并且大部分图像处理软件中都有高斯模糊的操作,除此之外,高斯模糊还具有减少图像层次和深度的功能

高斯模糊

Python代码

import cv2
import numpy as np

def clamp(pv):
    if pv > 255:
        return 255
    elif pv < 0:
        return 0
    else:
        return pv

#给图片增加高斯噪声,计算花费很长时间
def gaussian_noise(src):
    image = src
    h, w, c = image.shape
    for row in range(h):
        for col in range(w):
            #获取三个高斯随机数
            #第一个参数:概率分布的均值,对应着整个分布的中心
            #第二个参数:概率分布的标准差,对应于分布的宽度
            #第三个参数:生成高斯随机数数量
            s = np.random.normal(0, 20, 3)
            #获取每个像素点的bgr值
            b = image[row, col, 0]  #blue
            g = image[row, col, 1]  #green
            r = image[row, col, 2]  #red\
            #给每个像素值设置新的bgr值
            image[row, col, 0] = clamp(b + s[0])
            image[row, col, 1] = clamp(g + s[1])
            image[row, col, 2] = clamp(r + s[2])

    cv2.namedWindow('Gaussian_noise', 0)
    cv2.resizeWindow('Gaussian_noise', 600, 600)
    cv2.imshow('Gaussian_noise', image)

def gaussian_blur(src):
    image = src
    dst = cv2.GaussianBlur(image, (0, 0), 15)

    cv2.namedWindow('Gaussian_blur', 0)
    cv2.resizeWindow('Gaussian_blur', 600, 600)
    cv2.imshow('Gaussian_blur', dst)

src = cv2.imread('C:/Users/207/Anaconda3/envs/demo/project/hhface.png')
cv2.namedWindow('input image', 0)
cv2.resizeWindow('input image', 600, 600)
cv2.imshow('input image', src)

#gaussian_noise(src)
gaussian_blur(src)

cv2.waitKey(0)

cv2.destroyAllWindows()

参考: link.https://www.cnblogs.com/lytwajue/p/7381202.html
link.https://blog.csdn.net/gangzhucoll/article/details/78682492

2019-07-24 16:49:10 qq_33208851 阅读数 20707


图像处理系列笔记: https://blog.csdn.net/qq_33208851/article/details/95335809


图像复原 即利用退化过程的先验知识,去恢复已被退化图像的本来面目。在图像的复原中,需要对噪声进行处理。

1.什么是图像噪声

图像噪声是指存在于图像数据中的不必要的或多余的干扰信息。 图像中各种妨碍人们对其信息接受的因素即可称为图像噪声 。噪声在理论上可以定义为“不可预测,只能用概率统计方法来认识的随机误差”(图像噪声可以描述成不同的类型,其归类方法就是基于统计方法的)。因此将图像噪声看成是多维随机过程是合适的,因而描述噪声的方法完全可以借用随机过程的描述,即用其概率分布函数和概率密度分布函数。通俗的说就是噪声让图像不清楚。
参考文章:https://baike.baidu.com/item/图像噪声/4116468?fr=aladdin

2. 图像噪声来源

  1. 图像获取过程中
    图像传感器CCD和CMOS采集图像过程中受传感器材料属性、工作环境、电子元器件和电路结构等影响,会引入各种噪声。

  2. 图像信号传输过程中
    传输介质和记录设备等的不完善,数字图像在其传输记录过程中往往会受到多种噪声的污染。

3. 噪声分类

噪声按照不同的分类标准可以有不同的分类形式:

  • 基于产生原因:内部噪声,外部噪声。
  • 基于噪声与信号的关系
    加性嗓声和图像信号强度是不相关的,这类带有噪声的图像g可看成为理想无噪声图像f与噪声n之和:
    在这里插入图片描述
    乘性嗓声和图像信号是相关的,往往随图像信号的变化而变化,载送每一个象素信息的载体的变化而产生的噪声受信息本身调制。在某些情况下,如信号变化很小,噪声也不大。为了分析处理方便,常常将乘性噪声近似认为是加性噪声,而且总是假定信号和噪声是互相统计独立。
    在这里插入图片描述
  • 按照基于统计后的概率密度函数:是比较重要的,主要因为引入数学模型,这就有助于运用数学手段去除噪声。在不同场景下噪声的施加方式都不同,由于在外界的某种条件下,噪声下图像-原图像(没有噪声时)的概率密度函数(统计结果)服从某种分布函数,那么就把它归类为相应的噪声。下面将具体说明基于统计后的概率密度函数的噪声分类及其消除方式。

3.1 高斯噪声及其消除方式

在空间域和频域中,由于高斯噪声在数学上的易处理性(高斯函数,高斯函数的傅里叶变换仍然是高斯函数,见相关博文),这种噪声(也称为正态噪声)模型经常被用在实践中,事实上,这种易处理性非常方便。
高斯函数:
在这里插入图片描述
在这里插入图片描述

3.1.1 如何确定一种噪声是高斯噪声

样本图:
在这里插入图片描述
噪声下的样本图:
在这里插入图片描述
噪声的直方图(统计直方图):
在这里插入图片描述
可以看到,噪声的直方图中图形像高斯正态函数的分布。
说明:噪声对原图像的影响是随机的,直方图呈现的分布形式是基于统计的结果直方图表示了(归一化后)灰度值的概率密度分布,因此可以使用直方图来表示灰度值的概率密度。
统计直方图:
在这里插入图片描述
在这里插入图片描述

3.1.2 高斯滤波消除高斯噪声

关于高斯滤波(模糊)的方法和过程在前面的文章中写过:

图像处理(7)–高斯模糊原理

3.1.3 高斯函数的重要性质

高斯函数具有五个重要的性质,这些性质使得它在早期图像处理中特别有用.这些性质表明,高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器,且在实际图像处理中得到了工程人员的有效使用.高斯函数具有五个十分重要的性质,它们是:

  1. 二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的.一般来说,一幅图像的边缘方向是事先不知道的,因此,在滤波前是无法确定一个方向上比另一方向上需要更多的平滑.旋转对称性意味着高斯平滑滤波器在后续边缘检测中不会偏向任一方向.
  2. 高斯函数是单值函数.这表明,高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点权值是随该点与中心点的距离单调增减的.这一性 质是很重要的,因为边缘是一种图像局部特征,如果平滑运算对离算子中心很远的像素点仍然有很大作用,则平滑运算会使图像失真.
  3. 高斯函数的付立叶变换频谱是单瓣的.正如下面所示,这一性质是高斯函数付立叶变换等于高斯函数本身这一事实的直接推论.图像常被不希望的高频信号所 污染(噪声和细纹理).而所希望的图像特征(如边缘),既含有低频分量,又含有高频分量.高斯函数付立叶变换的单瓣意味着平滑图像不会被不需要的高频信号 所污染,同时保留了大部分所需信号.
  4. 高斯滤波器宽度(决定着平滑程度)是由参数σ表征的,而且σ和平滑程度的关系是非常简单的.σ越大,高斯滤波器的频带就越宽,平滑程度就越好.通过 调节平滑程度参数σ,可在图像特征过分模糊(过平滑)与平滑图像中由于噪声和细纹理所引起的过多的不希望突变量(欠平滑)之间取得折衷.
  5. 由于高斯函数的可分离性,大高斯滤波器可以得以有效地实现.二维高斯函数卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积结果与方向垂直的相同一维高斯函数卷积.因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长.

3.2 瑞利噪声

瑞利分布:
在这里插入图片描述
在这里插入图片描述
均值和方差:
在这里插入图片描述
瑞利分布百度百科:https://baike.baidu.com/item/瑞利分布/10284554?fr=aladdin

3.2.1 如何确定一种噪声是瑞利噪声

样本图:
在这里插入图片描述
噪声下的样本图:
在这里插入图片描述
噪声的直方图(统计直方图):
在这里插入图片描述

3.3 伽马(爱尔兰)噪声

伽马函数:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
或者:
在这里插入图片描述
在这里插入图片描述
Γ函数详解:
https://blog.csdn.net/lanchunhui/article/details/50535735
伽马函数百度百科:https://baike.baidu.com/item/伽玛函数/3540177?fromtitle=伽马函数&fromid=11217190&fr=aladdin
伽马噪声百度百科:https://baike.baidu.com/item/Erlang噪声/22026470?fr=aladdin
伽马噪声直方图:
在这里插入图片描述

3.4 指数分布噪声

概率密度函数:
在这里插入图片描述
在这里插入图片描述
累计分布函数:
在这里插入图片描述
在这里插入图片描述
期望值(均值):
在这里插入图片描述
方差:
在这里插入图片描述
相关博文:https://blog.csdn.net/ningyaliuhebei/article/details/46409941

3.5 均匀分布噪声

一个连续随机变量X在区间[a,b]上具有均匀分布,记作

X∼Uniform(a,b)

当它的概率密度函数满足:
在这里插入图片描述
在这里插入图片描述
它的分布函数如下所示:
在这里插入图片描述
在这里插入图片描述
相应的期望和方差:
在这里插入图片描述
在这里插入图片描述
均匀分布百度百科:https://baike.baidu.com/item/均匀分布/954451?fr=aladdin

3.6 脉冲(椒盐)噪声及其消除方式

3.6.1 脉冲(椒盐)噪声

椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。盐和胡椒噪声的成因可能是影像讯号受到突如其来的强烈干扰而产生、类比数位转换器或位元传输错误等。例如失效的感应器导致像素值为最小值,饱和的感应器导致像素值为最大值。
在这里插入图片描述
在这里插入图片描述

3.6.1 脉冲(椒盐)噪声的消除方式

一般使用非线性滤波器处理椒盐噪声:

  • 异常值侦测
    异常侦测(Anomaly detection)有时称为异常值侦测(Outlier detection),如其名所隐含的,在给定的资料集合中,它将侦测在已有的规律中表现异常者。现今常用的方法以计算距离为基础的K-近邻算法或是机器学习中的支持向量机等。
  • 中值滤波器
    中值滤波器(Median filtering) 如其名所隐含的,它将一个像素的值用该像素邻域中强度值的中间值来取代(计算中间值的过程中,也会将该像素的原始值包含),中值滤波器在处理盐和胡椒噪声上能提供绝佳的噪声降低效能。
  • 伪中值滤波器
    为了改进中值滤波器的计算速率,伪中值滤波器(Pseudo-median filtering) 以近似的方法算出中间值。

4. 图像去噪算法的分类

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

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

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

  • 变分法
    另一种利用数学进行图像去噪方法是基于变分法的思想,确定图像的能量函数,通过对能量函数的最小化工作,使得图像达到平滑状态,现在得到广泛应用的全变分TV模型就是这一类。这类方法的关键是找到合适的能量方程,保证演化的稳定性,获得理想的结果。-形 态学噪声滤除器
    将开与闭结合可用来滤除噪声,首先对有噪声图像进行开运算,可选择结构要素矩阵比噪声尺寸大,因而开运算的结果是将背景噪声去除;再对前一步得到的图像进行闭运算,将图像上的噪声去掉。据此可知,此方法适用的图像类型是图像中的对象尺寸都比较大,且没有微小细节,对这类图像除噪效果会较好。
    参考博文:https://blog.csdn.net/Arcsinsin/article/details/12260373

5. 图像去噪算法

根据图像的特征建立起相应的概率密度函数。在对数字图像进行处理的过程中,一般需要以概率密度函数作为根本的依据来对噪声的统计特性进行表述,建立起对应的数据模型。

5.1 基于空间域下的滤波器

关于空间域下的滤波器在我的 图像处理(10)–空间滤波 一文中有详细的介绍。这个很重要。

5.2 基于小波域的小波阈值去噪

小波萎缩法是目前研究最为广泛的方法,小波萎缩法又分成如下两类:第1类是阈值萎缩,由于阈值萎缩主要基于如下事实,即比较大的小波系数一般都是以实际信号为主,而比较小的系数则很大程度是噪声。因此可通过设定合适的阈值,首先将小于闽值的系数置零,而保留大于闭值的小波系数;然后经过阈值函数映射得到估计系数;最后对估计系数进行逆变换,就可以实现去噪和重建;而另外一种萎缩方法则不同,它是通过判断系数被噪声污染的程度,并为这种程度引入各种度量方法(例如概率和隶属度等),进而确定萎缩的比例,所以这种萎缩方法又被称为比例萎缩。阈值萎缩方法中的两个基本要素是阈值和阈值函数。

阈值的选择:
阈值的确定在阈值萎缩中是最关键的。目前使用的阈值可以分成全局阈值和局部适应阈值两类。其中,全局阈值对各层所有的小波系数或同一层内的小波系数都是统一的;而局部适应阈值是根据当前系数周围的局部情况来确定阈值。目前提出的全局阈值主要有以下几种:

(1),Donoho和Johastone统一阈值(简称DJ阈值):

其中σ为噪声标准方差,N为信号的尺寸或长度。

image

(2),基于零均值正态分布的置信区间阈值:

image

(3),Bayes Shrink阈值和Map Shrink阈值。在小波系数服从广义高斯分布的假设下,Chang等人得出了阈值:

image

其中,(R为噪声标准方差,RB为广义高斯分布的标准方差值)。

(4),最小最大化阈值:这是Donoho和John Stone在最小最大化意义下得出的阈值与上边的阈值不同,它是依赖于信号的,而且没有显式表达式,在求取时需要预先知道原信号。

(5),理想阈值:理想阈值是在均方差准则下的最优阈值,同最大最小化阈值一样,也没有显式的表达式,并且这个阈值的计算通常也需先知道信号本身。

阈值函数:

Bruce和Gao。提出了一种半软阈值函数:

image

该方法通过选择合适的阈值T1和12,可以在软阈值方法和硬阈值方法之间达到很好的折中。另外,zhang等人为了对SIJRE误差准则函数进行基于梯度的优化搜索,提出了另外一种阈值函数,这种阈值函数同上边闭值函数所不同的是它拥有更高的导数阶,故其重建图像更为平滑,但该文作者将去噪效果的提高归功于搜索方法,其实,Donoh。和 Johnstone提出的在当前小波系数集合中,搜索最优阈值的方法,对于当前已经是优的了,由此可见,该去噪效果的提高则应归功于阈值函数的选取。

5.3 基于PDE的图像去噪

目前,基于PDE的图像处理方法的研究,也是图像去噪的研究热点方向,并且己经取得了一定的理论和实际应用方面的成它的去噪过程为通过建立噪声图像为某非线性PDE的初始条件,然后求解这个PDE,得到在不同时刻的解,即为滤波结果。Perona和Malik提出了基于PDE的非线性扩散滤波方法(以下简称P-M),各向异性的去噪模型根据图像的梯度值决定扩散的速度,使之能兼顾噪声消除和边缘保持两方面的要求。

以P-M模型为代表的这类方法己经在图像增强、图像分割和边缘检测等领域得到了广泛的应用,取得了很好的效果。

P-M是一种非线性的各向异性方法,目的是为了克服线性滤波方法存在的模糊边缘和边缘位置移动的缺点。基本思想是:图像特征强的地方减少扩散系数,图像特征弱的地方增强扩散系数。方程如下:

image

其中u(x,y,t)是随时间变化的图像,image是梯度的模,image扩散系数函数用于控制扩散速度。理想的扩散系数应当使各向异性扩散在灰度变化平缓的区域快速进行,而在灰度变化急剧的位置(即图像特征处)低速扩散乃至不扩散函数,所以,imag应具有如下性质:

image

基于以上的两个性质,P-M提出了如下扩散系数函数:

image

其中k为边缘阈值,用来判断边缘区域和平坦区域。引入通量函数,主要是为了阐明阈值k在扩散操作中的作用,其函数定义如下:

image

尽管P-M方程在抑制噪声与保留图像重要特征方面取得了一定的效果,但却表现出病态且不稳定。Catt等人对该方程进行了改进,他们先用高斯核同图像作卷积,然后取其梯度模作图像边缘信息的估计。文献提出用优化的对称指数滤波器对图像作光滑,然后取其梯度模作图像边缘信息的估计。这两种估计方法的基本思想是降低噪声的干扰,更加真实地提取图像的边缘特征信息,以便利用边缘信息更好地控制P-M方程的扩散行为。

5.4 全变分(TV)图像去噪

TV方法是由Rudin Osher and Fatemi提出,它基于变分法的思想,确定图像的能量函数,通过对图像能量函数最小化达到平滑去噪的目的。是现在比较流行的图像复原方法。图像的能量函数方程为:

image

在文献[2]中给出的全变分去噪能量泛函为:

image

为了使得能量函数最小,其欧拉-拉格朗日方程为:

image

其中,梯度算子:

image

正则项:

image

用来减少平坦区域的退化。将整体左边转换成图像中任意像素点中的局部坐标系后,方程可以分解成边缘方向和边缘正交的两个方向,分解后个方向的系数控制着该方向的扩散强度。扩散方向实际上是一个分线性的各向异性的扩散方程,其扩散算子仅沿图像梯度的正交方向扩散,扩散系数为1/|▽μ|,而朝着梯度方向无扩散。这样可以通过图像的梯度来判断边缘位置,使得边缘扩散系数最小,从而降低对边缘的模糊程度,但是也由于边缘的扩散系数小,噪声得不到很好的抑制,而且当|▽μ|>λ的时候,势能函数是非凸的,使得边缘处处理表现不稳定。所以,如何确定扩散参数的值是一个问题。

参考文章:https://blog.csdn.net/Arcsinsin/article/details/12260373

在空间域上的各种滤波器在OpenCV中均有相应的实现方式,例如:
OpenCV(4)–HPF高通滤波器
OpenCV(13)–图片模糊处理(平滑)
等等

图像处理系列笔记: https://blog.csdn.net/qq_33208851/article/details/95335809
关于我的OpenCV文章