如何计算柯西噪声去噪后图像的PSNR值?代码计算结果异常求解
柯西噪声去噪代码PSNR异常问题修复
- 复现柯西噪声去除论文代码时,噪声图像PSNR计算结果为19,与论文数据一致
- 恢复图像
un的PSNR仅为17,低于噪声图像,经排查存在以下可修复问题:
核心问题
MATLAB内置psnr函数要求第一个输入参数为原始参考图像,第二个为待评估图像,你代码末尾计算恢复图像PSNR时参数顺序写反,是PSNR异常的直接原因:
% 错误写法 PSNR_restoredimage = psnr(New_un,refimg) % 正确写法 PSNR_restoredimage = psnr(refimg,New_un)
其他影响结果的错误点
- 变量未定义:初始化部分
pxn = zeros(ny,nx);中的ny、nx未提前赋值,若工作区存在历史残留变量会导致计算逻辑异常,需要补全定义:
[mm,nn]=size(refimg); ny = mm; nx = nn; % 新增该行定义尺寸参数 img_height = size(refimg,1); img_width = size(refimg,2);
- 像素值范围未约束:迭代过程中
un的像素值可能超出[0,1]的合法图像取值范围,取消对应行注释即可:
un = un+tau*(Asqk-div(pxn,pyn,options)); % the restored image un = min(1,max(0,un)); % 取消注释,将像素值约束到合法范围
- 终止条件转义字符错误:代码中
<是HTML转义字符,实际运行要改为<,避免迭代未收敛就提前终止:
if (norm(un-uold, 'fro')/norm(uold,'fro')<tol) break; end
完成以上调整后,恢复图像的PSNR会回到正常高于噪声图像的水平,可匹配论文给出的结果。
内容的提问来源于stack exchange,提问作者eli
相关产品推荐
相关产品推荐

