Part One :图像加噪原理
1. 对于椒盐噪声(Salt And Pepper Noise)
椒盐噪声是一种由于信号脉冲强度引起的噪声。信噪比(Signal Noise Rate)是衡量图像噪声的一个数字指标。
给一副数字图像加上椒盐噪声的处理顺序应该例如以下:
- 指定信噪比 SNR 其取值范围在[0, 1]之间
- 计算总像素数目 SP。 得到要加噪的像素数目 NP = SP * (1-SNR)
- 随机获取要加噪的每一个像素位置P(i, j)
- 指定像素值为255或者0。
- 反复c, d两个步骤完毕全部像素的NP个像素
- 输出加噪以后的图像
增加白色椒盐噪声的图片
2. 对于高斯噪声(Gaussian Noise)
高斯噪声的密度取决于公式G(x, sigma) 当中X是代表平均值,sigma代表的标准方差,每一个输入像素 Pin,
一个正常的高斯採样分布公式G(d), 得到输出像素Pout.
Pout = Pin + XMeans + sigma *G(d)
当中d为一个线性的随机数,G(d)是随机数的高斯分布随机值。
给一副数字图像加上高斯噪声的处理顺序例如以下:
a. 输入參数sigam 和 X mean
b. 以系统时间为种子产生一个伪随机数
c. 将伪随机数带入G(d)得到高斯随机数
d. 依据输入像素计算出输出像素
e. 又一次将像素值防缩在[0 ~ 255]之间
f. 循环全部像素
g. 输出图像
增加白色椒盐噪声的图片
二:关键程序解析
1. 椒盐噪声
依据信噪比,获取要增加椒盐噪声的像素数目
int size= (int)(inPixels.length * (1-SNR));
随机得到像素,完毕椒盐噪声的增加
for(int i=0; i<size; i++) {
int row = (int)(Math.random()* (double)height);
int col = (int)(Math.random()* (double)width);
index= row * width + col;
inPixels[index]= (255 << 24) | (255 << 16) | (255 << 8) | 255;
}
2. 高斯噪声
依据标准方差,和伪随机数的范围,首先计算出一个伪随机数d ,依据d得到高斯分布的随机数值,整个代码例如以下:
float d = (float)Math.random()*RANDOM_SCOPE - RANDOM_SCOPE/2;
float sigma2 = sigma*sigma*2;
float PI2 = (float)Math.PI * 2;
float sigmaPI2 = (float)Math.sqrt(PI2*sigma);
float result = (float)Math.exp(-d/sigma2)/sigmaPI2;
伪随机数的范围为[-127~ 127]之间。
获取高斯噪声的像素代码例如以下:
tr = (int)((float)tr + getGaussianValue() + this.means);
tg = (int)((float)tg + getGaussianValue() + this.means);
tb = (int)((float)tb + getGaussianValue() + this.means);
mean是的值为0.
图像噪声源于现实世界中数字信号总会受到各种各样的干扰。终于接受的图像和源于的数字信号之间总是存在一定的差异,对于图像噪声,使用均值滤波和中值滤波来消除图像噪声的做法已经是非经常见的图像消噪手段。