2

已经讨论过如何比较两个图像,“计算”它们之间的差异。这可以看作是图像比较的一种变体,但不完全是。考虑一下:假设我有一支笔的图像,存储在我的手机(Android 手机)的 SD 卡中。而且,我正在用我的相机在家里“寻找”这支笔。让我们忽略我的眼睛可以做同样的事情,让相机进行搜索。所以,我在家里,把相机对准不同的地方,看看我的相机是否能“识别”这支笔,当我把相机对准它时。用模糊的计算机科学术语来说,当我将相机对准东西时,我在后台运行了一个线程,以不断地将这支笔的图像与当前的相机视图进行比较。我把相机对准椅子,该线程将椅子的相机视图与笔的图像进行比较,并且由于椅子不是笔,因此返回“false”。当我最终将它指向放在桌子上的同一支笔时,线程应该确定这是我们在 SD 卡上的图像的笔。因此,相机视图现在显示了笔以及它所在的桌子,但它应该使用图像比较技术来识别笔。

一般来说,这样的事情可能吗?忘记 Android 或智能手机,是否可以用摄像头“识别”一个区域或对象?由于对图像处理库一无所知,我只能假设某些库确实有工具来做这些事情。或者至少,可以有一个“理论”算法,开始研究。

谢谢,

桑吉夫 Mk

4

1 回答 1

2

这种事情是可以做到的,但要让它运作良好是非常非常困难的。我在 Android 上处理 OpenCV 的经验是,用当前的移动硬件实时执行此操作是不可能的。(使用静止帧执行此操作可能是可行的)

一个非常简陋(而且最简单的国家英里)的系统将使用模板匹配cvMatchTemplate。本质上,您将“模板”(例如您的笔的照片)与搜索图像中每个可能位置的照片进行比较。它是计算密集型的,但在受约束的情况下工作得很好,但是您的应用程序需要完全不受约束的条件。

我的建议是查看 Surf 或类似的东西以及 Hough 变换。您通过从参考图像中在对象上生成一组 SURF 特征来制作对象的“指纹”。您在搜索图像上运行 surf。然后应用广义霍夫变换,其中对象模型是一组特征点。霍夫空间中的峰代表良好的匹配。

我什至从未尝试过第二种方法,但我知道这是可能的。另外我提出的两种方法也绝不是仅有的两种,它们只是我熟悉的两种。

于 2012-08-20T14:27:44.833 回答