问题标签 [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.

0 投票
1 回答
1726 浏览

android - openCV单应性输出掩码值用作透视误差的内点?

对于对象识别/检测,为了找到好的匹配,我使用了以下方法。

在这里,我两次找到单应性,从第一个单应性使用输出掩码作为过滤器来查找第二个单应性的输入关键点。

我正在使用特征描述符和提取器选项,如下所示

第一次计算 - 使用匹配中的所有关键点

第二次计算 - 使用 mask1 的掩码值仅使用匹配中的内部关键点

现在 mask1 和 mask 是

现在,由于第二个单应性的所有输入都是内点,掩码值应该全部为 1,但绝不会全部为 1。有时我在掩码中得到更多的零。

单应性 3x3 输出 hg1 和 hg 有一些负值是可以接受的还是有什么问题?

我应该使用什么方法来过滤好的关键点,以便获得正确的单应矩阵并且透视投影是正确的?

0 投票
1 回答
542 浏览

c++ - 计算二维平面上的单应性精度

我试图找到一种方法来参数化我的单应性计算的精度。我想获得一个值,该值描述了在某个位置进行的测量的单应性计算的精度。

我目前已经成功计算了单应性(使用cv::findHomography),我可以使用它将我的相机图像上的一个点映射到 2D 地图上(使用cv::perspectiveTransform)。现在我想在我的 2D 地图上跟踪这些对象,为此我想考虑到在我的相机图像后面的对象在我的 2D 地图上的位置比一直在里面的对象更不精确前方。

我在这个网站上看过以下提到平面拟合的例子,但我真的不明白如何使用这种方法正确填充矩阵。结果的可视化似乎确实符合我的需求。有没有办法用标准的 OpenCV 函数来做到这一点?

编辑: 感谢 Francesco 的建议。但是,我想我正在寻找与您的答案不同的东西。我不是要测试单应性本身的精度,而是要测试一个真实相机视图中的测量密度与我创建的地图上的实际大小之间的关系。我想知道,当我在相机图像中检测到 1 个像素时,此时这将在我的地图上显示多少米。

我当然可以通过在我的相机图像上的测量周围获取一些像素来计算,然后使用单应性来查看每次我进行单应性时在我的地图上代表多少米,但我不想每次都计算这个。我想要一个公式来告诉我图像中的像素和地图上的像素之间的关系,这样我就可以考虑到我在地图上的跟踪。

0 投票
1 回答
160 浏览

visual-studio-2010 - 从 OpenCV 和 Visual Studio 2010 获得 Homography Matrix 后,如何使用它?

我已经使用 OpenCV 和 Visual Studio 计算了单应矩阵。我已经使用了这个主题的基本示例。我应该如何应用该矩阵?...

0 投票
1 回答
1480 浏览

c++ - 如何在使用 OpenCV / C++ 进行拼接之前检测图像位置

我正在尝试将 2 个图像合并/缝合在一起,但发现 OpenCV 中的默认拼接器类无法处理我的图像。所以我开始自己写。不幸的是,图像太大而无法附加到此消息中(它们的大小都是 12600x9000 像素)。所以我会尽量解释清楚。

这两张图片不是相机拍摄的照片,而是从 PDF 文件中提取的 tiff 文件。图像本身实际上是 CAD 图纸,所以没有太多渐变,因此我认为默认的拼接器类无法处理它们。

到目前为止,我设法提取了特征并匹配它们。我还使用以下众所周知的示例将它们拼接在一起:

我有点让它适合..因为我的问题是,在我的情况下,两个图像可以垂直或水平对齐。默认情况下,互联网上的所有缝合示例都假定第一张图像是左图,第二张图是右图。

所以我的第一个问题是:如何检测图像是在第一张图像的左侧、右侧、上方还是下方并创建适当大小的新图像?

其次..目前我得到了正确的图像..但是,因为我没有一些像样的代码来检查新图像的理想宽度和高度,所以我在新图像中有很多黑色/空白空间。删除那些黑色区域的最佳 C++ 代码是什么?(我在网上看到很多 Python 脚本.. 但没有 C++ 示例......而且我有 0 个 Python 技能......)

非常感谢您的帮助。问候,弗洛里斯。

0 投票
2 回答
1353 浏览

computer-vision - 为什么平面单应性不足以将任意场景图像映射到另一个视点

我只是对计算机视觉单应性有一个非常基本的问题。为什么平面单应性不足以将任意场景图像映射到另一个视点?这些点必须在一个平面上。那么2个摄像头后面的图像点应该有关系吗?我很困惑?有没有人提供一些材料来学习它?

非常感谢你!

0 投票
1 回答
1299 浏览

matrix - 从 3D 数据计算非仿射变换矩阵

我在两个不同的坐标空间(A 和 B)中有一个 3D 配对点数组。

给定点不共面,如何计算能够将点从 A 转换为 B 的非仿射变换矩阵?

我已经设法在 2D 中做到这一点(使用单应性),但无法弄清楚如何让它在 3D 中工作。如果可能的话,将非常感谢一个快速的代码示例。:)

0 投票
1 回答
407 浏览

opencv - OpenCV: Recording a Warped Video

I am making a small application in C++ (using OpenCV) that records a video and then lets you warp it by rotating your view in x,y,z.

Right now I am just starting to test the rotation by making it rotate a small angle every iteration. Although the display of the video works fine, the writing into a file doesn't. As you can see from the code I am warping each frame using the purely rotational homography and then showing and writing the warped frame. For some reason even though the un-warped video is a few MB big, the warped video is only a few KB and it doesn't play using Ubuntu's standard video player. My best guess is that since I am warping the frame I am affecting the frame size in a way that openCV fails to save correctly. I have no idea on how to fix it though.

Any ideas?

Code:

0 投票
3 回答
7026 浏览

ios - OpenCV:对整个图像进行 wrapPerspective

我正在检测我的 iPad 拍摄的图像上的标记。因为我想计算它们之间的平移和旋转,我想改变这些图像的透视图,所以看起来我直接在标记上方捕获它们。

现在我正在使用

这给出了我的这些结果(查看右下角的结果warpPerspective):

照片 1 照片 2 照片 3

您可能会看到结果图像在结果图像的左上角包含已识别的标记。我的问题是我想捕获整个图像(不裁剪),以便以后可以检测到该图像上的其他标记。

我怎样才能做到这一点?也许我应该使用来自的旋转/平移向量solvePnP函数中的旋转/平移向量?

编辑:

不幸的是,改变扭曲图像的大小并没有多大帮助,因为图像仍然被翻译,所以标记的左上角位于图像的左上角。

例如,当我使用以下命令将大小翻倍时:

我收到了这些图片:

照片 4 照片 5

0 投票
1 回答
214 浏览

c++ - 单应性错误

首先,我想声明我是 C++ 的菜鸟。我正在使用 Features2D + Homography 编译和运行代码以查找已知对象教程,但我认为我无法正确链接所需的库。我得到这个:

调用:GCC C++ 链接器 g++ -L/usr/local/lib -o "Homografia2" ./src/Homografia2.o -lopencv_core -lopencv_nonfree -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv /usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crt1.o: 在函数_start': (.text+0x18): undefined reference tomain'collect2
: ld 返回 1 退出状态 make: * [Homografia2 ] 错误 1

**** Build Finished ****

我正在研究日食。拜托,我真的需要帮助。

0 投票
0 回答
665 浏览

opencv - 获取 3d 空间中矩形大小的 openCV 方法或标准做法

我需要找到在 3D 图像中显示为四边形的矩形的大小或坐标。四边形位于与 3d 世界消失点对齐的平面上。澄清一下,四边形是 3D 世界中的一个矩形,这就是我想要的矩形大小。

我不需要获取所有纹理并制作新图像。我也不知道我见过的单应性(透视变换)解决方案所要求的目标矩形的坐标,因为我不知道它应该具有的纵横比。

我已经阅读了这个线程:透视变形矩形的比例,这家伙似乎找到了一种有效的算法。然而,我读过其他声称计算单应性的研究论文,但他们没有说明他们是如何做到的。此外,现有的 openCV 库中似乎有这样一个基本功能。

谢谢。