1.J-Linkage算法的简介

J-Linkage算法是一种自底向上的一种层次聚类的算法,当然还有很多评价每个聚类距离的算法,例如simple linkage, complete linkage and average linkage,这些感兴趣的小伙伴可以自己查阅相关的资料。

原文题目’Robust Multiple Structures Estimation with J-linkage’。以论文中的例子说明算法要达到的效果:
这里就以三维点的平面拟合进行举例分析

我们的目标是要拟合出三维空间点对应的三个平面,能实现该功能的算法也有不少,这里介绍下J-linkage算法是如何实现的,介绍J-linkage算法之前,需要了解Ransac算法的原理,具体内容可参考LZ的另外一篇文章http://blog.csdn.net/felaim/article/details/76422803,或者这一篇http://grunt1223.iteye.com/blog/961063。

其实思想也很简单:ransac算法是要找到样本数据中满足某种模型的最大数据集合。这里的最大是指集合的数据个数。J-linkage算法是要找到多个数据集合,以上图为例,目的是要找到3个数据集合,每个数据集合能拟合出一个平面。

首先提出一个定义:(Jaccard distance)给定两个集合A和B,the jaccard distance是

dJ(A,B)=|A⋃B|−|A⋂B||A⋃B|d_J(A, B) = \frac {|A\bigcup B|-|A\bigcap B|}{|A\bigcup B|}

jaccard distance评价了两个集合的重叠程度,范围是从0(同一个集合)到1(完全独立的集合),这里截止的值被设为1,这也就意味着算法把有重叠部分的preference set(PS) link起来。所以聚类的点有以下两个性质:
(1)对于每个聚类,至少存在一个模型包含所有在PS的点(i.e.,一个可以拟合所有数据的模型)
(2)一个模型不可能存在于PS中两个不同聚类的点集(否则他们就会被link)。
每个聚类的点定义至少一个模型,如果更多的模型拟合一个聚类的所有点,那么他们肯定很相似。最后利用最小二乘算法估计每个聚类的模型。

异常点会融合成比较小的聚类,通常情况下,会根据不同的应用,可以设置不同的阈值。如果异常点所占的百分比是已知的或者是可以估计的(正如RANSAC假设的一样),我们是可以拒绝所有最小的聚类直到把异常点全部剔除。

J-linkage算法的流程是:

输入:数据点的集合,每个点被表示成它的preference set(PS)
输出:属于相同模型的点集的聚类

(1)把每个点看成是自己的一个聚类;

(2)把PS的一个聚类定义为其点的PS的交集;

(3)在所有的聚类中,在各自PS中,选择两个Jaccard distance最小的聚类,计算其模型参数;

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

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

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

2.具体算法的实现理解

程序首先输入的是三维点云的坐标(X,Y,Z),将三维数据可视化如下图所示:

% Generate an exponential Cumulative distribution function(cdf)
% needed to generate a non-uniform sampling
[nearPtsTab] = calcNearPtsTab(CastelVecchio, 'exp', sigmaExp);% Generate Hypothesis(random sampling)
[totm, totd] = generateHypothesis(CastelVecchio, @getfn_plane, @distfn_plane, @degenfn_plane, 3, 4, 100,numberOfTrials, nearPtsTab);% Perform J-Linkage clusterization
[T, Z, Y, totdbin] = clusterPoints(totd, inliersThreshold);

因为主要考虑的J-Linkage的算法,所以直接说最后的那一行代码吧

function [T, Z, Y, totdbin] = clusterPoints(totd, inliersThreshold)#先按照设定的阈值把PS映射到只有{0, 1}的空间集合中
corM = find(totd < inliersThreshold);
totdbin = false(size(totd));
totdbin(corM) = true;#计算jaccard distance
Y = pDistJaccard(totdbin');#对每个聚类进行连接相交
Z = linkageIntersect(Y, totdbin);#最后进行聚类
T = cluster(Z,'cutoff',1-(1/(size(totdbin,1)))+eps,'criterion','distance');

最后就得到了博客一开始放的那张效果图,先说这么多啦O(∩_∩)O哈哈~

参考文献:

[1]Toldo R, Fusiello A. Robust Multiple Structures Estimation with J-Linkage[C]// European Conference on Computer Vision. Springer-Verlag, 2008:537-547.

J-Linkage clustering算法的一点理解相关推荐

  1. 图论最短路:Bellman-Ford与其优化SPFA算法的一点理解

    文章目录 前言 一.对Bellman-Ford的深入理解 1. Bellman-Ford有什么用? 2. 什么是松弛操作? 3. Bellman-Ford的k次迭代意义? 4. 一个重要定理 5. 对 ...

  2. YOLOv3 算法的一点理解

    <p>今天讲一讲 YOLOv3, 目标检测网络的巅峰之作, 疾如风,快如闪电.</p> 算法背景 假设我们想对下面这张 416 X 416 大小的图片进行预测,把图中 dog. ...

  3. Mean-shift算法的直观理解

    Mean-shift算法的直观理解 0 前言 暑假的时候参加移动计算竞赛打了下酱油,接触到了Mean-shift算法,用于做目标跟踪.在那段时间也在网上查阅了不少关于这个算法的资料,可是总感觉它们都比 ...

  4. Hamiltonian Monte Carlo抽样算法的初步理解

    Hamiltonian Monte Carlo抽样算法的初步理解 接受拒绝采样算法 MCMC回顾 Hamiltonian dynamics 拉格朗日方程 从牛顿方程出发推导拉格朗日方程 勒让德变换 哈 ...

  5. 我关于KMP算法的初步理解

    唔,时间过得好快,下学期都过了一半了,因为寒假玩去了,数据结构也没学完.后来看到KMP算法的时候,第一次一晚上就想一个问题,当然,总算是有些眉目了,下面是我对KMP算法的一些理解,当然还没有看完,但是 ...

  6. 重磅MIT开源人工智能算法评估和理解对抗Logit配对的稳健性

    重磅MIT开源人工智能算法评估和理解对抗Logit配对的稳健性摘要:我们评估了对抗性Logit Pairing的稳健性,这是最近针对广告范例提出的防御措施. 我们发现,使用Adversarial Lo ...

  7. 协同过滤算法的简单理解《推荐系统实践》

    协同过滤算法的简单理解 本文主要是讲解一下<推荐系统实践>中UserCF和ItemCF这两种基于领域的推荐算法,写出自己的理解. UserCF(基于用户的协同过滤算法) 这种推荐算法的出发 ...

  8. 对PCIE设备访问及其配置空间的一点理解

    讲讲对PCIE总线协议的一点理解吧.感觉每一年又会多一点理解,但不懂得地方仍很多. PCI总线是拓扑结构,PCI总线从0开始,不超过256(但一般不会一层一层挂太多).Device不超过32,Func ...

  9. 国密SM2算法的只求理解不求甚解 (4/5)SM2算法加解密协议

    国密SM2算法的只求理解不求甚解 (1/5)前置数学知识:模运算 国密SM2算法的只求理解不求甚解 (2/5)前置数学知识:平面几何 国密SM2算法的只求理解不求甚解 (3/5)SM2算法数学模型 国 ...

最新文章

  1. java 反射 速度_Java反射获取实例的速度对比分析
  2. gitlab 邮件配置(smtp)
  3. python编程人脸识别工具_几行代码带你实现人脸识别。Python 就是这么简单
  4. spring 事务隔离级别和传播行为_Spring事务传播实战
  5. VTK:PolyData之MeshQuality
  6. 二、抽象层的Builder模式
  7. linux errno定义
  8. Hashtable、HashMap、TreeMap总结
  9. 初识编码 gbk unicode utf-8
  10. ARMV8体系结构简介
  11. SQL关于数据库完整性
  12. Atitit 软件集成法 eai 目录 1. 表示集成 ui界面集成 最简单 1 2. 数据集成 1 3. 控制集成 功能集成 应用集成 1 4. 业务流程集成 1 5. 企业应用集成 1
  13. mysql免安装教程_MySQL免安装版环境配置图文教程
  14. 2021爱分析·快消品牌商数字化厂商全景报告
  15. LV的几种适配器特点
  16. 头条视频中视频玩法技巧
  17. 如何将倒序改为正序C语言,快速排序(正序+倒序)C语言版
  18. 将边缘云装进胶囊数据中心需要几步?
  19. 数学基础 - 第十五章 分式
  20. 2019南昌邀请赛网络赛

热门文章

  1. 实名认证需谨慎,避免陷入隐私泄露风险
  2. cxfreeze 打包exe
  3. Eclipse插件版本
  4. 【matplotlib】绘制简单二维、三维图像
  5. 华为开源数据库openGauss
  6. 计算机考数学二英语二的学校,2020考研答疑:数学二和英语二,该怎么提前准备呢_工作和考研要如何选择-聚创考研网...
  7. Bolb转String
  8. 什么是SQL触发器?SQL触发器是什么意思?
  9. 菜鸟学Python之求水仙花数
  10. C++ int类型转 LPCTSTR类型