当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.image.ssim用法及代码示例


计算 img1 和 img2 之间的 SSIM 索引。

用法

tf.image.ssim(
    img1, img2, max_val, filter_size=11, filter_sigma=1.5, k1=0.01, k2=0.03
)

参数

  • img1 第一个图像批次。形状为 [batch, height, width, channels] 的 4-D 张量,只有正像素值。
  • img2 第二批图像。形状为 [batch, height, width, channels] 的 4-D 张量,只有正像素值。
  • max_val 图像的动态范围(即最大值和最小值之间的差异)。
  • filter_size 默认值 11(高斯滤波器的大小)。
  • filter_sigma 默认值 1.5(高斯滤波器的宽度)。
  • k1 默认值 0.01
  • k2 默认值 0.03(对于较低的值,SSIM 对 K2 的敏感性较低,因此如果我们取 0 < K2 < 0.4 范围内的值会更好)。

返回

  • 包含批量每个图像的 SSIM 值的张量。返回的 SSIM 值在 (-1, 1] 范围内,当像素值为非负时。返回一个形状为:broadcast(img1.shape[:-3], img2.shape[:-3]) 的张量。

此函数基于以下标准 SSIM 实现:Wang, Z.、Bovik, A. C.、Sheikh, H. R. 和 Simoncelli, E. P. (2004)。图像质量评估:从错误可见性到结构相似性。 IEEE 图像处理交易。

注意:真正的 SSIM 仅在灰度上定义。此函数不执行任何色彩空间变换。 (如果输入已经是 YUV,那么它将计算 YUV SSIM 平均值。)

细节:

  • 使用宽度为 1.5 的 11x11 高斯滤波器。
  • k1 = 0.01,k2 = 0.03,如原始论文中所述。

由于过滤器大小,图像大小必须至少为 11x11。

例子:

# Read images (of size 255 x 255) from file.
    im1 = tf.image.decode_image(tf.io.read_file('path/to/im1.png'))
    im2 = tf.image.decode_image(tf.io.read_file('path/to/im2.png'))
    tf.shape(im1)  # `img1.png` has 3 channels; shape is `(255, 255, 3)`
    tf.shape(im2)  # `img2.png` has 3 channels; shape is `(255, 255, 3)`
    # Add an outer batch for each image.
    im1 = tf.expand_dims(im1, axis=0)
    im2 = tf.expand_dims(im2, axis=0)
    # Compute SSIM over tf.uint8 Tensors.
    ssim1 = tf.image.ssim(im1, im2, max_val=255, filter_size=11,
                          filter_sigma=1.5, k1=0.01, k2=0.03)

    # Compute SSIM over tf.float32 Tensors.
    im1 = tf.image.convert_image_dtype(im1, tf.float32)
    im2 = tf.image.convert_image_dtype(im2, tf.float32)
    ssim2 = tf.image.ssim(im1, im2, max_val=1.0, filter_size=11,
                          filter_sigma=1.5, k1=0.01, k2=0.03)
    # ssim1 and ssim2 both have type tf.float32 and are almost equal.

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.image.ssim。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。