点云在任意平面上获取二维投影

简介: 点云在任意平面上获取二维投影

1. 基础知识


这里的立体几何基础理论详细见参考资料

image.png


2. 手动推导


这个问题其实可以简化为,点P在任意平面上的投影坐标,推导过程如下所示:


181433a3cb65b16fb7fc5de6858663d.png

总结:根据坐标(x0, y0, z0),即可求出参数t,随后便可求出在新平面上的投影坐标


3. 代码验证


参考代码:

"""
代码功能: 将3d点云投影到xyz等不同平面上
"""
import numpy as np
import mayavi.mlab as mlab
# 参数说明:
# - points:点云数据
# - flat:3d平面的参数,Ax+By+Cz+D=0,参数即为(A,B,C,D)
#         xy平面:(0 0 1 0) | xz平面:(0 1 0 0) | yz平面:(1 0 0 0)
def project_2d(points, flat):
    # 点云投影平面
    A, B, C, D = flat
    distance = A**2 + B**2 + C**2
    t = -(A*points[:, 0] + B*points[:, 1] + C*points[:, 2] + D)/distance
    x = A*t + points[:, 0]
    y = B*t + points[:, 1]
    z = C*t + points[:, 2]
    project_point = np.array([x, y, z]).T
    print(project_point.shape)
    # 投影展现
    mlab.figure(bgcolor=(0, 0, 0), size=(640, 640))
    mlab.points3d(x, y, z, y, mode='point', colormap='spectral')
    mlab.show()
if __name__ == '__main__':
    txt_path = r"E:\workspace\PointCloud\Pointnet2\data\modelnet40_normal_resampled\airplane\airplane_0001.txt"
    points = np.loadtxt(txt_path, delimiter=',')
    project_2d(points, (0, 0, 1, 0))


  • 1)在xy平面上的投影
project_2d(points, (0, 0, 1, 0))
mlab.points3d(x, y, z, y, mode='point', colormap='spectral')


结果展示:

image.png

  • 2)在xz平面上的投影
project_2d(points, (0, 1, 0, 0))
mlab.points3d(x, y, z, x, mode='point', colormap='spectral')


结果展示:

image.png


  • 3)在yz平面上投影
project_2d(points, (1, 0, 0, 0))
mlab.points3d(x, y, z, y, mode='point', colormap='spectral')


结果展示:

image.png

ps:这里的平面设置可以是任意平面,点云可以在任意平面上投影


参考资料:

1. python三维点云投影(一)

目录
相关文章
二维坐标系空间变换(详细解读,附MATLAB代码)
二维坐标系空间变换(详细解读,附MATLAB代码)
944 0
二维坐标系空间变换(详细解读,附MATLAB代码)
线代的几何意义(一)——向量,坐标,矩阵
线代的几何意义(一)——向量,坐标,矩阵
|
4月前
|
C++
C++ PCL 将一个点云投影到一个由法向量和点确定的平面
C++ PCL 将一个点云投影到一个由法向量和点确定的平面
123 0
|
7月前
|
算法 图形学
【计算机图形学】实验四 二维图形的缩放、旋转,平移,组合变换
【计算机图形学】实验四 二维图形的缩放、旋转,平移,组合变换
297 2
|
7月前
|
图形学 计算机视觉
GEE错误——如何将原有矢量将维度转化为地理坐标系,重投影坐标坐标无法实现?
GEE错误——如何将原有矢量将维度转化为地理坐标系,重投影坐标坐标无法实现?
79 0
|
7月前
[Halcon&几何] 直线的垂线与延长线的计算
[Halcon&几何] 直线的垂线与延长线的计算
369 1
|
数据采集 数据管理 大数据
真正用起来,二维比三维更重要
今天这篇文章起这个标题似乎有点逆潮流,但是这确实是开发的表达,同时也是我这两天和开发交流之后最直接的感受,当然这个开发的群体是有一定的限定的,就是时空大数据的开发团队主管,但是这些经验对于建设其他数字孪生类的应有也有着很好的借鉴和参考意义。(本人工作于交通行业,现在本人单位也在建设数字孪生相关内容,有感而发故此想谈谈感受)
二维平面的欧几里得距离
二维平面的欧几里得距离
|
前端开发 图形学
二维空间下的向量旋转
向量运算是计算机图形学的数学基础,而向量的旋转是向量的一种常见操作,本文将详细讲解向量在二维空间下的旋转原理。
835 0
二维空间下的向量旋转
向量的内积外积与其几何意义
向量的内积外积与其几何意义
218 0