psnr
峰值信噪比 (PSNR)
语法
说明
示例
给定原始图像作为参考,计算含噪图像的 PSNR
读取图像并创建一个添加了噪声的副本。原始图像作为参考图像。
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
输入的 PSNR
将一个图像读入工作区中,然后使用图像数据创建一个非格式化的 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 = 1x1 single dlarray 17.5941
snr = 1x1 single dlarray 11.1265
计算图像序列中图像的 PSNR
将一个参考图像读入工作区中。
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
输入参数
A
— 要分析的图像
数值数组 | dlarray
对象
要分析的图像,指定为任意维度的数值数组或 dlarray
(Deep Learning Toolbox) 对象。
数据类型: single
| double
| int16
| uint8
| uint16
输出参量
peaksnr
— PSNR
数值标量 | 数值数组 | dlarray
对象
以分贝为单位的 PSNR,以下列值之一形式返回。
输入图像类型 | PSNR 值 |
---|---|
| 具有单一 PSNR 测量值的数值标量。 |
| 具有单一 PSNR 测量值的 1×1 dlarray 对象。 |
| 与输入图像具有相同维度的数值数组。peaksnr 的空间维度和通道维度是单一维度。沿批量维度的每个元素都有一个 PSNR 测量值。 |
| 与输入图像具有相同维度的 dlarray 对象。peaksnr 的空间维度和通道维度是单一维度。沿批量维度的每个元素都有一个 PSNR 测量值。 |
如果 A
和 ref
的数据类型为 single
,则 peaksnr
的数据类型为 single
。否则,peaksnr
的数据类型为 double
。
snr
— 信噪比
数值标量 | 数值数组 | dlarray
对象
以分贝为单位的信噪比,以下列值之一形式返回。
输入图像类型 | PSNR 值 |
---|---|
| 具有单一 SNR 测量值的数值标量。 |
| 具有单一 SNR 测量值的 1×1 dlarray 对象。 |
| 与输入图像具有相同维度的数值数组。snr 的空间维度和通道维度是单一维度。沿批量维度的每个元素都有一个 SNR 测量值。 |
| 与输入图像具有相同维度的 dlarray 对象。peaksnr 的空间维度和通道维度是单一维度。沿批量维度的每个元素都有一个 SNR 测量值。 |
如果 A
和 ref
的数据类型为 single
,则 snr
的数据类型为 single
。否则,snr
的数据类型为 double
。
算法
psnr
函数通过以下方程来计算 PSNR:
peakval
由用户指定或取自图像数据类型的范围。例如,对于数据类型为 uint8
的图像,peakval
是 255
。MSE 是 A
和 ref
之间的均方误差。
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
psnr
支持 C 代码生成(需要 MATLAB® Coder™)。有关详细信息,请参阅图像处理的代码生成。
GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
此函数完全支持 GPU 数组。有关详细信息,请参阅GPU 上的图像处理。
版本历史记录
在 R2014a 中推出R2021a: 计算深度学习数组的度量并指定计算的维度
psnr
函数现在接受深度学习应用程序的 dlarray
输入。
此函数还支持维度标签为 'S'
(空间)、'C'
(通道)和 'B'
(批量)的格式化数据。对于具有批量维度的数据,该函数为沿批量维度的每个索引返回一个单独的结果。
R2021a: 支持 GPU 加速
psnr
现在支持 GPU 加速(需要 Parallel Computing Toolbox™)。
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)