自动驾驶场景中对Lidar点云障碍物的形状估计就是要给点云簇找到一个合适的3D矩形框。简单起见,我们只考虑偏航角(Yaw),忽略俯仰和翻滚角,这也符合自动驾驶场景中对一般障碍物的设定。有了这个设定之后我们很容易就可以想到一种简单快速的方法来做这个事情。通过OpenCV来计算水平面上的最小外接矩形,再找出垂直方向的最大最小值来确定高度即可确定最终的3D矩形框。
以上图为例,橙色3D框内的卡车是我们待估计的点云簇,通过minAreaRect函数可得到该簇在2D平面上的最小外接矩形的中心(x,y),宽,高以及 旋转角度。
rect = cv2.minAreaRect(points)
这里有一个疑点就是,minAreaRect是如何定义的矩形框的宽(width)高(height)?网络上的资料会告诉你x正轴逆时针旋转碰到的第一条边为宽(width),而无论其长度。旋转的角读范围为[-90,0),你没有看错,角度就是负的。这个理解没有错,前提是搞对坐标轴的定义,因为你有可能是照下图理解的,这个就有问题。
照此理解,点云簇中的寛高会被误认为下面这个样子。
但是,OpenCV中坐标原点在左上角,所以确切地说因该是下面这个样子的。
回到点云图像中来,你可以把点云转过来看。这就很方便地看出来哪条边是宽(width),哪条边是高(height)了。
【参考】