2012-04-14 22 views
8

是否可以比较两个具有不同分辨率的图像?比较具有不同分辨率的图像

我的意思是这里有一些算法/编程方法。例如,现在我计算哈希码从图像的字节数组并比较这些哈希码值。这是很好的工作,但在不同分辨率的情况下失败,即图像眼睛,但字节内容不同。

例如见我的图像高度:
enter image description hereenter image description here

它的一个具有72 PPI但另一96 PPI。我希望真值价值,而在平等比较,但现在我得到。请帮助在这里找到正确的解决方案。

+0

也许创建两个图像的低分辨率副本(比如说128 * 128,也许32 * 32),并比较它们? YMMV – wildplasser 2012-04-14 15:16:07

+1

这个答案显示了一些有趣的方法http://stackoverflow.com/a/844113/441354 – AntonS 2012-04-14 15:25:46

回答

5

两个非常简单的知觉哈希方法可能会冒险进入更为复杂的领土之前给一个尝试是基于离散余弦变换和当地VS图像的全球本土化平均:

  1. 转换图像为灰度

    1.1(EDIT),使图像零均值

  2. 粉碎你的图像到缩略图大小,说[32×32]
  3. 运行二维离散余弦变换
  4. 保持左上方[8×8],最显著低频分量
  5. 二值化块,基于组分的符号
  6. 结果是一个64比特的散列

并在此主题的变体将是

  1. 转换图像为灰度
  2. 任选地调整大小,以预定义的大小。
  3. 分区在一个固定数量的块
  4. 的图像确定的全球平均
  5. 确定每个块
  6. 局部平均对于散列,写出一个1或每块一个0,以待如果本地 平均值大于或小于全球平均值。

另外,看看phash

+0

第一种方法的官方方法名称是什么?某些编程语言中是否有免费的实现? – 2012-04-17 11:20:45

+0

@迈克尔Z,我只知道他们是“感性哈希”对不起。 phash是开源的,但对商业用途有限制。最好与他们交谈。祝你好运。 – Maurits 2012-04-17 19:37:03

+1

非常感谢。但是我的算法遇到了一些问题(我使用了第一个)。缺点在于* 5.根据组件的符号来区分块,您尚未澄清此过程。我已经基于零(0)值的以下/以上来执行二值化,但是正确的解决方案是考虑颜色的平均值而不是零。这篇文章对我很有帮助:https://www.memonic.com/user/aengus/folder/coding/id/1qVeq – 2012-05-05 10:41:01

3

对于几种不同颜色的合成图像,我会从直方图匹配开始。

基本上将每个图像中每种颜色的像素数相加并除以像素总数。然后你有一个简单的浮点矢量作为指纹。你可以忽略白色,如果你想图像或多或少的边界计为一场比赛

它不会检测到相同的图像与片重新排列,或文字向下移动但我不认为这是在这种情况下,关注