关于如何比较两个图像,"计算"它们之间的差异,已经进行了讨论。这可以被视为图像比较的一种变体,但并不完全如此。考虑一下:假设我有一个笔的图像,存储在我手机(安卓手机)的SD卡中。而且,我正在家里用我的相机"寻找"这支钢笔。让我们忽略这样一个事实,我可以用眼睛做同样的事情,让相机来搜索。所以,我在家里,把相机对准不同的地方,看看当我把相机对准这支笔时,相机是否能"识别"它。用模糊的计算机科学术语来说,当我把相机对准东西时,我有一个线程在后台运行,不断地将这支笔的图像与当前的相机视图进行比较。我把相机对准一把椅子,线程将椅子的相机视图与笔的图像进行比较,由于椅子不是笔,因此返回"false"。当我最后把它指向躺在桌子上的同一支笔时,线程应该确定这就是我们SD卡上的图像。因此,"相机视图"现在显示笔及其所在的桌子,但它应该使用图像比较技术来识别笔。
一般来说,这样的事情可能发生吗?忘记安卓系统或智能手机,用摄像头"识别"一个区域或物体可能吗?由于对图像处理库一无所知,我只能假设有些库确实有做这些事情的工具。或者至少,可以有一个"理论"算法,开始研究
谢谢,
Sanjeev Mk
这种事情是可以做到的,但要让它正常工作是非常非常困难的。我在Android上处理OpenCV的经验是,用当前的移动硬件实时处理是不可能的。(对静止帧这样做可能是可行的)
一个非常粗糙(最简单的是一个国家英里)的系统将使用模板匹配cvMatchTemplate
。从本质上讲,您将"模板"(例如笔的照片)与搜索图像中每个可能位置的照片进行比较。它是计算密集型的,但在受约束的情况下工作得很好,然而,您的应用程序需要完全不受约束的条件。
我的建议是看看Surf或类似的东西和Hough变换。通过从参考图像在对象上生成一组SURF特征,可以对对象进行"指印"。您在搜索图像上运行surf。然后应用广义hough变换,其中对象模型是一组特征点。霍夫空间中的峰值代表了很好的匹配。
我甚至从未尝试过第二种方法,但我知道这是可能的。此外,我提出的两种方法决不是唯一的两种,它们只是我熟悉的两种