1. randn()
首先来说一下randn()这个函数,它是默认产生一个期望为0,标准差为1的正态分布,具体生成的是向量还是矩阵都是自行控制,比如下面这样可以产生一个期望为1,标准差为2的正态分布矩阵:
r=1+2.*randn(2,2)
r =
-1.0327 0.2521
1.0459 -0.7869
于是下面我们可以用randn()给图像添加均值为0,标准差为10,方差为100的高斯白噪声了:
origImg = imread(‘Lena.bmp’);
figure, imshow(origImg,[])
% 关于此处用double的解释:原图是uint8格式的数据,而randn函数生成的是float类
% 型的数据,因此要进行数据类型转换
distImg = double(origImg) + 10*randn(size(origImg));
figure, imshow(distImg,[])
noise = distImg - double(origImg);
figure,imshow(noise,[])
var = var(double(noise(😃)) % 方差
std = std2(noise) % 标准差
mean = mean2(noise) % 二维数组的均值
var =
101.0287
std =
10.0513
mean =
-0.0105
可以看到,所求出来的基本符合预期了。
2. wgn()
官方文档是这样写的: