从物体的不同角度寻找一个好的单应性
Find a good homography from different point of view of objects?
我正在使用特征提取(sift,orb)进行对象检测。
我想从对象(训练图像)的不同角度提取ORB特征,然后将所有这些特征与查询图像进行匹配。
我面临的问题是:我如何从图像的不同角度创建一个好的单应性,这些关键点当然有不同的尺寸?
编辑
我想为每个火车图像创建一个单应性,比如3-4个匹配,然后计算一些"平均"单应性。。。
例如,当你从每个火车图像中只有1-2个匹配时,问题就会出现,在这一点上,你甚至不能创建1个单应
创建单应性的代码
//> For each train images with at least some good matches ??
H = findHomography( train, scene, CV_RANSAC );
perspectiveTransform( trainCorners, sceneCorners, H);
我认为这样做没有意义,因为当你谈论单应性时,一对图像a和B与一对图像B和C无关。你会得到不同的好匹配集和不同的单应性,但单应性是不相关的,没有误差最小化是有意义的。
所有最小化都必须在匹配、关键点和描述符内,只考虑图像对。
有一个想法类似于你在FREAK描述符中所问的。您可以使用一组图像训练选定的配对。这意味着FREAK将根据一组图像来决定提取描述符的最佳模式。经过这个训练,你应该找到更强大的数学,这将给你一个更好的单应性。
要找到一个好的单应性,你需要关键点的精确匹配。你需要4场比赛。
最常见的方法是DLT结合RANSAC。DLT是一种线性变换,它可以找到将关键点投影到场景中的单应性3x3矩阵。RANSAC找到满足数学模型的最佳内/外点集,因此它将找到最佳的4个点作为DLT的输入。
编辑
您需要找到稳健的关键点。SIFT可以做到这一点,规模和视角不变。我认为你不需要用不同的图像来训练。寻找平均单应性是没有意义的。你需要为检测到的对象找到唯一的单应性,而单应性将是标记和检测到的物体之间的变换。同态是精确的,找一个均值是没有意义的。
您是否尝试过从对象视图中获取关键点的方法:train_kps_1、train_kps_2……然后将这些数组与场景进行匹配,然后从这些数组中选择最佳匹配,从而获得一个良好匹配的数组。最后用这个结果来寻找单应性作为"火车"。
这里的关键是如何选择最佳匹配,这是一个不同的问题,你可以在这里找到一个很好的答案:
http://answers.opencv.org/question/15/how-to-get-good-matches-from-the-orb-feature/
也许在这里:
http://answers.opencv.org/question/2493/best-matches/
- 为什么我们需要创建一个单参数构造函数来使用临时的无名称对象
- OpenCV CV 查找单应断言错误计数器 = > 4
- 从特征匹配/单应性中过滤掉误报 – OpenCV
- OPENCV C .在for循环中在不同的图像像素上绘制一个圆圈(应在每个循环运行时将图像打开)
- 一个类应使用功能指针调用另一类的方法
- 使用单应性绕x/y轴旋转
- 从物体的不同角度寻找一个好的单应性
- OpenCV - 仅在绘制单应性时打印对象名称
- 可以创建一个单例 c++ 来进行身份验证并使用对 Facebook API 的 HTTP 请求在墙上发布
- 单应性错误
- OpenCV RHO 单应性方法不适用于透视变换
- 如何使用opencv中的单应矩阵将一个点从一个图像重新投影到另一个图像
- 如何正确地创建一个单例对象并在C++中使用它
- 在C中递增一个易失性变量
- 如何为cout编写一个允许表达性语法的函数包装器
- c++中的一个单例应用程序对象
- 我如何检索点的单应性计算findHomography和RANSAC
- 你能给std::pair的第一部分一个更具符号性的名字吗?
- 如何在另一个函数中使用单应性的点/场景角作为ROI的输入
- 单应性矩阵和图像变换,关键点更少