matlab给图像加高斯白噪声SNR

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()
官方文档是这样写的:
y = wgn(m,n,power) generates an m-by-n matrix of white Gaussian noise. power specifies the power of y in decibels relative to a watt. The default load impedance is 1 ohm.
然后附加了一个例子:

% Generate a 1000-element column vector
% containing real white Gaussian noise of power 0 dBW.
y1 = wgn(1000,1,0);
% Confirm that the power is approximately 0 dBW, that is, 1 W.
var(y1)
ans = 0.9979

从上面的例子我们可以明白过来,其实产生的噪声的方差就是第三个参数的值,只不过在代码中要将其按照分贝(dB)来设置。我们常见的分贝是度量声音强度的单位。其转换公式为P(dB)=10lgP(W)。于是有了:
y = wgn(m,n,p) 产生一个m行n列的高斯白噪声的矩阵,p以dBW为单位指定输出噪声的强度(方差)。
同理,将上述添加噪声那句代码改为:

distImg=double(origImg) + wgn(size(origImg,1),size(origImg,2),20);
1
即可得到:

var =
99.7863

std =
9.9893

mean =
0.0065

也是符合要求的。

原文:https://blog.csdn.net/liuyingying0418/article/details/79432962?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allfirst_rank_v2~rank_v25-1-79432962.nonecase

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值