【问题标题】:Find Similarity between images (Bitmap) in Android在 Android 中查找图像(位图)之间的相似性
【发布时间】:2020-09-27 12:34:23
【问题描述】:

我几乎没有 100x100 存储的位图,我想比较我的应用中其他传入的 100x100 位图与现有的 找出图像之间的相似性,并将结果返回给用户,哪个位图与传入的位图匹配。

例如, 考虑一下我已经拥有的这张令人兴奋的位图:图像的背景实际上是透明的

然后我收到以下位图作为来自用户的输入:

现在,我想向用户输出一些相似性度量,并告诉用户这两者是相似的,因为它们是直的,指向上方,并且它们具有从底部开始的拖尾效果。

目前我已经尝试了以下方法,但它们没有按预期工作

  1. 从位图对象中提取像素并比较数组
  2. 将位图编码为base64字符串,然后比较

如果有人建议我使用 OpenCV,请详细解释 OpenCV 方法。我找不到任何合适的材料/资源用于 OpenCV android / Java 教程来查找图像之间的相似性。

【问题讨论】:

  • 为此,您需要使用 ML 库等高级工具。因为除非图像相同,否则使用简单的代码是无法做到的。
  • 看看这个问题stackoverflow.com/questions/8567905/… 和这个例子还有rosettacode.org/wiki/Percentage_difference_between_images#Java,你想要执行的任务不是基本级别的,你需要一些高级概念或算法。
  • @Omid.N,你能分享一下什么样的概念/算法可以帮助我实现我的目标吗?
  • @Prathamesh Jadhav 我已经尝试过您在链接中分享的那些基于像素值差异比较图像的方法,但它并没有帮助我获得所需的输出
  • @struct_dhancha 对不起!我在机器学习方面没有任何专长。但我知道没有一种方法可以如此轻松地做到这一点。

标签: java android opencv image-processing bitmap


【解决方案1】:

我终于实现了我想要的

  1. 将输入和存储的位图缩放为 100x100。
  2. 使用bitmap.extractAlpha()提取上述两个的alpha层。
  3. 通过使用getPixels()提取像素来计算输入的余弦相似度;相似度将在 -1 到 1 的范围内。
  4. 如果similarity > threshold (在我的情况下为0.6),则返回same,否则返回different

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    相关资源
    最近更新 更多