zoukankan      html  css  js  c++  java
  • 数学之路-python计算实战(7)-机器视觉-图像产生加性零均值高斯噪声

    图像产生加性零均值高斯噪声。在灰度图上加上噪声,加上噪声的方式是每一个点的灰度值加上一个噪声值。噪声值的产生方式为Box-Muller算法生成高斯噪声。

    在计算机模拟中,常常须要生成正态分布的数值。最主要的一个方法是使用标准的正态累积分布函数的反函数。

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

    还有一个更加快捷的方法是ziggurat算法。以下将介绍这两种方法。

    一个简单可行的而且easy编程的方法是:求12个在(0,1)上均匀分布的和。然后减6(12的一半)。

    这样的方法能够用在非常多应用中。这12个数的和是Irwin-Hall分布;选择一个方差12。这个随即推导的结果限制在(-6,6)之间,而且密度为12。是用11次多项式预计正态分布。

    Box-Muller方法是以两组独立的随机数U和V。这两组数在(0,1]上均匀分布。用U和V生成两组独立的标准常态分布随机变量X和Y:

     X = sqrt{- 2 ln U} \, cos(2 pi V) ,
     Y = sqrt{- 2 ln U} \, sin(2 pi V)

    这个方程的提出是由于二自由度的卡方分布非常easy由指数随机变量(方程中的lnU)生成。因而通过随机变量V能够选择一个均匀围绕圆圈的角度,用指数分布选择半径然后变换成(正态分布的)x,y坐标。


    Box-Muller 是产生随机数的一种方法。Box-Muller 算法隐含的原理非常深奥。但结果却是相当简单。

    它通常是要得到服从正态分布的随机数。基本思想是先得到服从均匀分布的随机数�再将服从均匀分布的随机数转变为服从正态分布。


    # -*- coding: utf-8 -*- 
    #加性零均值高斯噪声
    #code:myhaspl@myhaspl.com
    import cv2
    import numpy as np
    
    fn="test2.jpg"
    myimg=cv2.imread(fn)
    img=cv2.cvtColor(myimg,cv2.COLOR_BGR2GRAY)
    
    param=30
    #灰阶范围
    grayscale=256
    w=img.shape[1]
    h=img.shape[0]
    newimg=np.zeros((h,w),np.uint8)
    
    
    for x in xrange(0,h):
        for y in xrange(0,w,2):
            r1=np.random.random_sample()
            r2=np.random.random_sample()
            z1=param*np.cos(2*np.pi*r2)*np.sqrt((-2)*np.log(r1))
            z2=param*np.sin(2*np.pi*r2)*np.sqrt((-2)*np.log(r1))
            
            fxy=int(img[x,y]+z1)
            fxy1=int(img[x,y+1]+z2)       
            #f(x,y)
            if fxy<0:
                fxy_val=0
            elif fxy>grayscale-1:
                fxy_val=grayscale-1
            else:
                fxy_val=fxy
            #f(x,y+1)
            if fxy1<0:
                fxy1_val=0
            elif fxy1>grayscale-1:
                fxy1_val=grayscale-1
            else:
                fxy1_val=fxy1
            newimg[x,y]=fxy_val
            newimg[x,y+1]=fxy1_val
        
    
    cv2.imshow('preview',newimg)
    cv2.waitKey()
    cv2.destroyAllWindows()


    本博客全部内容是原创,假设转载请注明来源

    http://blog.csdn.net/myhaspl/

    以下部分代码为彩色图像的高斯噪声产生  

    # -*- coding: utf-8 -*- 
    #加性零均值高斯噪声
    #code:myhaspl@myhaspl.com
    import cv2
    import numpy as np
    
    fn="test2.jpg"
    myimg=cv2.imread(fn)
    img=myimg
    
    param=30
    #灰阶范围
    grayscale=256
    w=img.shape[1]
    h=img.shape[0]
    newimg=np.zeros((h,w,3),np.uint8)
    
    for x in xrange(0,h):
        for y in xrange(0,w,2):
            r1=np.random.random_sample()
            r2=np.random.random_sample()
            z1=param*np.cos(2*np.pi*r2)*np.sqrt((-2)*np.log(r1))
            z2=param*np.sin(2*np.pi*r2)*np.sqrt((-2)*np.log(r1))    
    .........
    .........
            newimg[x,y,0]=fxy_val_0
            newimg[x,y,1]=fxy_val_1
            newimg[x,y,2]=fxy_val_2
            newimg[x,y+1,0]=fxy1_val_0
            newimg[x,y+1,1]=fxy1_val_1
            newimg[x,y+1,2]=fxy1_val_2
    
    cv2.imshow('preview',newimg)
    cv2.waitKey()
    cv2.destroyAllWindows()




  • 相关阅读:
    Excel 如何在程序运行期间提示信息“正在运行中。。。请稍候 38云淡淡
    EXT学习笔记第一课
    java学习日志1
    C语言基础知识
    js所学知识点
    javascript 取最大值和最小值!
    html常用标签
    javascript4位随机数(字体都有颜色)
    marginpadding区别及bug
    数独的优化回朔算法(四)
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7025866.html
Copyright © 2011-2022 走看看