记录一下最近在基于OpenPCDet的三维目标检测点云学习过程中遇到的取出标注框内的点云(在该框架内用于取出标注框内的点云物体用于后续的数据增强),除了数据增强,还可以在可视化的过程中给标注框框住的物体点云上色,以百度新开源的车路协同数据集可视化为例:
框架内函数原型如下:
def in_hull(p, hull):
try:
if not isinstance(hull, Delaunay):
hull = Delaunay(hull)
flag = hull.find_simplex(p) >= 0
except scipy.spatial.qhull.QhullError:
print('Warning: not a hull %s' % str(hull))
flag = np.zeros(p.shape[0], dtype=np.bool)
return flag
涉及引入的相关库如下(需要提前pip或conda安装):
import scipy
from scipy.spatial import Delaunay
以原始输入点云为例,函数输入p为(N,3)的原始点云(N为点数,3为空间坐标值),hull为(8,3)的标注框数据(8为构成标注框的8个顶点,3为空间坐标值),函数返回的是一个布尔型的mask,shape为(N,),利用该返回值能够帮助从输入的点云中过滤出需要的在框内的点云数据,用法如下:
flag = in_hull(pc[:, 0:3], corner_3d.T)
point_inbox = pc[flag]
其中point_inbox即为框内包含的点云数据,利用open3d点云可视化效果如下:
关于该函数具体的数学原理由于目前还在学习等以后整理好了再单独发出来,如有不对的地方还请多多指出~