Image 图像中加法和测量信噪比的差异

Image 图像中加法和测量信噪比的差异,image,matlab,image-processing,noise,Image,Matlab,Image Processing,Noise,我正试图根据以下步骤在matlab中为图像添加5dB的噪声 SNR = 5; Im = double(Io) / 255; vm = var(Im(:)) / 10^(SNR/10); I_my_noisy = imnoise(Im, 'gaussian', 0, vm); 但是当我用matlab命令测量信噪比时 [peaksnr,snr] = psnr(I_my_noisy, Im) 我得到的信噪比等于10。 那么,我的代码出了什么问题?为什么结果与我的添加数据库不同?如果您这样做: Er

我正试图根据以下步骤在matlab中为图像添加5dB的噪声

SNR = 5;
Im = double(Io) / 255;
vm = var(Im(:)) / 10^(SNR/10);
I_my_noisy = imnoise(Im, 'gaussian', 0, vm);
但是当我用matlab命令测量信噪比时

[peaksnr,snr] = psnr(I_my_noisy, Im)
我得到的信噪比等于10。 那么,我的代码出了什么问题?为什么结果与我的添加数据库不同?

如果您这样做:

Error = I_my_noisy - Im;
SNR = 10*log10(var(Im(:))/var(Error(:)));
您将获得一开始设置的信噪比。问题是,它与您使用
psnr
计算的信噪比不同。不同之处在于函数
psnr
测量信噪比的方式

如果您看到
psnr
的源代码,您将看到这两行代码:

err = immse(A,ref);
snr = 10*log10(mean(ref(:).^2)/err);
在您的例子中,
immse(A,ref)
相当于
var(Error(:)
,因为噪声是具有零均值的高斯噪声。但是
mean(ref(:).^2)
var(Im(:)
不同,因为
Im
没有零均值,所以此操作不等于方差

这就是为什么你没有得到你期望的价值

编辑:


无论如何,SNR的正确形式是在
psnr
函数中测量的,因为SNR测量信号和噪声之间的功率比,其计算方法是通过
mean(ref(:).^2)

我不理解公式
var(Im(:)
的这一部分。为什么你的噪音取决于图像的变化?我依赖于这个网站的以下帖子,谢谢你@dubafek的帮助回答。我测试了你的公式,正如你所说,我很喜欢设置答案,但根据你的最后一段,你建议我使用matlab函数psnr,因为它更准确地测量噪声。@serwan bamerni我的意思是使用
mean(Im(:).^2)
var(Im(:)更好
因为se第一个测量信号的功率。可以找到信噪比的定义。请注意,如果除以元素数,则得到使用的表达式
psnr