问题标签 [homography]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opencv - 如何使用 OpenCV 生成随机变换
我尝试生成可用于转换平面对象图像的随机单应矩阵。似乎opencv有一个类“patchgenerator”。但是我找不到这个类的详细信息。有些人说它只适用于仿射变换。有什么方法可以生成随机单应矩阵吗?或者我可以直接使用一些 OpenCV 功能?很多谢谢!
matlab - 如何在 SIFT 数学结果上使用 RANSAC 估计单应性
在图像匹配中,使用Matlab,我使用 Sift 找到了两个图像的对应向量,现在我必须估计单应矩阵。有什么简单的方法吗?提前致谢
android - Android 和 OpenCV:考虑相机内在函数和反投影的相机姿势的单应性
库:OpenCV 目标:Android (OpenCV4Android)
我尝试计算世界平面(例如监视器屏幕)的单应性以获得相机姿势,对其进行转换并将点重新投影回来以进行跟踪任务。我正在使用 OpenCVs findHomography() / getPerspectiveTransform() 来获取单应性。使用perspectiveTransform() 对点进行重投影(如此处所述:http: //docs.opencv.org/doc/tutorials/features2d/feature_homography/feature_homography.html)效果很好。“screenPoints”是显示器边缘的世界坐标(使用纵横比和 0 的 z 值),“imagePoints”是图像中屏幕边缘的 x/y 坐标。
我有相机校准矩阵(我使用了 matlab 校准工具箱),我发现了一个提示(在评论中 @ https://dsp.stackexchange.com/questions/2736/step-by-step-camera-pose-estimation -for-visual-tracking-and-planar-markers)用于考虑单应性中的相机参数。
H' = K^-1 * H
(H' - 考虑相机校准的 Homography-Matrix,H - Homography-Matrix,K^-1 - 逆相机校准矩阵)。
我的下一步是从单应性计算相机位姿,如此处所述计算相机位姿与基于 4 个共面点的单应性矩阵。
由于我试图在 Android 上执行此操作,因此我不得不将 C++ 代码移植到 Java:
我无法检查代码是否在做正确的事情,但它正在运行。在这一点上,考虑到相机校准,我假设拥有完整的相机姿势。
如此处所述http://opencv.willowgarage.com/documentation/python/calib3d_camera_calibration_and_3d_reconstruction.html#rodrigues2,3D点的重投影只是
p = K * CP * P
(p - 2D-Position,K - 校准矩阵,CP - 相机姿态,P - 3D-Point)
结果远离屏幕边缘的源图像位置。但是我可以通过其相对差异来识别所有三个边缘 - 所以它可能只是一些错误的因素。
这是我第一次做这样的计算机视觉任务,我可能做错了一些基本错误。我有 Zisserman 的“多视图几何”一书,我阅读了所有相关部分 - 但说实话 - 我没有得到大部分内容。
更新:
在我的相机矩阵中发现了一个错误 - 上面的实现工作正常!
opencv - 从视频中的单应性中提取人脸旋转
我正在尝试确定视频中人脸的方向。
视频从脸部的正面图像开始,因此没有旋转。在以下帧中,头部旋转,我试图确定旋转,这将引导我根据相机位置确定面部方向。
我正在使用 OpenCV 和 C++ 来完成这项工作。我正在使用 SURF 描述符来查找脸上的点,我用这些点来计算两个图像之间的单应性。由于两帧彼此非常接近,因此在该间隔内头部旋转将最小,并且我的单应矩阵将接近单位矩阵。
这是我的单应矩阵:
其中 k1 和 k2 是使用 SURF 提取的关键点。
我正在使用decomposeProjectionMatrix来提取旋转矩阵,但现在我不确定如何解释 rotMatrix。这个也基本上是 (1 0 0; 0 1 0; 0 0 1) (其中 0 是从 e-10 到 e-16 范围内的数字)。
理论上,试图做的是找到每帧的旋转角度并将其存储在某个地方,这样如果我在每帧中得到 1° 的变化,在 10 帧之后我知道我的头已经改变了它的方向10°。
我花了一些时间阅读我能找到的关于 QR 分解、单应矩阵等的所有内容,但我无法解决这个问题。因此,任何帮助将不胜感激。
谢谢!
android - Android OpenCV 查找最大的正方形或矩形
这可能已经得到回答,但我迫切需要一个答案。我想在 Android 中使用 OpenCV 找到图像中最大的正方形或矩形。我找到的所有解决方案都是 C++,我尝试转换它,但它不起作用,我不知道我错在哪里。
我在这里想要完成的是创建一个基于原始图像中发现的最大正方形的新图像(返回值 Mat 图像)。
这就是我想要发生的事情:
1 http://img14.imageshack.us/img14/7855/s7zr.jpg
我也可以,我只得到最大正方形的四个点,我想我可以从那里拿走。但如果我可以返回裁剪后的图像会更好。
image-processing - 2D-3D 单应矩阵估计
我正在使用我的 Kinect 进行一些 2D 3D 图像处理。这是我的问题:我在 3D (x,y,z) 中有位于平面上的点。我也知道 RGB 图像 (x,y) 上点的坐标。现在我想估计一个 2D-3D 单应矩阵来估计 (x1,y1,z1) 坐标到一个随机 (x1,y1) 点。我认为这是可能的,但我不知道从哪里开始。
谢谢!
python - 拼接最终尺寸和偏移量
我正在使用 opencv 和 Python 进行拼接。一切都很好,除了一件事:我无法计算结果图片的确切最终尺寸。我的图像总是太大而且我有黑色边框。此外,偏移似乎不正确,因为图片合并有一条黑线。
这是我的功能:
我的结果:
第一张图片:
第二张图片:
拼接图像:
我究竟做错了什么?
opencv - 使用 ORB 的不稳定单应性估计
我正在开发一个特征跟踪应用程序,到目前为止,在尝试了几乎所有的特征检测器/描述符之后,我用 ORB 获得了最令人满意的整体结果。我的特征描述符和检测器都是 ORB。
我正在选择一个特定区域来检测源图像上的特征(通过遮罩)。然后将其与在后续帧上检测到的特征进行匹配。
然后我通过对从以下代码获得的“匹配”执行比率测试来过滤我的匹配:
我还尝试了双向比率测试(过滤从源到当前场景的匹配,反之亦然,然后过滤掉常见匹配)但它没有做太多,所以我继续进行单向比率测试。
我还在我的比率测试中添加了一个最小距离检查,它似乎可以提供更好的结果
最后,我估计了 Homography。
我尝试使用 RANSAC 方法来估计内联,然后使用这些方法重新计算我的 Homography,但这会带来更多的不稳定性,而且会消耗更多的时间。
然后最后我在要跟踪的特定区域周围画了一个矩形。我通过以下方式获得平面坐标:
其中 'objcorners' 是我的蒙版(或未蒙版)区域的坐标。
我使用“scene_corners”绘制的反应角似乎在振动。增加功能的数量已经减少了很多,但由于时间限制,我不能增加太多。
如何提高稳定性?
任何建议,将不胜感激。
谢谢。
opencv - 从单应性中恢复平面
我已经使用 openCV 通过使用特征和匹配它们来计算与同一平面的视图相关的单应性。有没有办法从这个单应性中恢复平面本身或平面法线?(我正在寻找一个方程,其中 H 是输入,正常 n 是输出。)
opencv - 使用卡尔曼滤波器更好地估计单应性?
我正在创建一个 AR 应用程序,它跟踪特征、计算单应性,然后从 3D-2D 点对应关系中获取对象的姿势,并使用它来渲染任何 3D 对象。
我正在选择一个特定区域来检测源图像上的特征(通过遮罩)。然后将其与在后续帧上检测到的特征进行匹配。然后我过滤这些匹配并估计未屏蔽区域的单应性。
问题在于单应性估计。它每次都不同(非常轻微,但仍然不同)。效果是:即使我的相机保持静止,我也会在我的跟踪区域周围得到一个振动矩形,我使用估计的单应性绘制它。
我已经发布了一个题为“ 使用 ORB 进行不稳定的单应性估计”的问题,并对我正在考虑的一个事实感到放心(如果该区域的位置与其上一个位置相似,则不重新计算我的单应性)。
然而,我最近知道了卡尔曼滤波器,它通过将我们的先验知识与我们的测量观察相结合,可以更好地估计位置。
因此,在查看了各种示例(特别是http://www.youtube.com/watch?v=GBYW1j9lC1I)之后,我为我的场景建模了一个卡尔曼滤波器(而不是 4 个,用于矩形区域的每个点) :
4 个状态变量(x、y 中的位置和 x、y 中的速度)。
2 个测量变量(x,y 中的位置)
1 个控制变量(加速度)
遵循每次迭代所采取的步骤
这个模型几乎不能纠正我的测量值
现在我的问题是:
- 卡尔曼滤波器适合我的场景吗?它会给我带来更好的结果吗?
- 如果是,那么缺少什么?我建模对吗?而是为矩形的四个点创建 4 个过滤器,我是否应该以其他方式对其进行建模(例如,根据距离获取 10 个最强匹配并将其用作过滤器的输入)
- 如果卡尔曼滤波器不适合,我还能做些什么来为估计的单应性提供更多的稳定性?
任何帮助将不胜感激。谢谢。