在过去的几年里,我参与过的最有趣的项目之一是关于图像处理的项目.我们的目标是建立一个能够识别可口可乐"罐头"的系统(请注意,我正在强调'罐头'这个词,你会在一分钟内看到原因).您可以在下面看到一个示例,其中可以使用缩放和旋转在绿色矩形中识别.

对项目的一些限制:
所以你最终可能会遇到这样棘手的事情(在这种情况下,我的算法完全失败):

我不久前做了这个项目,并且做了很多乐趣,我有一个不错的实现.以下是有关我的实施的一些细节:
语言:使用OpenCV库在C++中完成.
预处理:对于图像预处理,即将图像转换为更原始的形式以给出算法,我使用了两种方法:

算法:我为这个任务选择的算法本身取自这本关于特征提取的神奇书籍,称为广义霍夫变换(与常规Hough变换有很大不同).它基本上说了几件事:
最后,你得到了一张投票的热图,例如,这里所有罐子轮廓的像素都会投票给它的引力中心,所以你会在同一个像素对应的投票中得到很多票.中心,并将在热图中看到如下峰值:

一旦你有了这个,一个简单的基于阈值的启发式可以给你中心像素的位置,你可以从中获得比例和旋转,然后围绕它绘制你的小矩形(最终的比例和旋转因子显然将相对于你原始模板).理论上至少......
结果:现在,虽然这种方法在基本情况下起作用,但在某些方面却严重缺乏:
你能帮助我改进我的特定算法,只使用OpenCV功能来解决上面提到的四个具体问题吗?
我希望有些人也会从中学到一些东西,毕竟我认为不仅要问问题的人应该学习.:)
SURF和SIFT一样获得专利.ORB和BRIEF没有获得专利,但它们的特征不是规模不变的,严重限制了它们在复杂场景中的实用性.
是否有任何特征提取器能够像SURF一样快速地提取尺度不变的特征,并且不像SURF和SIFT那样严格获得专利?
我想使用ORB特征检测器和提取器实现基于特征的对齐算法.
到目前为止,我使用OpenCV中的ORB类
提取了这些特征ORB orb;
orb(gray_image,Mat(),features.keypoints,features.descriptors);
,并使用openCV中的knnMatch函数进行匹配.matcher.knnMatch(features1.descriptors, features2.descriptors, pair_matches,2);
之后我尝试使用findHomography函数找到一个单应性,但是这个函数需要在图像特征之间至少有4个匹配,并且在大多数情况下我测试过的图像不到4.
有人用过这个功能吗?是否有任何关于它的文档,或关于OpenCV的ORB类(ORB构造函数参数的含义)?
PS这是我的第一个问题.我不能发布超过2个链接.对于opencv文档,请使用此方法.