zoukankan      html  css  js  c++  java
  • 高斯噪声

    高斯噪声

    图像噪声之高斯噪声(gauss noise)

    概述:

    高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声

    与椒盐噪声类似(Salt And Pepper Noise),高斯噪声(gauss noise)也是数字图像的一个常见噪声。

    椒盐噪声是出如今随机位置、噪点深度基本固定的噪声,高斯噪声与其相反,是差点儿每一个点上都出现噪声、噪点深度随机的噪声。

    算法步骤:

    通过概率论里关于正态分布的有关知识能够非常easy的得到其计算方法,高斯噪声的概率密度服从高斯分布(正态分布)当中有means(平均值)和sigma(标准方差)两个參数。

    高斯分布(正态分布):

    这里写图片描写叙述

    对于每一个输入像素。我们能够通过与符合高斯分布的随机数相加, 得到输出像素:

       Pout = Pin + F(means,sigma)
    

    获得一个符合高斯分布的随机数有好几种方法,比方最主要的一个方法是使用标准的正态累积分布函数的反函数。

    除此之外还有其它更加高效的方法。Box-Muller变换就是当中之中的一个。还有一个更加快捷的方法是ziggurat算法。

    而python的random库也提供了产生高斯随机数的方法:

    高斯分布
    random.gauss(mu, sigma)
    Gaussian distribution. mu is the mean, and sigma is the standard deviation. This is slightly faster than the normalvariate() function defined below.

    给一副数字图像加上高斯噪声的处理顺序例如以下:

    • a.设定參数sigma 和 Xmean

    • b.产生一个高斯随机数

    • c.依据输入像素计算出输出像素

    • d.又一次将像素值限制或放缩在[0 ~ 255]之间

    • e.循环全部像素

    • f.输出图像。

    编程实例:

    # -*- coding: utf-8 -*-
    
    from PIL import Image
    
    from pylab import *
    
    from numpy import*
    
    import random
    
    #读取图片并转为数组
    im = array(Image.open('./source/test.jpg'))
    
    #设定高斯函数的偏移
    means = 0
    
    #设定高斯函数的标准差
    sigma = 25
    
    #r通道
    r = im[:,:,0].flatten()
    
    #g通道
    g = im[:,:,1].flatten()
    
    #b通道
    b = im[:,:,2].flatten()
    
    
    
    #计算新的像素值
    for i in range(im.shape[0]*im.shape[1]):
    
        pr = int(r[i]) + random.gauss(0,sigma)
    
        pg = int(g[i]) + random.gauss(0,sigma)
    
        pb = int(b[i]) + random.gauss(0,sigma)
    
        if(pr < 0):
    
        pr = 0
    
        if(pr > 255):
    
        pr = 255
    
        if(pg < 0):
    
        pg = 0
    
        if(pg > 255):
    
        pg = 255
    
        if(pb < 0):
    
        pb = 0
    
        if(pb > 255):
    
        pb = 255
    
        r[i] = pr
    
    
        g[i] = pg
    
    
        b[i] = pb
    
    
    im[:,:,0] = r.reshape([im.shape[0],im.shape[1]])
    
    im[:,:,1] = g.reshape([im.shape[0],im.shape[1]])
    
    im[:,:,2] = b.reshape([im.shape[0],im.shape[1]])
    
    #显示图像
    
    imshow(im)
    
    show()         
    
    

    这里因为默认图像会被编码成无符号八位整数(unit8)。所以当进行数值计算时,假设出现大于255和小于0的情况会进行滚动,比方255 + 10 = 9 ,假设不进行处理,结果是错误的,所以必须转成int计算,限制范围后再赋值回去。以下是直接运算造成的错误结果(sigma = 25):

    # -*- coding: utf-8 -*-
    
    from PIL import Image
    
    from pylab import *
    
    from numpy import*
    
    import random
    
    #读取图片并转为数组
    im = array(Image.open('./source/test.jpg'))
    
    #设定高斯函数的偏移
    means = 0
    
    #设定高斯函数的标准差
    sigma = 25
    
    #r通道
    r = im[:,:,0].flatten()
    
    #g通道
    g = im[:,:,1].flatten()
    
    #b通道
    b = im[:,:,2].flatten()
    
    
    
    #计算新的像素值
    for i in range(im.shape[0]*im.shape[1]):
    
    
        r[i] = r[i] + random.gauss(0,sigma)
    
    
        g[i] = g[i] + random.gauss(0,sigma)
    
    
        b[i] = b[i] + random.gauss(0,sigma)
    
    
    im[:,:,0] = r.reshape([im.shape[0],im.shape[1]])
    
    im[:,:,1] = g.reshape([im.shape[0],im.shape[1]])
    
    im[:,:,2] = b.reshape([im.shape[0],im.shape[1]])
    
    #显示图像
    
    imshow(im)
    
    show()         
    

    这里写图片描写叙述

    执行结果:


    原图

    这里写图片描写叙述

    sigma = 15

    这里写图片描写叙述

    sigma = 25

    这里写图片描写叙述

    sigma = 40

    这里写图片描写叙述

    结语:

    本篇博客主要介绍了高斯噪声这样的常见的图像噪声的原理与生成。希望对大家有所帮助~

  • 相关阅读:
    Linux设置高分辨率后无法进入X系统
    C++中struct和class的总结
    Jenkins 使用slave管理进行持续集成测试说明
    从BUG工具redmine上获取数据后借助python模块pycha 画出BUG分析类报表,利用xlsxwriter
    生成jmeter可用文件和必要参数化的csv
    从BUG工具redmine上获取数据后借助python模块pycha 画出BUG分析类报表
    遍历jenkins build后的文件夹,找出最新“build NO.”复制到制定目录进行操作
    计算http接口签名,并驱动其参数进行测试
    举一反三,取buglist中的url
    测试sq3数据库,读取数据库把内容输出到csv文件,附上输出到excel方法
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7123686.html
Copyright © 2011-2022 走看看