【发布时间】:2014-06-19 12:49:46
【问题描述】:
我已经给出了场景的 3d 点或这些点的子集,这些点构成了场景的一个对象。我想从这些点创建一个深度图像,即图像中的像素值编码了相应的 3d 点到相机的距离。
我发现了以下类似的问题
http://www.mathworks.in/matlabcentral/newsreader/view_thread/319097
但是那里的答案对我没有帮助,因为我想使用 MATLAB。获取图像值并不困难(例如,只需计算每个 3d 点到相机原点的距离),但是我不知道如何找出 2d 图像中的相应位置。
我只能想象你将所有 3d 点投影到一个平面上,并将它们在平面上的位置分箱为平面上的离散矩形。然后你可以平均每个 bin 的深度值。 然而,我可以想象这样一个过程的结果将是一个非常像素化的图像,不是很平滑。 你会如何解决这个问题?
【问题讨论】:
-
你能提供一个小例子来展示你的 3D 数据的格式吗?它们是否在 n×3 矩阵中(即 XYZ 坐标列表)?不过,您的程序听起来不错,如果您希望它的像素化程度较低,您可以考虑插值(您可以在投影后进行)。此外,如果您的数据是我认为的那样,那么投影只是忽略 Z 值的问题。
-
是的,数据只是一个 n×3 矩阵(XYZ 坐标)。好的,在我的坐标系中,y 轴是指向远离相机的轴。所以在我的情况下,我会忽略 y 值。 y 值本身就是与 XZ 平面的距离,可以用作深度。由于相机可能会倾斜,我认为也可以使用与地面正交的平面进行相同的程序。
-
如果相机倾斜,我建议先乘以旋转矩阵,使 Y 值等于您正在寻找的深度。
标签: matlab graphics 3d computer-vision