【发布时间】:2021-01-10 17:24:57
【问题描述】:
我正在撰写我的硕士论文,以模拟来自 Lidar-Data 的半球形照片。所以我的主要目标是将笛卡尔坐标系中的 3D 点 (X,Y,Z) 投影到立体投影(见图 1,来自:here)。我的 Pointcloud 的坐标系进行了转换,使中心点位于 (0,0,0) 并且所有 z 值都是正数。
我在 RStudio 中编码,我首先尝试通过使用wikipedia 上列出的笛卡尔到球坐标的公式来实现点云的球面投影。
r <- sqrt(x^2 + y^2 + z^2)
theta <- acos(z/r)
phi <- atan2(y,x)
我还尝试使用 RPackage pracma 中的 cart2sph-function 来执行此操作,它也应该这样做。但不幸的是,这两种方法的结果看起来都不像我想要的那样。这些点不适合平面半球体,但似乎只是沿 z 轴定向(见图 2)。
有没有人建议如何在 RStudio 中实现激光雷达点云的立体投影?甚至可能有一个包含一些功能的包来进行坐标转换?不幸的是,我没有很多编码经验,我会非常感谢每一个帮助。
编辑
我使用 Allans 脚本在半球上绘制笛卡尔点。使用 Cloudcompare 软件的结果如下所示:
图片: Hemisphere
我还使用转换后的笛卡尔坐标进行了立体投影:
x2 <- (x / (1 + z))
y2 <- (y / (1 + z))
project_2d <- data.frame(x2, y2)
我仍然想知道为什么图的外边缘不适合一个完美的圆圈,因为所有树干都有相同的 min(z) 值(我使用了一个剪切框)。所以所有的树干都应该排列在半球的“赤道”上。你有什么线索吗?
【问题讨论】:
-
嗨拉德。看起来你的点都在 y-z 平面上(尽管很难用这个特定的图像来判断)。你确定转换后的变量在这个平面上不正确吗?
-
嘿,点沿 x-z 平面定向,x 零点将点云分成两半。但在我的结果中我仍然看不到任何类似球形的变换。
-
如果我理解,您将场景投影到一个半球上,然后通过立体成像将后者投影到一个平面上。你在图片 2(别名 4)上向我们展示了什么?
-
为什么要提到球面投影并显示转换为球面坐标的公式?
-
嘿伊夫,谢谢你的回答。我想首先将我的局部点从 carthesian 坐标系投影到球面半平面上,然后再投影到立体 2D 平面上(如图 1 所示)。我不需要转换为球坐标吗?
标签: r geometry coordinate-transformation lidar