如何正确地给图像添加高斯噪声

高斯噪声是一个均值为 0 方差为 \(\sigma_n^2\) 的正态分布,是一个加性噪声。但要正确地给图片添加高斯噪声,还要取决于程序中读入图片的数据格式。

如果图片的数据格式为 uint8,也即数据的范围为 [0, 255],那么直接生成对应方差的噪声,然后加到图片上去。

# clean_image uint8 (128, 128)
noise_image = clean_image + np.random.rand(128, 128) * sigma

此处 np.random.rand(128, 128) 生成一个均值为 0 方差为 1 的正态分布,然后我们乘以 \(\sigma_n\),将方差调整到 \(\sigma_n^2\),再加到图片上即可。

如果图片的数据格式为浮点型,而且数据的范围为 [0, 1],那么我们需要对噪声的方差做一些调整,真正加到图片上的噪声方差应该为 \(\sigma_{real}^2 = \frac{\sigma_n^2}{255^2}\),也即 \(\sigma_{real} = \frac{\sigma_n}{255}\)。

# clean_image float32 (128, 128)
noise_image = clean_image + np.random.rand(128, 128) * sigma / 255

此处 np.random.rand(128, 128) 生成一个均值为 0 方差为 1 的正态分布,然后我们乘以 \(\sigma_n / 255\),将真实方差调整到 \(\sigma_n^2\),再加到图片上即可。

在 MATLAB 中,imnoise 会对图片进行处理,将像素值缩放到 [0, 1] 之间,因此我们在传入方差的时候也必须要先进行调整。

noise_image = imnoise(clean_image, ‘gaussian‘, 0, sigma^2/255^2)

有时候,我们真的需要对知识抱有敬畏之心,任何一个小的知识点都没有那么简单。但如果你在这些小的知识点上犯了小错误,后果却是不可想象的。千里之堤毁于蚁穴,与君共勉!

获取更多精彩,请关注「seniusen」!

原文地址:https://www.cnblogs.com/seniusen/p/10017559.html

时间: 2024-10-11 12:30:30

如何正确地给图像添加高斯噪声的相关文章

利用matlab给图像加高斯噪声

I = imread('DSC_0034.JPG'); J = imnoise(I,'gaussian',0.20); figure, imshow(I), figure, imshow(J) 利用matlab给图像加高斯噪声

给一幅图像添加椒盐噪声

2015-06-05 知识点: (1)像素值的存储 (2)引用的参数传递方式 (3)单通道和三通道图像像素访问的区别 代码如下: 1 #include "highgui.h" 2 #include "cxcore.h" 3 #include "cv.h" 4 #include "cmath" 5 6 void salt(cv::Mat &, int ); 7 8 9 int main() 10 { 11 cv::Mat

【OpenCV】给图像添加噪声

图像噪声使图像在获取或是传输过程中收到随机信号干扰,妨碍人们对图像理解及分析处理的信号.很多时候将图像噪声看做多维随机过程,因而描述噪声的方法完全可以借用随机过程的描述,也就是使用随机过程的描述,也就是用它的高绿分布函数和概率密度分布函数.图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量,图像在传输过程中产生图像噪声的主要因素是所用的传输信道收到了噪声的污染. 下面简单介绍两种图像噪声,即椒盐噪声和高斯噪声. 1.椒盐噪声 椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种

数学之路-python计算实战(7)-机器视觉-图像产生加性零均值高斯噪声

图像产生加性零均值高斯噪声,在灰度图上加上噪声,加上噪声的方式是每个点的灰度值加上一个噪声值,噪声值的产生方式为Box-Muller算法生成高斯噪声. 在计算机模拟中,经常需要生成正态分布的数值.最基本的一个方法是使用标准的正态累积分布函数的反函数.除此之外还有其他更加高效的方法,Box-Muller变换就是其中之一.另一个更加快捷的方法是ziggurat算法.下面将介绍这两种方法.一个简单可行的并且容易编程的方法是:求12个在(0,1)上均匀分布的和,然后减6(12的一半).这种方法可以用在很

图像处理之噪声---椒盐,白噪声,高斯噪声三种不同噪声的区别

白噪声是指功率谱密度在整个频域内均匀分布的噪声. 所有频率具有相同能量的随机噪声称为白噪声.白噪声或白杂讯,是一种功率频谱密度为常数的随机信号或随机过程.换句话说,此信号在各个频段上的功率是一样的,由于白光是由各种频率(颜色)的单色光混合而成,因而此信号的这种具有平坦功率谱的性质被称作是“白色的”,此信号也因此被称作白噪声.相对的,其他不具有这一性质的噪声信号被称为有色噪声. 而理想的白噪声具有无限带宽,因而其能量是无限大,这在现实世界是不可能存在的.实际上,我们常常将有限带宽的平整讯号视为白噪

小小知识点(二十三)circularly symmetric complex zero-mean white Gaussian noise(循环对称复高斯噪声)

数学定义 http://en.wikipedia.org/wiki/Complex_normal_distribution 通信中的定义 在通信里,复基带等效系统的噪声是复高斯噪声,其分布就是circularly symmetric complex Gaussian.你可以理解为我们通常意义的噪声,因为不是circularly symmetric的高斯噪声我们在通信里从来不用考虑. 下面是产生m行n列的 CN(0, sigma^2)噪声(randn(m,n)+1i*randn(m,n))*sig

OpenCV特征点检测匹配图像-----添加包围盒

最终效果: 其实这个小功能非常有用,甚至加上只有给人感觉好像人脸检测,目标检测直接成了demo了,主要代码如下: // localize the object std::vector<Point2f> obj; std::vector<Point2f> scene; for (size_t i = 0; i < good_matches.size(); ++i) { // get the keypoints from the good matches obj.push_bac

[Android] 给图像添加相框、圆形圆角显示图片、图像合成知识

    前一篇文章讲述了Android触屏setOnTouchListener实现突破缩放.移动.绘制和添加水印,继续我的"随手拍"项目完成给图片添加相框.圆形圆角显示图片和图像合成的功能介绍.希望文章对大家有所帮助. 一. 打开图片和显示assets文件中图片 首先,对XML中activity_main.xml进行布局,通过使用RelativeLayout相对布局完成(XML代码后面附).然后,在Mainctivity.java中public class MainActivity e

如何正确在Xcode7中添加启动图

1.在images.xcassets文件中,右击创建一个LaunchImage文件 2.点开工程名称,来到下图所在位置 3.把Launch Images Source 右边的改为图下 4.从右边小箭头可以直接跳转到images.xcassets页面,在把你的启动图片添加到LaunchImage文件中 5.所用版本Xcode 7.1