opencv - OpenCV-高斯噪声

标签 opencv normalization gaussian noise

这是我的问题:我正在尝试创建一个简单的程序,将高斯噪声添加到输入图像。唯一的限制是输入图像的类型为CV_64F(即double),并且值必须且必须保持在0到1之间。

我编写的代码如下:

Mat my_noise;
my_ noise = Mat (input.size(), input.type());

randn(noise, 0, 5); //mean and variance

input += noise;

上面的代码不起作用,生成的图像无法正确显示。我认为发生这种情况是因为它超出了0,1范围。我修改了这样的代码:
Mat my_noise;
my_ noise = Mat (input.size(), input.type());

randn(noise, 0, 5); //mean and variance

input += noise;

normalize(input, input, 0.0, 1.0, CV_MINMAX, CV_64F);

但它仍然不起作用。同样,生成的图像无法正确显示。哪里有问题?请记住:输入图像的类型为CV_64F,并且在添加噪声之前将值归一化为0到1,并且必须像添加噪声之后一样保持不变。

先感谢您。

最佳答案

您的问题是高斯噪声可以具有任意幅度,并且不能用[0,1]表示。添加噪点后重新归一化是一个错误,因为只有一个较大的噪点值会影响整个图像。

可能需要做的是在添加噪点时使图像饱和,将大于1.0的值固定为1.0,将小于0.0的值固定为0.0。

就像是

cv::Mat noise(input.size(), input.type());
cv::randn(noise, 0, 5); //mean and variance
input += noise;

cv::Mat  clamp_1 = cv::Mat::ones(input.size(), input.type());
cv::Mat  clamp_0 = cv::Mat::zeros(input.size(), input.type());
input = cv::max(input, clamp_0);
input = cv::min(input, clamp_1);

同样,噪声方差5很大,这意味着假设输入均匀分布在[0,1]上,input + noise大约有92%的机会在[0,1]范围之外。因此,您的饱和图像将大部分为黑白图像,而输入图像对结果几乎没有影响。

关于opencv - OpenCV-高斯噪声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24581587/

相关文章:

C# 和 SQLServer 标准化大量 URL

python - 选择数据集中属于多元高斯分布的点

android - 没有 NEON 支持的 OpenCV4android armeabiv7 死于致命信号 4 (SIGILL)

python opencv在使用第三方摄像头时无法显示视频

python - opencv和spyder ipython控制台卡住

string - 使用 to_tsvector 和 to_tsquery 过滤非罗马字符

php - Mysql 和 PHP 字符串比较 - Unicode 规范化?

python - curve_fit 似乎无法拟合高斯总和

大量高斯混合模型的MATLAB代码

c - 使用 Go 和 OpenCV 读取/写入图像中的 ICC 配置文件