问题标签 [3d-reconstruction]

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 回答
3092 浏览

c++ - 使用基线和单相机校准从 2 张图像进行 3D 重建

我的学期项目是校准具有大基线(~2m)的立体相机。所以我的方法是在没有精确定义的校准模式(如棋盘)的情况下运行,因为它必须很大并且难以处理。

我的问题与此类似:从 2 张图像进行 3d 重建,而没有有关相机的信息

程序到现在:

  • 角检测左图 goodFeaturesToTrack
  • 精致的角落 cornerSubPix
  • 在右图中找到角落位置 calcOpticalFlowPyrLK
  • 计算基本矩阵 F findFundamentalMat
  • 计算H1、H2整流单应矩阵 stereoRectifyUncalibrated
  • 纠正图像 warpPerspective
  • 计算视差图 sgbm

到目前为止效果还不错,但如果我改变角的数量,校正后的图像会在透视图中“跳跃”..

不知道这是否是表格不精确或错误,或者是否由于没有已知的相机参数或没有镜头失真补偿而无法计算(但也发生在筑波照片上..)欢迎提出建议:)

但不是我的主要问题,现在我想重建 3D 点。

reprojectImageTo3D需要我目前还没有的 Q 矩阵。所以我的问题是如何计算它?我有基线,两台摄像机之间的距离。我的感觉是,如果我将视差图转换为 3d 点云,我唯一缺少的是比例尺吗?所以如果我在基线中设置,我得到了 3d 重建对吗?那怎么办?我还计划用棋盘分别补偿每个相机的镜头失真作为第一步(小而一次靠近一个相机,所以我不必在 10-15 米之外,在两者的重叠区域有一个大图案。 .) 所以如果这有帮助我也可以使用相机参数..

除了http://docs.opencv.org之外还有文档吗?我可以看到并理解 Q 矩阵的计算内容和方式,或者如果我在 Qt 中按 F2,我可以打开源代码(对我来说可能很难理解 ^^),我只能看到带有传输参数类型的函数..(对不起,我对这一切都很陌生)

http://i.stack.imgur.com/A1Wjc.jpg

  • 左:找到角的输入
  • 顶部 h1,h2:纠正图像(这个角数看起来不错^^)
  • SGBM:视差图
0 投票
1 回答
1720 浏览

c++ - pcl::MarchingCubesRBF 不输出网格

我需要使用基于径向基函数的行进立方体,所以我查找了在 PCL 中实现的这个算法。实际上我使用的是 PCL v1.6,所以功能是:

问题是它不起作用,即它没有创建任何三角形:有时输出是“创建了 0 个三角形”,有时运行会阻塞我的机器。无论如何,我的实现是:

我尝试使用不同的文件,如输入,但它们都不起作用。其中之一是https://github.com/FabiApfelkern/cloudfinish/blob/master/cat.pcd

我发现 pcl 中的实现存在一个错误:http: //dev.pointclouds.org/issues/768 但是我不明白它是否在 pcl v1.6 中得到解决。如果可能的话,让我知道我该如何解决。

我在 VS2010 中使用 C++

0 投票
2 回答
1283 浏览

matlab - 使用校准的相机获取匹配点进行 3D 重建

我正在尝试从几对两个视点计算 3D 坐标。
首先,我使用 matlab 函数estimateFundamentalMatrix()来获取F匹配点(数字 > 8),即:

我的相机——拍了这两张照片——用内在矩阵进行了预校准:

然后,根据这些信息,我使用以下方法计算了基本矩阵:

通过SVD的方法,我终于得到了射影变换矩阵:

地点R和地点t

我知道应该有 4 种可能的解决方案,但是,我计算的 3D 坐标似乎不正确。
我用相机拍摄了带有标记点的平面物体的照片。我手动匹配了点(这意味着关于原材料不应该存在明显的错误)。但结果证明是一个带有一点条纹的表面。
我想这可能是因为图片没有处理失真(但实际上我记得我做过)。

我只是想知道这种方法能否解决3D重建问题对吗?特别是当我们已经知道相机内在矩阵时。

由 JCraft 在 8 月 4 日编辑:我已经重做了这个过程并得到了一些显示问题的图片,我将写另一个详细的问题,然后发布链接。

由 JCraft 在 8 月 4 日编辑:我发布了一个新问题:Calibrated camera get matching points for 3D rebuild, Ideal test failed。@Schorsch 非常感谢您帮助格式化我的问题。我将尝试学习如何在 SO 中进行输入,并尝试提高我的语法。谢谢!

0 投票
1 回答
609 浏览

matlab - 校准后的相机获得 3D 重建的匹配点,理想测试失败

我之前曾问过“使用校准的相机获取匹配点进行 3D 重建”的问题,但问题没有描述清楚。所以这里我用一个细节案例来展示每一步。希望有人可以帮助找出我的错误在哪里。

起初我用坐标制作了 10 个 3D 点:

这些点在这张图片中显示的同一平面上:

我的下一步是使用 3D-2D 投影代码来获取 2D 坐标。在这一步中,我使用了 caltech 校准工具箱中名为“project_points.m”的 MATLAB 代码。我还使用 OpenCV C++ 代码来验证结果,结果是一样的。(我使用了 cvProjectPoints2())

对于第一个投影,参数为:

而且没有失真

旋转只是两个旋转pi/12。然后我得到了第一个视图 2D 坐标:

对于第二种观点,我改变了:

然后得到 2nd View 2D 坐标:

然后是重建步骤,我已经建立了理想的匹配点(我猜是这样),下一步是计算基本矩阵,使用estimateFundamentalMatrix()

用 known K,我使用下面的 matlab 代码来计算基本矩阵并计算R, t, 最后是 3D 坐标:

从这段代码我得到的结果如下:

在 Geomagic 中显示这些点,结果是“有点弯曲”。但那里的立场似乎是正确的。我不知道为什么会这样。有人有什么想法吗?请看图片:

0 投票
0 回答
245 浏览

string - C++ 和 ReconstructMe SDK:文件选择器的返回值出错

我编写了一个简单的 Windows 窗体应用程序,它使用 ReconstructMe SDK,一个 3D 对象重建库。当我单击一个按钮时,程序会打开一个返回文件路径的文件选择器。然后,它应该加载 .obj 文件以打开现有的 3D 重建。但是,当我选择文件来创建表面时,它不会加载,并且会出现以下输出:

这是按钮的点击事件:

这是我尝试加载文件的功能:

即使我尝试加载不存在的文件,也会出现错误。例如,if(!REME_SUCCESS(reme_surface_load_from_file(context, surface, "example.obj")))即使文件不存在,此行也会生成相同的错误。我不知道问题出在文件选择器对话框的返回值上,还是出在导致错误的函数上。有人能帮我吗?

0 投票
1 回答
1854 浏览

computer-vision - 从深度图重建 3d 点(使用相机参数)

总体介绍:

我有使用同一台相机拍摄的图像 A 和 B(我知道其中的内部参数 K)。然后我开始寻找 F 矩阵并从中找到基本矩阵。从中我恢复了完整的相机矩阵 P 和 P'。

然后我纠正了这两个图像并计算了一个深度图,如下图所示: 伊姆古尔

我的问题

现在我想使用深度图执行密集的 3d 重建。不太清楚的是我应该使用什么相机矩阵来重新投影点,P 或 P'?

还是又一次转变?P 和 P' 是 A 和 B 的相机矩阵,但现在我正在考虑使用 A 和 B 的校正版本创建的深度图

0 投票
1 回答
107 浏览

kinect - INuiFusionColorReconstruction::IntegrateFrame 和 ProcessFrame 有什么区别?

我正在学习 KinectFusion,希望用它来构建一个用于 3D 打印的重建应用程序。

目前我对 INuiFusionColorReconstruction的IntegrateFrameProcessFrame方法感到困惑。

ProcessFrame还有一个名为 的参数maxAlignIterationCount,是否意味着ProcessFrame会进行多次积分而IntegrateFrame只积分一次?既然 ProcessFrame 也只取一个参考帧,那么多次集成有什么好处呢?

0 投票
2 回答
3782 浏览

matlab - 从两组对应点计算本质矩阵

我正在尝试从两个校准的相机重建 3d 图像。涉及的步骤之一是计算 3x3 基本矩阵E,从两组对应(齐次)点(超过所需的 8 个)P_a_origP_b_orig两个相机的 3x3 内部校准矩阵K_aK_b

我们首先将我们的点标准化

我们也知道约束

我一直在关注它,但是你如何真正解决最后一个问题,例如找到E矩阵的九个值?我已经阅读了关于这个主题的几个不同的讲义,但它们都忽略了关键的最后一步。可能是因为它被认为是微不足道的数学,但我不记得我上次这样做是什么时候,而且我还没有找到解决方案。

0 投票
1 回答
1140 浏览

matlab - 未校准的多视图重建深度估计

我正在尝试从 MATLAB 中的一组未校准照片进行 3D 重建。我使用 SIFT 来检测图像之间的特征点和匹配。我想先进行投影重建,然后使用自动校准将其更新为公制。

我知道如何通过计算基本矩阵、相机矩阵和三角测量来估计 2 张图像的 3D 点。现在假设我有 3 个图像,a、b 和 c。我计算图像 a 和 b 的相机矩阵和 3D 点。现在我想通过添加图像 c 来更新结构。我通过使用与图像 c 中的 2D 点匹配的已知 3D 点(从 a 和 b 计算)来估计相机矩阵,因为:

在此处输入图像描述

但是,当我重建 b 和 c 之间的 3D 点时,它们不会与来自 a 和 b 的现有 3D 点相加。我假设这是因为我不知道点的正确深度估计(在上面的公式中用s描述)。

使用Sturm 和 Triggs 的分解方法,我可以估计深度并找到结构和运动。但是,为了做到这一点,所有点都必须在所有视图中可见,而我的图像并非如此。如何估计在所有视图中不可见的点的深度?

0 投票
1 回答
1214 浏览

matlab - 使用平面的相机校准参数从 2d 投影在平面上重建 3d

尝试使用“Matlab 的相机校准工具箱”中的外在和内在相机参数从相机图片中的 2D 像素坐标重建平面上点的 3D 坐标。

内在参数焦距:fc = [1017.21523 1012.54901] 主点:cc = [319.50000 239.50000]

外在参数平移向量:Tc_ext = [4.409693 -74.116018 393.057934] 旋转矩阵:Rc_ext = [-0.083632 0.991715 -0.097501 0.832136 0.015674 -0.554350 -37482.8025] -0.5482.8025 -0.5482.8025

任何人都可以帮助如何从相机图像中的 2d 获取平面上点的 3d 坐标吗?