问题标签 [ssim]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5379 浏览

image-processing - scikit-image SSIM(structuralsimilarity image metric)负值的解释

我正在使用 scikit-image SSIM 来比较两个图像之间的相似性。问题是我得到了负值,这不利于我的目的。我知道 SSIM 值的范围应该在 -1 到 1 之间,但我只需要得到一个正值,并且我希望这个值随着两个图像之间相似性的增加而减小。我一直在想两种方法来处理这个问题。首先,从 1 中减去 SSIM 值:

现在,它在完全匹配的情况下给出零(SSIM=1),在没有相似性的情况下给出 1(SSIM=0)。但是,由于 SSIM 也会导致 -1 和 0 之间的负值,因此我也会得到大于 1 的值,我不知道如何解释。特别是不知道SSIM什么时候返回负值,是什么意思。SSIM 值在 -1 和 0 之间的图像是否比 SSIM 为 0 的图像更不相似?因为,如果不是这种情况,那么我的相似性度量将导致问题(当 SSIM 为负时,它会导致值大于 1,这意味着与 SSIM=0 的情况相比相似性更低)。我正在考虑使用的另一个度量是结构差异 (DSSIM),其定义如下:

当两个图像完全相同时,这将返回 0,这正是我正在寻找的,但是当 SSIM=-1 时 DSSIM=1,这与根本没有相似性相对应,当 SSIM=0 时返回 1/2。同样,这仅在负值的 SSIM 显示的相似性低于 SSIM=0 时才有用,正如我所提到的,这是我不知道的,也找不到任何解释 SSIM 中每个值的对应的东西两幅图像之间的相似程度。我希望有人可以帮助我进行这种解释或以某种方式仅获得 SSIM 的 0 和 1 值。

编辑:正如我在评论中提到的,SSIM 可能是负数,这是由可能是负数的两个图像的协方差引起的。在 Skimage SSIM 源代码中,两幅图像的协方差用 vxy 表示,在某些情况下它可以是负数。至于 SSIM 的负值在相似性方面的解释,我还不确定,但本文指出,当局部图像结构反转时会发生这种情况。尽管如此,我还是在看起来不像彼此倒置结构的图像中看到了这一点。但是,我想 local 在这里很重要,这意味着两个图像可能看起来不像彼此的倒置版本,但它们的结构在 local倒置。这是正确的解释吗?

0 投票
0 回答
394 浏览

tensorflow - tf.extract_image_patches 用于 3D 图像

tf.extract_image_patches 的文档

仅适用于2D图像,是否可以扩展到3D图像,这对SSIM损失函数的实现有用吗?

我找不到源代码。有一个类似的功能skimage.util.view_as_windows,但是,当我尝试将此功能与 tensorflow 作为 keras 中的后端一起使用时,会出现错误。从 numpy 数组到张量的过渡让我很困惑。

0 投票
1 回答
48 浏览

cluster-analysis - 可以使用什么机制来量化非数字列表之间的相似性?

我有一个食谱数据库,它本质上是一个成分列表及其相关数量。如果给您一个食谱,您将如何识别允许变化和遗漏的相似食谱?例如,用牛奶代替水,用蜂蜜代替糖,或者完全省略一些东西来调味。

当前的策略是对主要成分的组合进行多次内连接,但是对于大型数据库,这可能会非常慢。还有另一种方法可以做到这一点吗?相当于感知散列的东西是理想的!

0 投票
1 回答
1081 浏览

tensorflow - 如何将值分配给 Tensorflow 中的指定位置?

我想实现一个 SSIM 损失函数,因为边界被卷积中止,我想保留边界并计算边界像素的 L1 损失。代码是从这里学习的。TensorFlow 的 SSIM / MS-SSIM

比如我们有img1和img2 size [batch,32,32,32,1],还有Guassian 11的window_size,结果ssim map会是[batch,22,22,22,1],L1 map [batch ,32,32,32,1] 如何将 ssim 分配到 L1 的中心?

我收到这样的错误; TypeError: 'Tensor' object does not support item assignment

0 投票
1 回答
349 浏览

matlab - Matlab-如何使用 sprintf 函数使用 SSIM 函数

现在我正在研究关于插值的图像处理。所以我发明了关于图像的新插值算法。

我必须检查我的插值算法插值的图像的 SSIM 值。

现在我正在使用 ICY 工具(在 Windows,GUI 环境中),但是由于 GUI 界面,这个工具很难检查大量图像。

所以我想使用 matlab ssim 函数检查图像 SSIM 值。

但我不是matlab语言专家,所以我在处理将各种名称导入ssim函数时遇到了麻烦。

这就是我想要做的:

  1. 我想用大量图像检查 ssim 值。
  2. 所以我将使用 sprintf 函数来创建一个有价值的图像名称。
  3. 第三个我想将此输入图像名称导入到 ssim 函数中。

这是我使用的代码。

当我使用此代码时,会调用错误。

错误:str 必须是 uint8、uint16、int16、single、double 的类型。但是您使用了 char 值。

在我收到这条消息后,写“uint8 str;” 但仍然调用消息。

0 投票
0 回答
874 浏览

python - 从 python 中删除不推荐使用的警告

我是 python 新手,目前正在从事一个需要比较两个图像的图像处理项目。对于图像比较,我使用的是 python 中已经存在的结构相似性函数。但是,每次我使用该功能时,它都会给我正确的结果,但也会像这样多次转储警告:

我认为警告要我使用 compare_ssim 函数而不是 structure_similarity 函数。所以,我改为:from skimage.measure import compare_ssim as ssim但同样的警告即将到来。我在一次执行中将这个函数用于多个图像,所以我需要滚动很多才能找到我的结果在警告中的确切位置。

我需要禁用这些已弃用的警告以保持控制台清洁。有什么解决办法吗?我试图搜索,但一切对我来说都太复杂了。请帮忙。

可能是这个问题的重复,但我不明白如何在 Windows 中使用 IPython 控制台在 Spyder 上实现接受的答案。

0 投票
1 回答
3388 浏览

python - 如何使用openCV和其他库在python中查找两个视频文件的PSNR和SSIM?

我想使用 openCv 和 numpy 在 python 中找出两个视频文件的 PSNR 和 SSIM。如何在python中找到PSNR

我尝试了以下 SSIM 代码

0 投票
3 回答
10530 浏览

python - 在 RGB 图像的张量流中使用 SSIM 损失函数

我想使用SSIM 度量作为我在tensorflow中工作的模型的损失函数。SSIM 应该测量我的去噪自动编码器的重建输出图像与输入未损坏图像(RGB)之间的相似性。

据我了解,为了在 tensorflow 中使用 SSIM 度量,图像应标准化为 [0,1] 或 [0,255] 而不是 [-1,1]。在将我的张量转换为 [0,1] 并将 SSIM 作为我的损失函数后,重建的图像是黑白的,而不是彩色的 RGB 图像。

我的模型在MSE(均方误差)下运行良好,重建的图像是彩色的 (RGB)

使用tf.losses.mean_squared_error(truth, reconstructed)重建图像将是 RGB 图像,而使用 SSIM 会给我一个一维图像。

为什么在张量流中使用SSIM 作为损失函数给我的结果与 MSE(就重建图像通道而言)不同?

0 投票
1 回答
343 浏览

ffmpeg - Can I generate a real time SSIM/PSNR plot while playing a video in FFmpeg?

If I have both reference and test videos and I want to play the test video while also observing a plot of SSIM or PSNR, can this be done using FFmpeg's filter?

0 投票
1 回答
2280 浏览

python-2.7 - 用于 3D 图像体积的 SSIM

我正在使用 TensorFlow 解决图像超分辨率问题(2D 和 3D),并使用 SSIM 作为eval_metrics.

我正在使用image.ssim来自 TF 和measure.comapre_ssim来自skimage. 它们都给出了相同的 2D 结果,但 3D 体积的结果总是存在差异。

我查看了TF-implementationskimage-implementation的源代码。在两种实现中如何考虑和处理输入图像似乎存在一些根本差异。

复制问题的代码:

在 3D 的情况下,我必须取输出的平均值,因为 Tensorflow 在最后三个维度上计算 SSIM,因此会产生32 个 SSIM值。这表明 TF 会考虑 NHWC 格式的 SSIM 图像。这对 SSIM 超过 3D 体积有好处吗?

skimage但是,似乎正在使用一维高斯滤波器。很明显,即使这也没有考虑 3D 体积的深度。

有人可以对这些有所了解并帮助我决定进一步使用哪一个以及为什么?