【问题标题】:Comparing images with different resolutions比较不同分辨率的图像
【发布时间】:2012-05-05 20:53:44
【问题描述】:

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

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

例如看我的图片附件:

其中一个有 72 ppi,而另一个 96 ppi。我想在比较相等时获得 TRUE 值,但现在我得到 FALSE。请帮助在这里找到正确的解决方案。

【问题讨论】:

  • 也许创建两个图像的低分辨率副本(比如 128*128,也许是 32*32),然后比较它们? YMMV
  • 这个答案展示了一些有趣的方法stackoverflow.com/a/844113/441354

标签: image image-processing hash comparison


【解决方案1】:

在进入更复杂的领域之前,您可以尝试两种非常简单的感知散列方法,它们基于离散余弦变换和图像的局部与全局均值:

  1. 将图像转换为灰度

    1.1(编辑)使您的图像零均值

  2. 将图片压缩为缩略图大小,例如 [32x32]
  3. 运行二维离散余弦变换
  4. 保留左上角 [8 x 8],最重要的低频分量
  5. 根据组件的符号对块进行二值化
  6. 结果是 64 位哈希

这个主题的变体是

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

另外,看看phash

【讨论】:

  • 第一种方法的官方方法名称是什么?是否有某种编程语言的免费实现?
  • @Michael Z,对不起,我只知道它们是“感知散列”。 phash 是开源的,但对商业用途有限制。最好和他们谈谈。祝你好运。
  • 谢谢。但是我对你的算法有一些问题(我使用了第一个)。不足之处在于5.Binarize 块,基于组件的符号,您尚未阐明此过程。我已经根据低于/高于零 (0) 值执行了二值化,但正确的解决方案是考虑颜色的平均值而不是零。这篇文章对我很有帮助:memonic.com/user/aengus/folder/coding/id/1qVeq
  • @Michael Z 你是对的!我忘了提到我让图像零均值。
  • @Maurits,我在图像比较案例中使用了相同的逻辑。但对于我在评论中添加其链接的以下图片,它失败了。差异只是大小而已。链接1 = snapdeal.com/product/park-avenue-green-polyester-regular/… 链接2 = flipkart.com/…
【解决方案2】:

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

基本上将每张图像中每种颜色的像素数相加,然后除以总像素数。然后你有一个简单的浮点向量作为指纹。如果您希望具有或多或少边框的图像算作匹配,则可以忽略白色

它不会检测到重新排列切片的相同图像,或者文本向下移动一行,但我认为这不是这种情况下的问题

【讨论】:

    猜你喜欢
    • 2021-11-13
    • 2019-03-21
    • 2023-03-16
    • 2015-03-14
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多