图像峰值信噪比计算

Matlab代码如下

function S=PSNR(s,t)

[m,n,~]=size(s);
s=im2uint8(mat2gray(s));
t=im2uint8(mat2gray(t));
s=double(s);
t=double(t);

sd=0;
mi=m*n*max(max(s.^2));
for u=1:n
    for v=1:n
        sd=sd+(s(u,v)-t(u,v))^2;
    end
end
if sd==0
    sd=1;
end
S=mi/sd;
S=10*log10(S);
### 实现PSNR计算的Matlab代码 #### 使用内置函数 `psnr` 对于图像质量评估,峰值信噪比(Peak Signal-to-Noise Ratio, PSNR)是一个常用的度量标准。在Matlab中可以直接调用`psnr`函数来简化这一过程[^1]。 ```matlab % 加载原始图像和含噪声图像 originalImage = imread('original_image.png'); noisyImage = imread('noisy_image.png'); % 将图像数据转换为双精度浮点数类型以便于运算 originalDouble = im2double(originalImage); noisyDouble = im2double(noisyImage); % 调用psnr函数并显示结果 peakSNR = psnr(noisyDouble, originalDouble); fprintf('The Peak SNR is %0.4f dB.\n', peakSNR); ``` 上述代码展示了如何利用Matlab自带的功能快速获取两张图片间的PSNR值。这里假设已经存在名为`original_image.png`的清晰版以及对应的带有噪音版本`noisy_image.png`。 #### 手动编写PSNR计算逻辑 如果希望更深入理解其背后的原理,则可以通过手动编码方式实现: ```matlab function snrValue = custom_psnr(img1, img2) mse = mean((img1(:) - img2(:)).^2); % 均方误差 Mean Squared Error if(mse == 0) error('Images are identical!'); end maxPixel = max([max(img1(:)), max(img2(:))]); snrValue = 20 * log10(maxPixel / sqrt(mse)); end % 测试自定义函数 testOriginal = double(imread('original_image.png')); testNoisy = double(imread('noisy_image.png')); result = custom_psnr(testOriginal, testNoisy); disp(['Custom PSNR result:', num2str(result)]); ``` 这段脚本首先定义了一个新的函数`custom_psnr()`用于接收两个参数即待比较的一对灰度图或彩色图矩阵;接着通过均方差公式求解两者的差异程度,并据此推导出最终的结果。注意这里的最大像素值选取的是两者之中较大的那个以确保准确性[^3]。 当涉及到RGB色彩空间内的多通道影像时,通常会对各分量单独处理后再取平均值得到整体评价分数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值