问题标签 [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 投票
2 回答
1010 浏览

opencv - 为什么重建模型是使用 SfM(运动结构)的缩放版本?

即使我有相机的内在参数,也会获得度量重建并生成缩放模型。从一个材料度量 3D 重建意味着两个捕获之间的距离是未知的。为什么我不能使用点对应和内在参数得到距离?如果我使用两张以上的图像,我可以得到带有物理测量的模型吗?

提前致谢。

问候慢跑

0 投票
1 回答
1485 浏览

2d - 2D 投影的 3D 点位置

我目前正在寻找一种从 2D 投影重建一组 3D 线的方法。

我有 3 个坐标系轴的投影图像,相机参数等是已知的。

给出了二维点的位置,并且已知红/绿、绿/蓝和蓝/红之间的角度为90°(笛卡尔坐标系)。

相机的位置也是已知的,因此可以计算出图像中描绘的视线。

有没有一种简单的方法可以找到一组对应的 3D 点,这些点描述了导致给定投影的对象?(假设解决方案可能具有未知的比例因子?)

投影

谢谢!

0 投票
1 回答
2403 浏览

c++ - 转换从三焦点张量计算的投影矩阵以估计 3D 点

我正在使用这个遗留代码: http: //fossies.org/dox/opencv-2.4.8/trifocal_8cpp_source.html 用于从 3 个不同视图的给定相应 2D 点估计 3D 点。我面临的问题与此处所述相同:http: //opencv-users.1802565.n2.nabble.com/trifocal-tensor-icvComputeProjectMatrices6Points-icvComputeProjectMatricesNPoints-td2423108.html

我可以使用icvComputeProjectMatrices6Points成功计算投影矩阵。我使用了来自 3 个视图的 6 组对应点。结果如下所示:

此外,我使用icvReconstructPointsFor3View计算了 3D 点。六个 3D 点如下:

而实际的3D点如下:

我现在的问题是,如何将 P1、P2 和 P3 转换为允许进行有意义的三角剖分的形式?我需要使用三焦张量计算正确的 3D 点。

0 投票
1 回答
1382 浏览

java - reprojectImageTo3D - 我在哪里得到 Q

我在没有 NDK 的情况下在 Android 上使用 OpenCV 时遇到了一些问题。
目前我正在我的大学做一个项目,我的厨师告诉我,在从 2D 图像重建 3D 对象时,我应该避免相机校准。

到目前为止,我有 2 张 2D 图像,并且拥有所有的特征点、匹配、good_matches、基本矩阵和齐次矩阵。此外,我还使用 StereoBM 计算了视差图。下一步应该是从所有这些值中获取 3D 点云。

我检查了互联网,发现

使用这种方法,我应该能够重新创建 3D 点云......目前的问题是,我没有矩阵 Q。我想我会从方法中得到这个

但是由于我应该避免在这种特定情况下使用 cameraCalibration,所以我不能使用这种方法。替代方案

不提供Q...

有人可以帮助我并向我展示如何以更简单的方式获得 Q 或点云吗?谢谢

0 投票
1 回答
654 浏览

geometry - 删除三角形网格中的手柄

全部

我使用欧拉公式计算属数。 https://math.stackexchange.com/questions/85163/finding-the-topological-genus-of-a-triangulated-surface 因为我的三角形网格没有闭合,所以属数应该是 1。但是我有网格与属数字大于1。有没有软件可以高亮句柄?我希望删除手柄,但经验不足。任何人都可以提供一些关于它的链接或论文吗?

事实上,我使用一台 3D 扫描仪扫描一个物体并获得一个三角形网格。生成的网格没有孔,没有闭合,并且对象没有任何句柄。所以我希望属数应该是1。但是属数大于1。我想我应该做点什么来解决它。我将网格加载到 MeshLab 中,但网格看起来很正常。如果存在此类软件,我希望使用某些软件来识别手柄。

提前致谢。问候慢跑

0 投票
2 回答
1300 浏览

android - 来自两个未失真图像的点云

我想使用 OpenCV 从 Motion 做一些结构。这应该发生在 Android 上。目前我有cameraMatrix(内在参数)和相机校准的失真系数。

用户现在应该从构建中获取 2 张图像,并且应用程序应该生成一个点云。注意:用户可能还会在沿着建筑物的一侧移动时稍微旋转智能手机的摄像头......

目前,我有以下信息:

  • 未失真的左图像
  • 未失真的右图像
  • 使用 SIFT 的良好匹配列表
  • 单应矩阵
  • 基本矩阵

我已经搜索了互联网,现在我很困惑我应该如何进行......有人说我需要使用 stereoRectify 来获取 Q 并使用 Q 和 reprojectImageTo3D() 来获取 pointCloud。

其他人说我需要使用stereoRectifyUncalibrated并使用该方法中的H1和H2来填充triangulatePoints的所有参数。在 triangulatePoints 中,我需要每个相机/图像的 projectionMatrix,但据我了解,这似乎是绝对错误的。

所以对我来说有一些问题:

  • 如何从我已有的所有信息中获得 R 和 T(旋转和平移)
  • 如果我使用stereoRectify,前4个参数是cameraMatrix1,distortionCoeff1,cameraMatrix2,distortionCoeff2) - 如果我没有像Kinect这样的stereoCamera,ameraMatrix1和cameraMatrix2是否等于我的设置(智能手机上的单摄像头)
  • 我怎样才能获得 Q(猜猜我是否有 R 并且 TI 可以从 stereoRectify 获得它)
  • 是否有另一种获取每个相机的投影矩阵的方法,以便我可以使用 OpenCV 提供的三角测量方法

我知道这是很多问题,但是谷歌搜索让我感到困惑,所以我需要弄清楚这一点。我希望有人可以帮助我解决我的问题。

谢谢

PS因为这是更多的理论问题,我没有发布一些代码。如果您想/需要查看代码或我的相机校准值,请询问,我会将它们添加到我的帖子中。

0 投票
2 回答
4101 浏览

opencv - 关于 Motion Pipeline 结构的问题

我一直在尝试在 OpenCV 中为一个项目实现一个简单的 SFM 管道,但遇到了一些麻烦。

它适用于未校准的相机,所以我没有相机矩阵(是的,我知道这会让事情变得更加复杂和模糊)。
我知道在尝试这样的事情之前我应该​​阅读更多内容,但我的时间非常紧迫,我正在尝试阅读遇到的事情。

这是我从许多文章、代码示例和书籍中收集的当前管道。我已经发布了有关具体步骤的问题,并且还想知道我在此过程中遗漏了什么或者我做错了什么?

这是我目前的管道。

  1. 从图像中提取 SIFT/SURF 关键点。
  2. 图像的成对匹配。

    1. 在成对匹配期间,我运行“比率测试”以减少关键点的数量。
    2. (对此不确定)我读到计算基本矩阵(RANSAC)并从匹配中消除异常值会进一步帮助它。

      问)我需要这样做吗?是不是太多了或者我应该做一些其他的事情,比如 Homography 来避免 8 点的退化情况?

  3. 接下来,我需要选择 2 张图像来开始重建。

    1. 我找到了图像对之间的 Homography Inliers 的数量。我按最大内点数的顺序遍历图像对列表。
    2. 我计算基本矩阵。
    3. 我“猜测”一个 K 矩阵并使用 Hartley's 中的公式计算基本矩阵。
    4. 我用 SVD 分解这个基本矩阵,然后验证 4 个解决方案。
      • 我使用维基百科条目中的逻辑和这个 python gist 来实现我的检查。

        问)这是对的吗?或者我应该只是对这些点进行三角测量,然后确定它们是否在相机前面,或者它是否适用于同一件事?

    5. 如果在查找基本矩阵时遇到问题,请跳过它并检查下一个图像对

  4. 设置 P=[I|0] 和 P1=[R|T],执行三角剖分并将 3d 点存储在一些数据结构中。同时存储 P 矩阵。

  5. 运行具有大量迭代的捆绑调整步骤以最小化错误。

    从这里开始有点朦胧,我很确定我搞砸了。

  6. 根据观察到的最多 3d 点选择要添加的下一个图像。

  7. 使用 PnPRasnac 之类的方法从已知的 3D 点估计这个新图像的位姿。使用 R & t 的值作为它的投影矩阵 P1=[R|t]
  8. 对这个新图像进行三角剖分(我知道,我不需要对所有这些图像进行三角剖分)到目前为止使用它们的 P 矩阵作为 P=PMatrices[ImageAlreadyTriangulated] 和上面获得的 P1 三角剖分的图像。

    Q) 真的只是使用我们使用过的 P 的原始值那么简单吗?这会让所有东西都进入同一个坐标空间吗?如中,三角点是否都与从 P 和 P1 的初始值获得的系统相同,还是我需要在这里进行某种转换?

  9. 从我们从三角测量中获得的点中,只添加我们尚未存储的那些 3D 点。

  10. 每几张图像后运行一次捆绑调整
  11. 返回第 6 步,直到添加所有图像。

一般的问题:

  • 即使我的相机矩阵 K 只是一个猜测,我是否应该对这些点使用 undistort 或其他东西?
  • 对于捆绑调整,我将点输出到大捆绑调整 (BAL) 格式的文件中。我应该通过 R=R' & T=-RT 将它们转换为世界坐标空间还是让它们保持原样?

我知道这一定是读了很久。非常感谢您的宝贵时间 :)

0 投票
1 回答
647 浏览

matlab - 使用matlab从图像系数重建图像

我正在尝试执行此函数以进行图像重建,其中 ra、rh、rv、rd 是重建系数。但我面临加法和减法的问题。

请帮忙。

或者

我使用以下方法分解图像:

然后使用上述参数重建。现在我必须将它们结合起来。

0 投票
1 回答
1550 浏览

opencv - OpenCV Stereo Reconstruction -- 使用 Q 矩阵和三角测量有什么区别?

我已经在 Matlab 中多次实现了立体管道,现在我正在尝试在 OpenCV 中实现一个。我一直在关注 Martin Peris 的重建:http ://blog.martinperis.com/2012/01/3d-reconstruction-with-opencv-and-point.html

当使用 Matlab 实现时,我的管道是这样的:校准 -> 校正 -> 立体匹配 -> 取消校正/取消扭曲匹配 -> 三角匹配。

在 OpenCV 中,管道是这样的:校准 -> 校正 -> 立体匹配 -> reprojectTo3D

使用 reprojectTo3D 函数:http: //docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#void%20reprojectImageTo3D%28InputArray%20disparity,%20OutputArray%20_3dImage,%20InputArray%20Q,%20bool%20handleMissingValues,% 20int%20d深度%29

不是在做三角测量吗?这怎么可能?是否假设相机已经处于规范设置并且已经平行?

0 投票
2 回答
1353 浏览

mesh - 从使用点云库通过泊松重建构建的网格中去除水密性属性

我想从点云生成视觉上吸引人的表面重建。

我正在使用点云库。我尝试使用泊松重建方法创建网格,但后来发现它提供了防水重建。

例如:就我而言,我有一个房间的点云

使用http://justpaste.it/code1上的代码,我能够得到这样的重建

图 1
(来源:pcl-users.org

上图的表面覆盖了顶视图。这是使用 MeshLab 可视化的。然后稍后在 MeshLab GUI 上,当我按下点时,它看起来像这样。 (来源:pcl-users.org图二

但在第二张图片中,它的表面也有一些点(在附图中看不清楚)。

你能帮助创建一个顶部没有点而只有内部结构的模型吗?

有什么提高重建质量的建议吗?

房间的点云和生成的层文件可以从https://dl.dropboxusercontent.com/u/95042389/temp_pcd_ply_files.tar.bz2下载