ROS交流群
ROS Group 产品服务
Product Service 开源代码库
Github 官网
Official website 技术交流
Technological exchanges 激光雷达
LIDAR ROS教程
ROS Tourials 深度学习
Deep Learning 机器视觉
Computer Vision
ROS Group 产品服务
Product Service 开源代码库
Github 官网
Official website 技术交流
Technological exchanges 激光雷达
LIDAR ROS教程
ROS Tourials 深度学习
Deep Learning 机器视觉
Computer Vision
最大期望算法
-
什么是最大期望算法
在我们进行数据分析的时候经常会遇到这个的问题。我们有一系列的数据点,可以看出他们大致上属于不同的类别。比如下面的数据点。如何找到一种算法把这些点分类?
最大期望算法(Expectation Maximization algorithm )就是这样一种分类算法。
原理
原理上也是十分的简单的。对于一个随机过程来说,一般数据分布都是一个高斯分布。所以我们就可以假设这样的数据是几个高斯分布叠加出来的结果。下面只要通过一定的方法找到这些高斯分布的参数就可以了。为什么叫做最大期望呢?因为找到的分布是最有可能的产生这样的数据结果的分布。具体找参数的方法我就不介绍了,可以详细看这里
如何在opencv里面使用最大期望算法
在opencv中已经实现了EM算法,所以我们可以直接使用,官方文档
这里是opencv官方给的sample code下面是我写的更简单一些的sample code。作用是对三维空间中的点进行归类。
cv::Mat framePos = cv::Mat( vpKF.size(), 3, sizeof(float)); for(size_t it = 0; it < vpKF.size(); it ++){ framePos.at<float>(it * 3) = 0; // 构造数据 framePos.at<float>(it * 3 + 1) = 0; framePos.at<float>(it * 3 + 2) = 0; } // 所有点的坐标信息都已经存入framePos cv::EM em = cv::EM(); // 创建一个EM对象 cv::Mat labels; cv::Mat pos = cv::Mat( 1, 3, sizeof(float)); // pos是需要进行判断分类的点 // 开始训练数据 em.train( framePos, cv::noArray(), labels, cv::noArray() ); // 开始判断分类 em.predict(pos, cv::noArray())[1]; // 返回值就是分类