这篇博文主要参考:
《range data analysis by free-space modeling and tensor voting》,By Bradford James King,主要参考第四章。http://download.csdn.net/detail/u010658879/8514365
1.完备空间、子空间、法向空间与切向空间的关系
N-D空间中,n组基张成完备空间
∑n1eeT
(空间中任一点可由n组基线性表示)。从n组基中任选d组基,该d组基张成完备空间的子空间(子空间中任一点可由该d组基线性表示,而属于完备空间但不属于该子空间的点不可由该d组基线性表示)。
三维平面上任一点有唯一单位法向量
e1
,该法向量
e1
可视为三维空间的一组基,该法向量张成的空间称为法向空间
e1eT1
(即三维空间的一个子空间)。
三维平面上任一点的切向是一个面(也是三维空间的一个子空间),该面可由垂直于
e1
的另外两组基
e2
和
e3
张成,称为切向空间,该空间表示为
e2eT2+e3eT3
。三维空间中,法向空间加切向空间构成完备空间(这一点非常重要),
e1eT1+e2eT2+e3eT3=∑31eeT
,即三阶单位矩阵。读者可联想下三维空间中直线的切向与法向空间,进而便于理解到N-D空间中。
2.算法总流程
三维空间中,法向空间由一组基张成时,对应张量算法中的棒张量。法向空间由两组基张成时,对应张量算法中的板张量。依次类推。下图中
d
<script type="math/tex" id="MathJax-Element-1103">d</script>表示法向空间的维度。
输入点云默认只包含位置信息,所以初始化编码时,默认为球张量~
第一次投票只对点云位置投票,所以称作sparse voting。
第二次投票是对空间内所有位置的投票(空间内不只有点云,还有unoccupied space),称作dense voting。
最后一步是空间结构推理:面、线、交点、free space、unsure space、unseen space等
3.算法实现详述
参考:《range data analysis by free-space modeling and tensor voting》,By Bradford James King,第四章。
伪代码实现:参考附录2
4.个人对tensor voting的感受
参考《range data analysis by free-space modeling and tensor voting》,By Bradford James King的文章后,我觉得tensor voting的理论部分还是挺容易理解的。有了伪代码后,
要用C++实现tensor voting关键在于自己构建合适的数据结构。
5.tensor voting提取特征后呢~~
特征描述?,特征匹配?