最近交了数图作业,mark一下。
1.添加高斯噪声
1.1 概率密度函数
σ为z的标准差,z为均值,用E。
1.2 生成高斯分布随机数序列
方法由Marsaglia和Bray在1964年提出,C++版本如下: mu是均值,sigma是方差,X服从N(0,1)分布
double generateGaussianNoise(double mu, double sigma)
{
static double V1, V2, S;
static int phase = 0;
double X;
double U1,U2;
if ( phase == 0 ) {
do {
U1 = (double)rand() / RAND_MAX;
U2 = (double)rand() / RAND_MAX;
V1 = 2 * U1 - 1;
V2 = 2 * U2 - 1;
S = V1 * V1 + V2 * V2;
} while(S >= 1 || S == 0);
X = V1 * sqrt(-2 * log(S) / S);
} else{
X = V2 * sqrt(-2 * log(S) / S);
}
phase = 1 - phase;
return mu+sigma*X;
}
1.3 添加高斯噪声
高斯噪声为加性噪声,在原图的基础上加上噪声即为加噪后的图象。
代码如下:
void AddNoise(Mat img,double mu, double sigma,int k){
Mat outImage;
outImage.create(img.rows,img.cols,img.type());
for(int x=0;x<img.rows;x++){
for(int y=0;y<img.cols;y++){
double temp = img.at<uchar>(x, y)
+k*generateGaussianNoise(mu,sigma);
if(temp>PixcelMax)
temp=PixcelMax;
else if(temp&