(score,diff)= structural_similarity(original_gray,tempered_gray,full=True)
diff = (diff*255).astype("uint8")
print("SSIM:{}".format(score))
上面提到的代码是一个程序的片段,它使用两个图像的SSIM分数来匹配它们。我不明白的是.astype("uint8")
的函数,为什么我们要把diff
乘以255?
想象一个表示灰度(单通道)图像的二维数组。通常,图像数据可以通过以下两种方式之一提供给您:
- 像素值是浮动范围从0到1,或…
- 像素值为0 ~ 255的整数。
偶尔你也会看到以0到100之间的百分比表示的水平,但这与上面的(1)基本相同。注意(2)只能表示255个灰度级,而(1)几乎具有任意精度。
有时你需要(1)但有(2),反之亦然。因为软件或者偏好之类的原因
要从(1)转换为(2),必须乘以255并确保有整数。为了使用最少的内存,您只需要8位整数,但它们有两种形式:有符号(int8
,范围从-128到+127)和无符号(uint8
,范围从0到255)。对于图像,您总是需要无符号类型。
要从(2)转换为(1),只需除以255,确保结果可以保存所需精度的浮点数。
因此,在您的代码中,diff
正在从浮点图像转换为8位图像。