zoukankan      html  css  js  c++  java
  • 简述OBB算法:使用PCA计算

    对于OBB是什么不作介绍,如果你能看到这篇文章,我觉得你应该知道OBB是什么,也大概知道OBB的经典生成算法:使用PCA(主成分分析)。
    主成分分析有一个关键的线性代数计算步骤,即求解协方差矩阵的特征值和特征向量,这一点必须使用数值分析算法而不能用解题用的基本行变换手段,因为现代程序最大的特点就是干一些枯燥重复的事情——迭代嘛。

    在这里主要介绍三维的思路,黑盒模型:

    obb的参数(中心点、三轴向量、三轴半长,以确定一个空间中的矩形)= f(点集)

    步骤① 分解点集的xyz分量

    即把所有点的 x、y、z 值分别放到独立的数组中

    步骤② 对x、y、z这三个随机变量(一维数组)求协方差矩阵

    步骤③ 对步骤②中的协方差矩阵求解特征值与特征向量,特征向量构造列向量矩阵M

    步骤④ 将点集的几何中心平移至坐标系原点,并全部乘以M矩阵进行旋转变换

    步骤⑤ 将旋转变换后的点的坐标,求xMax、xMin、yMax、yMin、zMax、zMin,进而求出obb中心坐标、obb半长

    步骤⑥ 将obb中心坐标左乘M的逆,得到此中心坐标在原来坐标系的坐标值

    步骤⑦ 将步骤⑥中得到的原坐标系下的obb中心坐标平移回原处(平移向量与步骤④的平移向量刚好是相反向量)

    最后,得到:

    • 特征向量作为obb的三个轴朝向
    • obb的三个方向的半长
    • obb的中心坐标

    其中,计算难点在于步骤③,最经典的做法是使用 Jacobi 迭代计算算法,在数值分析课程中是一节基础,Jacobi 算法还是可以优化的。
    还可以使用矩阵分解算法等进行优化。

  • 相关阅读:
    Rsync常见运维操作命令
    [图文详解] Sublime Text在Windows/Ubuntu/Mac OSX中配置使用CTags
    Sublime Text : 创建工程
    Sublime Text 插件 & 使用技巧
    如何解决adb devices 端口被占用的问题zz
    Nginx 服务器安装及配置文件详解
    把notepad++设置为系统全局文本默认打开应用
    Ubuntu 下载 & 编译 Android5.1 源码
    同步、更新、下载Android Source & SDK from 国内镜像站
    如何为Linux生成和打上patch
  • 原文地址:https://www.cnblogs.com/onsummer/p/14553938.html
Copyright © 2011-2022 走看看