比较两张相似的图片得到相似度值

Posted

技术标签:

【中文标题】比较两张相似的图片得到相似度值【英文标题】:Comparing two similar pictures to get similarity value 【发布时间】:2019-08-08 05:45:34 【问题描述】:

我正在尝试创建自己的应用,我需要比较两张图片。

澄清一点。

图片将包含一个写在纸上的符号。

我将得到一张带有符号的纸的“原始”图片。

我需要将新捕获的符号图片与原始图片进行比较,并确定它们是否都是相同符号的相同图片。

新捕获的符号图片可以从不同的角度拍摄。

我查看了 OpenCV 和 Google Vision ,但我有点迷茫,不知道该怎么做。

我的问题

我有这样的“原始”图片

我有一张新拍的照片,上面有相同的符号,但是从不同的角度拍摄,像这样

我需要确定它们是“相同”(相似)还是不同。

提前致谢。

【问题讨论】:

关于其他符号可能是什么样子的任何线索?或者有几个?您是否打算继续使用无益的背景?背景是否不同?大小是否完全微不足道,所以小星星与大星星相似?颜色是否重要,即蓝色星星与红色星星相似吗? 您好,感谢您的回答。没有线索,符号可能是随机的,就像涂鸦一样。将只有一个符号。背景可能是随机的并且是变化的。但是“原件”和比较背景应该是一样的。大小应该很重要,但我认为它会有所不同,因为“新拍摄的图片”的角度。颜色应该保持不变,但如果它没有检测到颜色差异就可以了。主要目标是认识到“新拍摄的照片”类似于“原始照片”(在相同的背景上,在相同的表面上)。 在连体网络上见:becominghuman.ai/… 嘿@Nuzhny 这个神经网络只能处理两张图片吗?没有测试样品。 ?因为我不知道有哪些符号可用,因为它们可以是随机的。因此我无法训练网络识别类似的东西。 【参考方案1】:

OpenCV 支持比较两个图像以及这些图像有多“相似”的方式有多种。这些方法包括比较直方图、模板匹配和特征匹配。

比较直方图的方法 cv2.compareHist() 可能是最简单和最快的方法,但有时它可能过于简单和不准确。另一种方法是模板匹配 cv2.matchTemplate(),它将“模板”搜索图像与目标图像进行比较。此方法适用于具有相似大小和方向的相同图像,但对于有角度的图像可能无效。 特征匹配方法可能是最有效的方法之一,因为提取的特征可用于确定图像之间的相似性。这些特征可以针对旋转或缩放的目标进行识别,因为高比例的相似性意味着相同的对象。该类别可以进一步分为纹理描述符(HOG、LBP、Haar)和关键点描述符(SIFT/SURF)。

对于您的应用程序,我会考虑模板或特征匹配,因为您的图像可能因角度而异。

【讨论】:

以上是关于比较两张相似的图片得到相似度值的主要内容,如果未能解决你的问题,请参考以下文章

图片相似度判断

余玄相似度,TF-IDF

JAVA 比较两张图片的相似度的代码

Java之词义相似度计算(语义识别词语情感趋势词林相似度拼音相似度概念相似度字面相似度)

Java之词义相似度计算(语义识别词语情感趋势词林相似度拼音相似度概念相似度字面相似度)

C#怎么来判断2张图片相似度