MATLAB 帮助中心
峰值信噪比 (PSNR)
peaksnr = psnr(A,ref)
peaksnr = psnr(A,ref,peakval)
peaksnr = psnr(___,'DataFormat',dataFormat)
[peaksnr,snr] = psnr(___)
peaksnr = psnr(A,ref) 以图像 ref 为参考,计算图像 A 的峰值信噪比 (PSNR)。PSNR 值越大,表示图像质量越好。
peaksnr
A
ref
示例
peaksnr = psnr(A,ref,peakval) 使用峰值信号值 peakval 计算图像 A 的 PSNR。
peakval
peaksnr = psnr(___,'DataFormat',dataFormat) 还指定未格式化图像数据的维度标签 dataFormat。使用此语法为沿一个批量维度的每个元素返回一个单独的 PSNR。
dataFormat
[peaksnr,snr] = psnr(___) 还返回简单信噪比 snr。
snr
全部折叠
读取图像并创建一个添加了噪声的副本。原始图像作为参考图像。
ref = imread('pout.tif'); A = imnoise(ref,'salt & pepper', 0.02);
计算 PSNR。
[peaksnr, snr] = psnr(A, ref); fprintf('\n The Peak-SNR value is %0.4f', peaksnr);
The Peak-SNR value is 22.6437
fprintf('\n The SNR value is %0.4f \n', snr);
The SNR value is 15.5524
dlarray
将一个图像读入工作区中,然后使用图像数据创建一个非格式化的 dlarray 对象。
ref = imread("strawberries.jpg"); ref = im2single(ref); dlref = dlarray(ref);
向该图像添加椒盐噪声,然后使用含噪图像数据创建一个非格式化的 dlarray 对象。
noisy = imnoise(ref,'salt & pepper'); dlnoisy = dlarray(noisy);
计算含噪数据相对于原始数据的峰值 SNR 和 SNR。
[peaksnr,snr] = psnr(dlnoisy,dlref)
peaksnr = 1×1 single dlarray 17.5941
snr = 1×1 single dlarray 11.1265
将一个参考图像读入工作区中。
ref = imread("office_1.jpg");
预分配两个数组,用于存储与参考图像大小相同的六个图像组成的一个序列。
numFrames = 6; imsOriginal = zeros([size(ref) numFrames],class(ref)); imsNoisy = zeros([size(ref) numFrames],class(ref));
读取图像并将其添加到预分配的数组中。一个数组存储原始图像数据。另一个数组存储添加了椒盐噪声的图像数据。
for p = 1:numFrames filename = strcat("office_",num2str(p),".jpg"); im = imread(filename); imsOriginal(:,:,:,p) = im; imsNoisy(:,:,:,p) = imnoise(im,"salt & pepper"); end
以蒙太奇方式显示图像序列。第一行显示具有原始图像数据的序列。第二行显示具有含噪图像数据的序列。
montage(cat(4,imsOriginal,imsNoisy),"Size",[2 numFrames])
通过将输入数组的数据格式指定为 "SSCB"(空间、空间、通道、批量),计算每个含噪图像相对于对应原始图像的 PSNR。
peak_psnrs = psnr(imsNoisy,imsOriginal,"DataFormat","SSCB"); peak_psnrs = squeeze(peak_psnrs)
peak_psnrs = 6×1 16.3560 16.9698 17.8079 18.1843 18.0656 17.1682
要分析的图像,指定为任意维度的数值数组或 dlarray (Deep Learning Toolbox) 对象。
数据类型: single | double | int16 | uint8 | uint16
single
double
int16
uint8
uint16
参考图像,指定为数值数组或 dlarray (Deep Learning Toolbox) 对象。参考图像与图像 A 具有相同的大小和数据类型。
峰值信号级别,指定为非负数。如果未指定,则 peakval 的默认值取决于 A 和 ref 的类。
如果图像的数据类型为 double 或 single,则 psnr 假定图像数据在范围 [0, 1] 内。peakval 的默认值为 1。
psnr
1
如果图像是整数数据类型,则 peakval 的默认值是该类的范围所允许的最大值。对于 uint8 数据,peakval 的默认值为 255。对于 uint16 或 int16,默认值为 65535。
255
65535
输入图像 A 和 ref 的维度标签,指定为字符串标量或字符向量。dataFormat 中的每个字符必须为以下标签之一:
S - 空间
S
C - 通道
C
B - 批量观测值
B
格式不能包含一个以上的通道标签或批量标签。当输入图像是格式化的 dlarray 对象时,请不要指定 'dataFormat' 参量。
示例: 'SSC' 表示该数组具有两个空间维度和一个通道维度,适用于二维 RGB 图像数据。
'SSC'
示例: 'SSCB' 表示该数组具有两个空间维度、一个通道维度和一个批量维度,适用于二维 RGB 图像数据序列。
'SSCB'
以分贝为单位的 PSNR,以下列值之一形式返回。
非格式化数值数组
不带批量维度 ('B') 的格式化数值数组
'B'
非格式化 dlarray (Deep Learning Toolbox) 对象
使用 dataFormat 参量指定批量维度的数值数组
具有批量维度的格式化 dlarray 对象
使用 dataFormat 参量指定批量维度的非格式化 dlarray 对象
如果 A 和 ref 的数据类型为 single,则 peaksnr 的数据类型为 single。否则,peaksnr 的数据类型为 double。
以分贝为单位的信噪比,以下列值之一形式返回。
如果 A 和 ref 的数据类型为 single,则 snr 的数据类型为 single。否则,snr 的数据类型为 double。
psnr 函数通过以下方程来计算 PSNR:
PSNR=10log10(peakval2/MSE)
peakval 由用户指定或取自图像数据类型的范围。例如,对于数据类型为 uint8 的图像,peakval 是 255。MSE 是 A 和 ref 之间的均方误差。
全部展开
psnr 支持 C 和 C++ 代码生成(需要 MATLAB® Coder™)。有关详细信息,请参阅图像处理的代码生成。
此函数完全支持 GPU 数组。有关详细信息,请参阅GPU 上的图像处理。
psnr 函数现在接受深度学习应用程序的 dlarray 输入。
此函数还支持维度标签为 'S'(空间)、'C'(通道)和 'B'(批量)的格式化数据。对于具有批量维度的数据,该函数为沿批量维度的每个索引返回一个单独的结果。
'S'
'C'
psnr 现在支持 GPU 加速(需要 Parallel Computing Toolbox™)。
multissim | multissim3 | ssim | immse | mean | median | var
multissim
multissim3
ssim
immse
mean
median
var
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
欧洲
亚太
联系您当地的办事处