之前有做过在图像上加高斯噪声的实验,在模拟生成随机数,以及产生高斯分布噪声时,受到了一些干扰。尤其是和高斯模糊相混淆。对于初学者来说,这些虽然是一些基本的图像处理知识,但是,眼高手低是很要不得的。只有积累足够了,才能游刃有余。因为我也是新手,希望不断的积累。
在网上有很多介绍高斯噪声的,有的是抄的,有的很随意的罗列一点公式,有的没有说明怎么做,这一点很烦。因为综述性的东西一搜一大堆,没必要再搞了。这就不是搞知识了。知识要让别人易懂,而不是搞的很玄乎,显得自己很有水平。相反,我觉得,把问题说明白了,才能让别人懂。尤其是对于程序员来说,不可能还要仔细推理,揣摩你的意思。
高斯模糊
高斯模糊实际上就和均值处理,中值处理相似。就是先产生一个高斯核,用这个高斯核模板去滑动处理图像的每个像素就行了。一个典型的二维高斯核模板是:
[1/16 1/8 1/16; 1/8 1/4 1/8; 1/16 1/8 1/16 ]
这个是3*3的模板。大致给个公式说明一下怎么模糊:
F(x,y)= 1/16 * f(x-1,y-1) + 1/8 * f(x-1,y) + 1/16*f(x-1,y+1) +
1/8 * f(x,y-1) + 1/4 * f(x,y) + 1/8*f(x,y+1) +
1/16 * f(x+1,y-1) + 1/8 * f(x+1,y) + 1/16*f(x+1,y+1)
F(x,y)是新生成图像在(x,y)位置的灰度值,f(x-1,y-1) 到f(x+1,y+1)是以(x,y)为中心的图像灰度值。
高斯噪声
高斯噪声和高斯模糊是很不一样的。假设一幅图像 I,图像中每个像素的灰度值为I(x, y). 对图像加高斯噪声实际上就是对图像的灰度值操作。加性高斯噪声的数学公式为:
G(x,y) = f(x,y) + n(x,y);
关键的问题是如何产生这个n(x,y)。高斯分布概率密度的数学表达式为:
至于这个详细的解释就不说了。通过整理,大致说一下怎么生成这个n(x,y)。这个生成的方法跟上面的公式在表面上相差比较大。
具体步骤:(均值为m,方差为σ)
1).首先生成两个随机数a 和 b,大致公式为:
Xi = (X(i-1) *A + C)%M
X(i-1)是前一个值,A,C,M是常数。可以用系统时间来得到这个X(i-1)=YY/MM/DD, 然后取小数点后第一位。可以根据需要自己定算法。反正都是伪随机。
2) 根据box-muller算法得到下面的具有高斯分布性质的两个数:
N = sqrt(-2*ln(a)) cos(2*PI*b)
或者
N = sqrt(-2*ln(a)) sin(2*PI*b)
3) 图像加噪声:
F(x,y) = f(x,y) + (m + N * σ)
代码什么的就不贴了,很简单的。至于具体随机数怎么生成,可以再看看其他博客。这个只是一个参考。毕竟真正的随机数是很难搞的。
欢迎关注公众号