本文内容与截图主要参考[A Computational Framework for Segmentation and Grouping,Gérard Medioni, Mi-Suen Lee and Chi-Keung Tang]
(http://download.csdn.net/detail/u010658879/8476737 A Computational Framework for Segmentation and Grouping)
和A Perceptual Organization Approach to Computer Vision and Machine Learning
算法流程
算法流程图示:
- Input tokens: 输入点云,分三类:只包含位置信息的点、包含位置和法向信息的点、包含位置和切向信息的点。
- Encode: 参考输入信息,将输入点云参照下两幅截图图编码成张量(tensor tokens)。每个输入点都对应一个张量。如无特殊说明,后面提到“张量”,都指二阶张量。
二维张量编码参考:
比如,输入点 p ( x , y ) p(x,y) p(x,y)包含法向信息 n ( n x , n y ) n(n_x,n_y) n(nx,ny)(即棒张量),则该点编码为张量
S = ( λ 1 − λ 2 ) e ^ 1 e ^ 1 T + λ 2 ( e ^ 1 e ^ 1 T + e ^ 2 e ^ 2 T ) , S=(\lambda_1-\lambda_2) \hat e_1 \hat e_1^T+\lambda_2( \hat e_1 \hat e_1^T+\hat e_2 \hat e_2^T), S=(λ1−λ2)e^1e^1T+λ2(e^1e^1T+e^2e^2T),其中 ( λ 1 − λ 2 ) = 1 , 表 棒 张 量 显 著 性 = 1 ; λ 2 = 0 , 表 球 张 量 显 著 性 = 0 ; e ^ 1 = n ^ (\lambda_1-\lambda_2)= 1,表棒张量显著性=1;\lambda_2=0,表球张量显著性=0;\hat e_1=\hat n (λ1−λ2)=1,表棒张量显著性=1;λ2=0,表球张量显著性=0;e^1=n^
即 S = n ^ n ^ T S= \hat n \hat n^T S=n^n^T,其他类型类似。
三维张量编码参考:
- Tensor Voting:
This process is similar to a convolution with a mask, except that the output consists of a tensor, instead of a scalar.
每个输入***点***都对应一个***张量***,产生一个***张量场***,对邻域的不同点有不同的场强影响。二维棒张量场和球张量场如下图左,下右图表示
O
O
O点产生的棒张量场可作用到领域点
P
P
P张量上。
现讨论二维张量的投票过程:先设棒张量对邻域点
p
p
p作用的张量算子
F
S
(
p
)
F_S(p)
FS(p),球张量对邻域点
p
p
p作用的张量算子
F
B
(
p
)
F_B(p)
FB(p),后面会具体提到几种张量算子的具体形式;
假设输入只有两点
p
1
,
p
2
p_1,p_2
p1,p2(可推广到无数个点),分别编码为
S
0
,
i
=
(
λ
i
,
1
−
λ
i
,
2
)
e
^
1
e
^
1
T
+
λ
i
,
2
(
e
^
1
e
^
1
T
+
e
^
2
e
^
2
T
)
=
S
0
,
i
S
+
S
0
,
i
B
,
S_{0,i}=(\lambda_{i,1}-\lambda_{i,2}) \hat e_1 \hat e_1^T+\lambda_{i,2}( \hat e_1 \hat e_1^T+\hat e_2 \hat e_2^T)=S_{0,i}^S+S_{0,i}^B,
S0,i=(λi,1−λi,2)e^1e^1T+λi,2(e^1e^1T+e^2e^2T)=S0,iS+S0,iB,下标0表示第0次投票后,
i
i
i取值为
p
1
,
p
2
p_1,p_2
p1,p2。
Stick vote.点
p
1
p_1
p1收集到的棒投票张量就是点
p
2
p_2
p2投出的棒投票张量,即
F
S
(
p
1
)
F_S(p_1)
FS(p1),一次棒张量投票后点
p
1
p_1
p1的张量变为
S
1
,
p
1
S
=
S
0
,
p
1
S
+
(
λ
p
2
,
1
−
λ
p
2
,
2
)
F
S
(
p
1
)
S_{1,p_1}^S=S_{0,p_1}^S+(\lambda_{p_2,1}-\lambda_{p_2,2})F_S(p_1)
S1,p1S=S0,p1S+(λp2,1−λp2,2)FS(p1)
Ball vote.同理有点
p
1
p_1
p1收集到的球投票张量
F
B
(
p
1
)
F_B(p_1)
FB(p1),一次球张量投票后点
p
1
p_1
p1的张量变为
S
1
,
p
1
B
=
S
0
,
p
1
B
+
λ
p
2
,
2
F
B
(
p
1
)
S_{1,p_1}^B=S_{0,p_1}^B+\lambda_{p_2,2}F_B(p_1)
S1,p1B=S0,p1B+λp2,2FB(p1)
最后汇总一次投票后的各个点的张量
S
1
,
i
=
S
1
,
i
S
+
S
1
,
i
B
S_{1,i}=S_{1,i}^S+S_{1,i}^B
S1,i=S1,iS+S1,iB
三维张量场如下图,三维场!!
-
Tensor Decomposition:由于任一张量可分解为球张量、板张量、棒张量的线性组合,一次投票后,各点张量信息得到改善,再次进行张量分解为下图的形式
然后进行二次张量投票,与第一次不同的是,这一次球张量不再有投票权(加速算法的目的)。 -
几种张量算子(Tensor kernel)
把二维棒张量作为张量投票基本算子,因为其他几类张量算子都可由棒张量算子推导获得。
显著性衰减函数
s s s-曲线长度, κ κ κ-曲率, c c c-控制曲率衰减程度, σ σ σ-投票邻域范围, l l l-两点间的距离
基本算子中唯一的变量就是 σ σ σ,只要 O , P O,P O,P两点定了其他量也恒定了。
二维球张量算子
R ( θ ) R(\theta) R(θ)-旋转 θ \theta θ角度的二维矩阵。为求方便,会用累加求和
B S O ( P ) = ∑ i = 1 K v → i v → i T B_{SO}(P)=\sum_{i=1}^K \overrightarrow v_i \overrightarrow v_i ^T BSO(P)=i=1∑KviviT
KaTeX parse error: Unexpected character: '' at position 2: v̲_i are the stick votes tensors with angle 2 π K i \frac {2\pi} K i K2πi
三维球张量算子
三维板张量算子
~~~~~~~~~~华丽分割线~~~~~~~~~~
MATLAB代码仿真:可从github上找到,也可以从[https://download.csdn.net/download/u010658879/8515907]下载
后来找到更好的tensor voting相关资料(包含伪代码实现,见附录2),下载地址[https://download.csdn.net/download/u010658879/8514365]