前段时间,我花了一些时间寻找如何确定两个图像是否相同的方法,以便回答这个问题 https://stackoverflow.com/questions/8644960/java-library-to-compare-image-similarity/。我现在面临一个稍微不同的问题:我手头有大约两千张图像,其中一些具有相同的内容,但彼此是缩放/旋转版本(旋转始终是 90° 的倍数),以及以下问题不同的压缩和图像格式(主要是 jpg,一些 png,没有其他)。缩放比例不会超过大约 2:1。我想做的是消除重复,同时保留最高质量的实例。由于 Java 是我唯一相当精通的语言,因此我需要使用 Java。
答案 https://stackoverflow.com/questions/603283/what-is-the-best-java-image-processing-library-approach另一个问题提供了许多有用的链接,但看起来其中任何一个都不能在缩放/旋转时识别重复项。
这个问题以及答案 https://stackoverflow.com/q/225210/1086871建议首先将所有图像缩放到非常小的尺寸(例如 32*32 或 16*16),然后基本上进行一些散列,并基于散列进行比较。这对我来说听起来很聪明,可以在比较之前对图像进行预排序,排序后这将是一个 O(n) 问题。但是,考虑到图像可能会旋转,我不知道如何处理;一种选择是手动浏览所有图像并决定旋转,因为它们所描绘的方向具有明确的方向(人眼可以很容易地决定“向上”应该是哪个方向)。如果可能的话,我想避免这种情况。
是否有既定的方法/算法(链接提到了 SSIM)来处理此类问题,或者你们中的任何人都可以想出比上述更好的方法?也许有人知道适合该任务的 Java 库(在链接的问题中提到了 OpenCV 的 Java 包装器,然后是 ImageJ、imgsclr)?任何帮助表示赞赏。
我认为这个问题的一般答案需要一种无监督的机器学习方法来生成局部不变特征 - 基本上,这是一种查找不随缩放或旋转而改变的哈希值的奇特方法 - 然后运行聚类算法。以下是一些可能相关的论文:
- 一种基于PLSA模型的重复图像检测新方法 http://www.ijcte.org/icmv/ICMV2010/095-ICMV2010-W00173.pdf
-
基于图像分析的高效图像重复检测 http://infoscience.epfl.ch/record/103736/files/EPFL_TH3797.pdf- 这里有很多东西,因为这是某个家伙的整个博士论文
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)