Image 图像中加法和测量信噪比的差异
我正试图根据以下步骤在matlab中为图像添加5dB的噪声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
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