0

我想要一个距离度量来找到图像之间的相似性。 我到目前为止所尝试的: 1)我使用了低级别的距离度量,例如归一化互相关(这会根据一些阈值检索相似的图像),但它无法检索旋转或移动的图像。但是,如果降低了特定图像的亮度,则即使它们属于同一类型,也不会检索到这些图像。2)Bhattacharya 系数:它检索旋转或移位的图像,但不检测强度(亮度)降低的图像。3) 尝试使用 SURF 等全局特征,它为旋转(30 度)和变换图像提供帮助,但对具有强度差异的图像没有帮助。

我需要什么:我需要一个用于图像相似性的距离度量,它可以识别那些亮度降低的图像以及所有经过变换(旋转和移动)的图像。我想要这两个指标(互相关)+(巴塔查里亚系数)的组合。互信息会在这个问题上帮助我吗?或者任何人都可以向我建议一个新的度量标准来衡量这个问题的相似性。尝试用广泛的问题和不相关的答案进行谷歌搜索。任何人都可以在这里指导我。提前谢谢。

4

1 回答 1

2

我实现了一些相互信息和 Kullback-Leibler 距离来发现 Facades 中的相似性。它工作得很好,这里解释了它是如何工作的:

基于图像的立面程序建模

论文中解释了整个步骤。但它们不是为了图像的相似性,而是为了图像部分的对称性。但也许它也适用于图像比较。好吧,这只是想法,也许它有效,您应该尝试。一个认为我真正看到问题的地方是旋转。我不认为这个过程是旋转不变的。也许您应该为您的问题寻找一些视觉信息检索技术。

首先,您必须计算互信息。为此,您创建了一个大小为 256 x 256 的累加器数组。为什么是这个大小?首先是每个灰色的联合分布,然后是边缘分布

for(int x = 0; x < width;  x++)
   for(int y = 0; y < height; y++)
   {
      int value1 = image1[y *width + x];
      int value2 = image2[y * width + x];

      //so first the joint distribution
      distributionTable[value1][value2]++;

      // and now the marginal distribution
      distributionTable[value1][256]++;
      distributionTable[256][value2]++;
   }

现在您拥有分布表,现在您可以计算 Kullback-Leibler 距离。

for(int x = 0; x < width;  x++)
   for(int y = 0; y < height; y++)
   {
      int value1 = image1[y *width + x];
      int value2= image2[y * width + x];

      double ab = distributionTable[value1][value2] / size;
      double a = distributionTable[value1][256] / size;
      double b = distributionTable[256][value2] / size;

      //Kullback-Leibler distance
      sum += ab * Math.log(ab / (a * b));  
   }

较小的总和表示您两个图像/区域之间的相似性/对称性非常高。如果图像只有亮度差异,应该可以正常工作。也许还有其他距离对旋转是不变的。

也许你应该尝试使用 SURF、SIFT 或类似的东西。然后就可以匹配特征点了。匹配结果越高,相似度越高。我认为这是一种更好的方法,因为您不必关心比例、亮度和旋转差异。它也可以通过 OpenCV 快速实现

于 2014-05-15T12:43:13.373 回答