OBB包围盒,具有两个显著的特点:
- 在包含所有给定点的前提下,能够使得包围盒面积最小;
- 所生成的包围盒带有方向。
这里,通过一段时间的积累,主要给出基于PCA主成分分析的OBB包围盒的生成方法(二维),如有不当的地方,望指教^_^!
有些基础的知识可以查阅其他资料
问题描述:给定n个二维坐标点{(x1,y1), (x2,y2), …, (xn,yn)},求能够包围所有这些点的OBB包围盒(长,宽,方向,中心店)。
求解概括:
- 按坐标类型对数据进行组合:x = {x1, x2, …, xn},y = {y1, y2, …, yn}
- 分别求出集合x和集合y的平均值averX和averY,并构建协方差矩阵:
[cov(x,x)cov(y,x)cov(x,y)cov(y,y)](1) - 再根据协方差矩阵求解其特征值和特征向量,其中特征值较大者为OBB包围盒的方向。
- 得到的特征向量即为新的坐标系,将原始数据回落到该坐标系下,即可求得OBB包围盒的长,宽以及中心点。
具体实例:
原始数据,第一列为x轴坐标,第二列为y轴坐标:
⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢3.74.14.75.26.06.39.710.011.012.51.43.82.92.84.03.66.34.93.66.4⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥(2)
计算得到协方差矩阵,网上方法很多,这里就不做介绍:
[10.09293.859563.859562.40233](3)
求出协方差的最大特征值为:11.6958
特征向量为
[0.9235250.383539](4)
将原始数据回落至新的坐标轴上,(首先原始数据 - 平均值)*特征向量组:
⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢−3.62−3.22−2.62−2.12−1.32−1.022.382.683.685.18−2.57−0.17−1.07−1.170.03−0.372.330.93−0.372.43⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥[0.9235250.383539](5)
得到最终结果:
⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢−4.32885−3.03895−2.83002−2.40661−1.20755−1.08393.091642.831743.256665.71586−0.9850461.0780.0167018−0.267420.5339770.04950571.23899−0.169008−1.753130.257431⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥(6)
长度:10.0447
宽度:2.99212