我试图按照以下步骤将5dB的噪声添加到matlab中的图像中
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。那么,我的代码有什么问题?为什么结果与我的add dB不同?
发布于 2016-02-16 07:03:48
如果你这样做了:
Error = I_my_noisy - Im;
SNR = 10*log10(var(Im(:))/var(Error(:)));你会得到你刚开始设置的信噪比。问题是,你用psnr计算的信噪比是不同的。不同的是函数psnr测量信噪比的方式。
如果您看到psnr的源代码,您将看到以下2行:
err = immse(A,ref);
snr = 10*log10(mean(ref(:).^2)/err);在您的例子中,immse(A,ref)等同于var(Error(:)),因为噪声是高斯的,均值为零。但是mean(ref(:).^2)和var(Im(:))不一样,因为Im没有零均值,所以这个运算不等于方差。
这就是为什么你没有得到你所期望的价值。
编辑:
无论如何,信噪比的正确形式是在psnr函数中测量的信噪比,因为信噪比测量的是信噪比和噪声的功率比,计算方法是用mean(ref(:).^2)进行计算。
https://stackoverflow.com/questions/35398709
复制相似问题