python - 用于图像比较的 SSIM:图像形状问题
问题描述
我正在计算两个图像之间的结构相似性指数。我不明白维度应该是什么。两个图像(参考和目标)都是 RGB 图像。
如果我将图像塑造为 (256*256, 3),我将获得:
ref = Image.open('path1').convert("RGB")
ref_array = np.array(ref).reshape(256*256, 3)
print(ref_array.shape) # (65536, 3)
img = Image.open('path2').convert("RGB")
img_array = np.array(img).reshape(256*256, 3)
print(img_array.shape) # (65536, 3)
ssim = compare_ssim(ref_array,img_array,multichannel=True,data_range=255)
结果是0.0786
。
另一方面,如果我重塑为 (256, 256, 3):
ref = Image.open('path1').convert("RGB")
ref_array = np.array(ref)
print(ref_array.shape) # (256, 256, 3)
img = Image.open('path2').convert("RGB")
img_array = np.array(img)
print(img_array.shape) # (256, 256, 3)
ssim = compare_ssim(ref_array, img_array, multichannel=True, data_range=255)
结果是0.0583
这两个结果中哪一个是正确的,为什么?该文档没有说明任何内容,因为它可能是一个概念问题。
解决方案
第二个是正确的,假设您有一个方形图像而不是一个非常长的薄图像。
SSIM 将相邻像素考虑在内(用于亮度和色度掩蔽和识别结构)。图像可以是任何形状,但如果您告诉算法您的形状是 256*256 x 1 像素的形状,则不会考虑垂直结构。
推荐阅读
- wpf - 我应该使用像 MVVM 这样的模式吗?
- java - 如何修复“没有可用的 'com.newmvc.demo.queue.NewSender' 类型的合格 bean”
- vue.js - 需要对 vuex 数据进行排序我需要更改组件结果中的计算属性
- javascript - 为什么我的网页在应用 CSS 样式之前呈现原始 html - 通过 Visual Studio Code 和 Firefox 在本地以及在 github 上托管?
- firebase - 如何修复 redux-thunk 中的错误:需要赋值或函数调用,而是看到一个表达式
- java - 单击网站按钮时,Android WebView 停止工作
- javascript - 将具有一项的数组拆分为具有许多项的数组
- javascript - '和'有什么区别?
- jupyter - 如何在 jupyterlab 或 notebook 中嵌入 vega?
- ios - 如何从 NetworkingService 响应中访问 HomeViewController 中的 User 属性?