Linkage多模型分类算法简介

J-Linkage算法(J算法)是一种多模型分类算法,该算法可以根据模型类型对所有样本数据进行多组分类,原文题目’Robust Multiple Structures Estimation with J-linkage’。以论文中的例子说明算法要达到的效果:

原始数据分布

我们的目标是要拟合出五角星对应的5根直线,能实现该功能的算法也有不少,这里介绍下J算法是如何实现的,介绍J算法之前,需要了解Ransac算法的原理,具体内容可参考。其实思想也很简单:ransac算法是要找到样本数据中满足某种模型的最大数据集合。这里的最大是指集合的数据个数。J算法是要找到多个数据集合,以上图为例,目的是要找到5个数据集合,每个数据集合能拟合出一条直线,5条直线构成五角星。J算法的流程是:

设样本数量为M,

(1)、随机生成N个模型参数;

(2)、计算N*M维大小的PS矩阵;

(3)、计算得到最小Jaccard距离的两个模型的参数;

(4)、合并此两个模型,,并重新计算得到最小Jaccard距离的两模型;

(5)、重复3~4过程,知道最小Jaccard距离为1为止。

算法最终得到若干个分类,有些分类属于弱分类,就是说集合内的样本个数太少,不能算是一类,本例只要取前5个分类结果即可,这5个分类结果的样本数量也是最多的5类。

分析下算法的实现过程:首先随机选取了N个模型,这里N我设置了800,由于随机性,有很大的概率会选择到这5个模型的,也有可能选择到接近这5个模型中的一种,J算法就是把接近的这一种模型进行归类,从而最终产生一类模型。简单地说,就是把相似模型的内样本合并,知道样本所属都互斥,也就是说每个样本的所属类只能是一个。

J算法所要达到的目的和MultiRansac是一致的,论文中说J算法的效果要比MultiRansac好,我没找到MultiRansac算法的代码,因此没作对比,不敢评价之。J算法也是一种比较新的算法思路,由其改进的T-Linkage算法效果貌似更好,文献可参考2014年CVPR的一篇论文:《T-Linkage: a Continuous Relaxation of J-Linkage for Multi-Model Fitting》。

下面展示下自己实现的结果:

原始数据 分类结果

我设置最大模型生成个数为800,这个数值应该是随着样本数量的增加而增大的,但也不能过大,也是个经验值。本组数据测试下来,成功率约为80%。

程序Demo下载地址:。

需要源码研究的朋友可以留言,需要配置OCV。

接受失败,是我们不常听到或看到的一个命题,我们大都接受的是正面的教育,

Linkage多模型分类算法简介

相关文章:

你感兴趣的文章:

标签云: