首页 > 编程语言 > 详细

数学之路-python计算实战(7)-机器视觉-图像产生加性零均值高斯噪声

时间:2014-07-12 17:45:20      阅读:1140      评论:0      收藏:0      [点我收藏+]

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

在计算机模拟中,经常需要生成正态分布的数值。最基本的一个方法是使用标准的正态累积分布函数的反函数。除此之外还有其他更加高效的方法,Box-Muller变换就是其中之一。另一个更加快捷的方法是ziggurat算法。下面将介绍这两种方法。一个简单可行的并且容易编程的方法是:求12个在(0,1)上均匀分布的和,然后减6(12的一半)。这种方法可以用在很多应用中。这12个数的和是Irwin-Hall分布;选择一个方差12。这个随即推导的结果限制在(-6,6)之间,并且密度为12,是用11次多项式估计正态分布。

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

bubuko.com,布布扣
bubuko.com,布布扣

这个方程的提出是因为二自由度的卡方分布很容易由指数随机变量(方程中的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()


bubuko.com,布布扣

本博客所有内容是原创,如果转载请注明来源

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()

bubuko.com,布布扣



数学之路-python计算实战(7)-机器视觉-图像产生加性零均值高斯噪声,布布扣,bubuko.com

数学之路-python计算实战(7)-机器视觉-图像产生加性零均值高斯噪声

原文:http://blog.csdn.net/myhaspl/article/details/37693429

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!