加载中…
个人资料
数字图像处理opencv
数字图像处理opencv
  • 博客等级:
  • 博客积分:0
  • 博客访问:44,152
  • 关注人气:4
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

数字图像处理:噪声模型(椒盐噪声、高斯噪声)

(2018-03-13 22:55:52)
标签:

it

教育

图片

杂谈

分类: 数字图像处理
转载请表明出处:

图像噪声是图像在获取或传输过程中受到随机信号干扰,妨碍人们对图像理解及分析的信号。很多时候将图像噪声看作多维随机过程,因而描述噪声的方法完全可以借用随机过程的描述,即使用其概率分布函数和概率密度分布函数。图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量,图像在传输过程中产生图像噪声的主要因素是所用的传输信道受到噪声污染。
1、椒盐噪声
椒盐噪声是数字图像中的常见噪声,一般是由图像传感器、传输信道及解码处理等产生的黑白相见的亮暗点噪声,椒盐噪声常由图像切割产生。椒盐噪声是指两种噪声:盐噪声(salt noise)及椒噪声(pepper noise)。盐噪声一般是白色噪声,椒噪声一般是黑色噪声,前者高灰度噪声,后者属于低灰度噪声,一般两种噪声同时出现,呈现在图像上就是黑白杂点。图像去除脉冲干扰及椒盐噪声最常用的算法是中值滤波,图像模拟添加椒盐噪声是通过随机获取像素值点并设置为高亮点来实现的。
参考代码:
 NormalText Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include   
#include   
#include   
// 图像添加椒盐噪声  
cv::Mat addSaltNoise(const cv::Mat srcImage, int n)  
 
    cv::Mat resultIamge =srcImage.clone()  
    for(int k=0; k
     
        // 随机取值行列  
        int rand() resultIamge.cols;  
        int rand() resultIamge.rows;  
        // 图像通道判定  
        if(resultIamge.channels() == 1)  
         
            resultIamge.at(j,i) 255;  
        }else  
         
            resultIamge.at(j,i)[0] 255;  
            resultIamge.at(j,i)[1] 255;  
            resultIamge.at(j,i)[2] 255;  
         
     
    return resultIamge;  
 
int main()  
 
    cv::Mat srcImage cv::imread("22.jpg");  
    if( srcImage.empty())  
        return -1;  
    cv::Mat resultImage addSaltNoise(srcImage, 5000);  
    cv::imshow("srcImage",srcImage);  
    cv::imshow("resultImage",resultImage);  
    cv::waitKey(0);  
 

2.高斯噪声
高斯噪声是指概率密度函数服从高斯分布(即正态分布)的一类噪声。如果一个噪声,它的幅度服从高斯分布,而它的功率谱密度又是分布均匀的,则称它为高斯白噪声。高斯白噪声的二阶矩不想关,一阶矩为常数,是指先后信号在时间上的相关性。高斯白噪声包括热噪声和散粒噪声。高斯噪声完全由其时变平均值和两瞬时的协方差函数来确定,若噪声为平稳的,则平均值与时间无关,而协方差函数则变成仅和所考虑的两瞬时之方差有关的相关函数,它在意义上等效于功率谱密度。高斯噪声可以由大量独立的脉冲产生,从而在任何有限时间间隔内,这些脉冲中的每一个脉冲值与所有脉冲值的总和相比都可以忽略不计。
根据Box-Muller变换原理,假设随机变量U1,U2来自独立的处于(0,1)之间的均匀分布,则进过下面两个式子产生的随机变量Z0、Z1服从标准高斯分布:
数字图像处理:噪声模型(椒盐噪声、高斯噪声)
上式中Z0、Z1满足正态分布,其中均值为0,方差为1;
参考代码:
 NormalText Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include  
#include
#include
#include

using namespace cv;
using namespace std;

double generateGussianNoise(double mu,double sigma);   //获取高斯随机值
Mat addGaussianNoise(Mat &srcImage);  //为图像添加高斯噪声
int main()
{
    //读入图片,注意图片路径  
    Mat srcimage=imread("F:\\Matlab\\pictures\\Three.jpg"); 
    cvtColor(srcimage,srcimage,CV_BGR2GRAY);
    imshow("srcImage",srcimage);

    //图片读入成功与否判定  
    if(!srcimage.data)  
     
        cout<<"you idiot!where did you hide lena!"<<endl;  
        //等待按键  
        system("pause");  
        return -1;  
     

    Mat resultImage addGaussianNoise(srcimage);

    imshow("dstImage",resultImage);
    
    //等待按键  
    waitKey();  
    return 0;  
 

double generateGussianNoise(double mu,double sigma)
{
    const double epsilon std::numeric_limits::min();  //区可取范围内的最小值
    static double z0,z1;

    static bool flag false;
    flag !flag;

    double x;
    double u1,u2;

    if (!flag)
    {
        return z1*sigma mu;
    }

    do{
        u1 (double)rand()/RAND_MAX;
        u2 (double)rand()/RAND_MAX;
    }while(u1<=epsilon);

    z0 sqrt(-2.0*log(u1))*cos(2*CV_PI*u2);
    z1 sqrt(-2.0*log(u1))*sin(2*CV_PI*u2);
    

    return z0*sigma mu;
}

Mat addGaussianNoise(Mat &srcImage)
{
    int 32;

    Mat resultImage srcImage.clone();
    int nRows resultImage.rows;
    int nCols resultImage.cols;
    
    for (int j=0;j
    {
        for (int i=0;i
        {
            int val (int)resultImage.at(j,i) k*generateGussianNoise(2,0.8);
            if (val<0)
            {
                val 0;
            }
            if (val>255)
            {
                val 255;
            }
            resultImage.at(j,i) (uchar)val;
        }
    }

    return resultImage;
}

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有