感谢小伙伴
https://blog.csdn.net/u013541523/article/details/82982522
有代码,而且完全好使,这里记录一下自己的理解
看完之后感觉大体上的思路是这样的,找到最大的x,y,z,最小的x,y,z,得到8个顶点:
(max_x,max_y,max_z)(min_x,max_y,max_z)
(max_x,min_y,max_z)(max_x,max_y,min_z)
(max_x,min_y,min_z)(min_x,max_y,min_z)
(min_x,min_y,max_z)(min_x,min_y,min_z)
连接起来得到盒子
但实际上要比这复杂,使用了PCA得主方向,又加了一系列的转换,一开始不明白为什么,后来才弄懂,因为如果直接在原来的点云上得那8个点,而不去转到主方向的话,那就是在原来相机的x,y,z坐标系下得到最大的x,y,z和最小的x,y,z也就是说最后得到的盒子的棱是平行于你相机坐标系的x,y,z的,这样就不是最小的盒子了,举例如下图:对于类似平面的点云a,b,c,d,如果根据主方向画盒子如作图,如果按之前的坐标系,如右图。