Main Content

ssim

用于测量图像质量的结构相似性 (SSIM) 索引

说明

示例

ssimval = ssim(A,ref) 使用 ref 作为参考图像或三维体,计算灰度图像或三维体 A 的结构相似性 (SSIM) 索引。值越接近 1 表示图像质量越好。

ssimval = ssim(A,ref,Name,Value) 计算 SSIM,使用名称-值对组来控制计算的各个方面。

[ssimval,ssimmap] = ssim(___) 还返回 A 中每个像素或体素的局部 SSIM 值。

示例

全部折叠

将图像读入工作区。创建图像的另一个版本,应用模糊滤波器。

ref = imread("pout.tif");
H = fspecial("Gaussian",[11 11],1.5);
A = imfilter(ref,H,"replicate");

以蒙太奇方式显示两个图像。这些图像沿锐利的高对比度区域(如格架的边缘)差异最大。

montage({ref,A})
title("Reference Image (Left) vs. Blurred Image (Right)")

Figure contains an axes object. The axes object with title Reference Image (Left) vs. Blurred Image (Right) contains an object of type image.

计算图像的全局 SSIM 值和每个像素的局部 SSIM 值。

[ssimval,ssimmap] = ssim(A,ref);

显示局部 SSIM 图。在图窗标题中包含全局 SSIM 值。较小的局部 SSIM 值在局部 SSIM 图中显示为较暗的像素。局部 SSIM 值较小的区域对应于模糊图像明显不同于参考图像的区域。较大的局部 SSIM 值显示为较亮的像素。局部 SSIM 值较大的区域对应于参考图像中的均匀区域,对这种区域应用模糊对图像的影响较小。

imshow(ssimmap,[])
title("Local SSIM Map with Global SSIM Value: "+num2str(ssimval))

Figure contains an axes object. The axes object with title Local SSIM Map with Global SSIM Value: 0.94068 contains an object of type image.

将图像读入工作区。创建图像的另一个版本,应用模糊滤波器。

ref = imread("pout.tif");
A = imgaussfilt(ref,1.5,"FilterSize",11,"Padding","replicate");

以蒙太奇方式显示两个图像。

montage({ref A})
title("Reference Image (Left) vs. Blurred Image (Right)")

Figure contains an axes object. The axes object with title Reference Image (Left) vs. Blurred Image (Right) contains an object of type image.

通过沿第四个维度复制参考图像和模糊图像 16 次,对图像进行批量仿真。

A = repmat(A,[1 1 1 16]);
ref = repmat(ref,[1 1 1 16]);

为参考图像批量和模糊图像批量创建格式化的 dlarray 对象。空间-空间-通道-批量的格式为 "SSCB"。

A = dlarray(single(A),"SSCB"); 
ref = dlarray(single(ref),"SSCB");

计算图像的全局 SSIM 值和每个像素的局部 SSIM 值。ssimVal 为批量中的每个图像返回一个标量 SSIM 值。ssimMap 为批量中的每个图像返回与图像大小相同的 SSIM 值映射矩阵。

[ssimVal,ssimMap] = ssim(A,ref);
size(ssimVal)
ans = 1×4

     1     1     1    16

size(ssimMap)
ans = 1×4

   291   240     1    16

输入参数

全部折叠

用于质量度量的图像,指定为数值数组或 dlarray (Deep Learning Toolbox) 对象。如果 A 不是二维灰度图像或三维灰度图像体,如 RGB 图像或灰度图像堆叠,请指定 DataFormat 名称-值参数。如果 A 是格式化的 dlarray 对象,请不要指定 DataFormat 名称-值参数。

数据类型: single | double | int16 | uint8 | uint16

用于度量质量的参考图像,指定为数值数组或与 A 大小和数据类型相同的 dlarray (Deep Learning Toolbox) 对象。如果 ref 不是二维灰度图像或三维灰度图像体,如 RGB 图像或灰度图像堆叠,请指定 DataFormat 名称-值参数。如果 ref 是格式化的 dlarray 对象,请不要指定 DataFormat 名称-值参数。

数据类型: single | double | int16 | uint8 | uint16

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数后,但对各个参数对组的顺序没有要求。

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: ssim(A,ref,"DynamicRange",100)

输入图像 Aref 的维度标签,指定为字符串标量或字符向量。DataFormat 中的每个字符必须为以下标签之一:

  • S - 空间

  • C - 通道

  • B - 批量观测值

格式不能包含一个以上的通道标签或批量标签。当输入图像是格式化的 dlarray 对象时,请不要指定 DataFormat 名称-值参数。

示例: "SSC" 表示该数组具有两个空间维度和一个通道维度,适用于二维 RGB 图像数据。

示例: "SSCB" 表示该数组具有两个空间维度、一个通道维度和一个批量维度,适用于二维 RGB 图像数据序列。

数据类型: char | string

输入图像的动态范围,指定为正标量。"DynamicRange" 的默认值取决于图像 A 的数据类型,并计算为 diff(getrangefromclass(A))。例如,对于数据类型为 uint8 的图像,默认动态范围为 255,对于像素值在 [0, 1] 范围内的数据类型为 doublesingle 的图像,默认动态范围为 1

数据类型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

亮度、对比度和结构项的指数,指定为由 [alpha beta gamma] 形式的非负数组成的三元素向量。

数据类型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

各向同性高斯函数的标准差,指定为正数。此值用于对一个像素周围的邻域像素进行加权,以估计局部统计量。这种加权用于避免在估计局部统计量时出现块伪影。

数据类型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

亮度、对比度和结构项的正则化常量,指定为由 [c1 c2 c3] 形式的非负数组成的三元素向量。ssim 函数使用这些正则化常量来避免局部均值或标准差接近于零的图像区域的不稳定性。因此,这些常量应使用小的非零值。

默认情况下,

  • C1 = (0.01*L).^2,其中 L 是指定的 DynamicRange 值。

  • C2 = (0.03*L).^2,其中 L 是指定的 DynamicRange 值。

  • C3 = C2/2

数据类型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

输出参数

全部折叠

SSIM 索引,返回为下列值之一。

输入图像类型SSIM 值

  • 非格式化数值数组

  • 既没有通道维度 ("C") 也没有批量维度 ("B") 的格式化数值数组

具有单 SSIM 测量的数值标量。
  • 非格式化 dlarray (Deep Learning Toolbox) 对象

具有单 SSIM 测量的标量 dlarray 对象。

  • 使用 DataFormat 名称-值参数指定通道或批量维度的数值数组

与输入图像具有相同维度的数值数组。ssimval 的空间维度是单一维度。任何通道或批量维度上的每个元素都有一个 SSIM 测量。
  • 具有通道或批量维度的格式化 dlarray 对象

  • 使用 DataFormat 名称-值参数指定通道或批量维度的非格式化 dlarray 对象

与输入图像具有相同维度的 dlarray 对象。ssimval 的空间维度是单一维度。任何通道或批量维度上的每个元素都有一个 SSIM 测量。

ssimval 的数据类型为 double,除非 A 的数据类型为 single,在这种情况下,ssimval 的数据类型为 single

ssimval 的值通常在 [0, 1] 范围内。值 1 表示最高质量,当 Aref 等效时出现。值越小,质量越差。对于输入和名称-值对组参数的某些组合,ssimval 可以是负数。

SSIM 索引的局部值,返回为下列值之一。

输入图像类型SSIM 值

  • 非格式化数值数组

  • 既没有通道维度 ("C") 也没有批量维度 ("B") 的格式化数值数组

与输入图像大小相同的数值数组。输入图像中的每个元素都有一个对应的 SSIM 测量值。
  • 非格式化 dlarray (Deep Learning Toolbox) 对象

dlarray 对象与输入图像大小相同。输入图像中的每个元素都有一个对应的 SSIM 测量值。
  • 使用 DataFormat 名称-值参数指定通道或批量维度的数值数组

与输入图像大小相同的数值数组。输入图像中的每个空间元素在任何通道或批量维度上都有一个 SSIM 测量。
  • 具有通道或批量维度的格式化 dlarray 对象

  • 使用 DataFormat 名称-值参数指定通道或批量维度的非格式化 dlarray 对象

dlarray 对象与输入图像大小相同。输入图像中的每个空间元素在任何通道或批量维度上都有一个 SSIM 测量。

ssimmap 的数据类型为 double,除非 A 的数据类型为 single,在这种情况下,ssimmap 的数据类型为 single

详细信息

全部折叠

结构相似性索引

一种图像质量指标,用于评估图像三个特性的视觉效果:亮度、对比度和结构。

提示

  • 如果 Aref 指定 RGB 图像数据,请使用 "DataFormat" 名称-值参数来标注通道维度 "C"。然后,您可以对通道维度 ssimvalssimmap 应用 mean 函数来逼近整个图像的 SSIM 索引。

算法

SSIM 索引质量评估索引基于三个项的计算,即亮度项、对比度项和结构项。整体索引是三个项的乘法组合。

SSIM(x,y)=[l(x,y)]α[c(x,y)]β[s(x,y)]γ

其中

l(x,y)=2μxμy+C1μx2+μy2+C1,c(x,y)=2σxσy+C2σx2+σy2+C2,s(x,y)=σxy+C3σxσy+C3

其中,μx、μy、σx、σy 和 σxy 是图像 x, y 的局部均值、标准差和互协方差。如果 α = β = γ = 1(Exponents 的默认值),且 C3 = C2/2(C 3 的默认选择),则索引简化为:

SSIM(x,y)=(2μxμy+C1)(2σxy+C2)(μx2+μy2+C1)(σx2+σy2+C2)

当您为 "Exponents" 指定非整数值时,ssim 函数通过将中间亮度、对比度和结构项限制在 [0, inf] 范围内来防止复数值输出。

参考

[1] Zhou, W., A. C. Bovik, H. R. Sheikh, and E. P. Simoncelli. "Image Quality Assessment: From Error Visibility to Structural Similarity." IEEE Transactions on Image Processing. Vol. 13, Issue 4, April 2004, pp. 600–612.

扩展功能

版本历史记录

在 R2014a 中推出