Mat& addPoissonNoiseIntoImage(Mat& src){
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
static Mat noisyImg = src.clone();
std::default_random_engine generator (seed);
std::vector<float> uniqueValsOfMat = BasicAlgo::getInstance()->uniqueValuesInMat(src);
unsigned long int val = uniqueValsOfMat.size();
float vals = pow(2, (ceil(log2(val))));
for(int i = 0; i < src.rows; i++)
{
for(int j = 0; j < src.cols; j++){
float pixelVal = (double)(src.at<uchar>(i,j));
pixelVal = pixelVal * vals;
std::poisson_distribution<int> distribution (pixelVal);
float generatedVal = distribution(generator) / float(vals);
noisyImg.at<uchar>(i,j) = generatedVal;
}
}
return noisyImg;
}
Mat& addSpeckleNoiseIntoImage(Mat& src, float mean, float std ){
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
static Mat noisyImg = src.clone();
std::default_random_engine generator (seed);
std::normal_distribution<double> distribution (mean,std);
for(int i = 0; i < src.rows; i++)
{
for(int j = 0; j < src.cols; j++){
float pixelVal = (double)(src.at<uchar>(i,j));
while(true){
float vals = distribution(generator);
pixelVal = pixelVal + pixelVal * vals;
if( (pixelVal > 0) && (pixelVal < 256) )
break; // you got the right pixel value, so break
}
noisyImg.at<uchar>(i,j) = pixelVal;
}
}
return noisyImg;
}
要在Mat中查找唯一值:
^{pr2}$我不确定生成泊松和散斑噪声的代码是否正确。请看一下。在
目前没有回答
相关问题 更多 >
编程相关推荐