高斯随机噪声实时生成实现方法研究
则原始映射表描述为:
原始映射表比较大,实际使用时对其做了粗采样。对y对应的高斯分布值进行的量化也没有采用图4中均标准阶梯形式,而是采用了如下粗采样形式:
结果映射表[k]=原始映射表[k·d+d/2] (2)
其中:采样间隔d=∑yi/M.,量化处理曲线如图5所示。
从图5可以发现,两边较小处并没有像阶梯图那样截止为0,而是允许以小的概率出现非零值。试验证明这种方式更好一些。
考虑高斯分布的实际情况,并经过试验验证y仅在[-4,4]之间取值,就能够达到令人满意的精度。图6给出了X大小对噪声精度的影响曲线,纵轴为平均误差。
可以看出,当2X大于5500时,误差达到了极小稳定状态。为了方便计算,选择2X=213=8192,即X=212=4096。
图7给出了实验结果(均值为120,方差为40):虚线部分为标准高斯分布的曲线,实线部分为噪声直方图,验证了本方法的有效性。
3 精度讨论
该方法主要利用两个表:一个是循环产生均匀噪声的表;另一个是映射表。这两个表的数值都可以由前面介绍的方法计算,下面只讨论它们的精度取舍。
循环表中256个种子的精度要求与映射表的大小有直接关系,对映射表采用了8192(8K)个单元。因此循环表的任务就是要在区间[-4096,4096]内产生均匀分布的随机数。所以循环表中的种子序列x(1),…,x(256)在[-4096,4096]内均匀分布。为了方便计算,将种子序列的分布调整到[-(2115-1),(215-1)]之间,即X=215=32767。所以可以采用包含1位符号位共计16位来存储种子数的补码,这样可以通过丢掉进位的补码加法来实现模X加运算。补码运算结果的高13位或右移3位,可以直接作映射表的偏名地址进行后续查表操作,并且满足在[-4096,4096]内均匀分布。
考虑实际情况下,待求的高斯噪声分布的方差一般介于(0,100)之间,均值一般介于[-255,255]之间。而实际图像灰度值是以整数[0,255]形式存在,所以噪声的精度只要控制在整数范围内即可,映射表的精度只要达到0.0l就足够了。而映射表中数据的分布介于[-4.00,4.00]之间,若以整数形式存储,将原始数据乘以128后就完全可以存放在16位长度单元中。
也可以在此基础上对表进行修改,使得经过映射后高斯分布的均值和方差直接等于用户给定的均值u和方差σ。修改比较简单,将映射表中的每一个单元值y做如下替换:
y=(y*σ)>>7+u
此表中数据可以是原码形式也可以是补码形式具体需要而定。
《高斯随机噪声实时生成实现方法研究(第2页)》