PPF算法-OpenCV三维点匹配(SurfaceMatching)⽂章⽬录
参考资料
3D⾯匹配算法简介
1. 参考资料
2. 问题定义
输⼊ :
(1) 要检测⽬标的3D模型数据 。可以通过CAD或者从多张RGBD图像中重建。每个数据项应包含3D点的坐标以及其法向量。
(2) 要检测的场景的3D数据。通过RGBD传感器获得,即我们有⽬标场景的RGB(灰度)图和深度图 。分别由域 和 定义。
机械设计制造及自动化⽬标 :
当场景中存在⽬标时,准确定位到⽬标的位置并求得在场景中⽬标相对于相机的姿态 。
⽅法 :
根据⽬标的3D模型数据 ,训练⼀个⽬标的模型–>在场景中检测3D特征点–>匹配特征点,求得姿态 的⼀个初始估计–>利⽤ICP(iterative clost point)算法,将作为初始输⼊,对求得的姿态进⾏进⼀步的精炼(refine)操作以得到⼀个更准确的结果 -->输出最后的结果
。
3. 多模态特征(Multimodal Feature)
参考资料:
参考论⽂[1]将边缘点分为两类。第⼀类是纹理边缘(texture edge),第⼆类是⼏何边缘(geometric edge)。 所谓的纹理边缘即场景内由于⽬标内部的纹理所产⽣的边缘,相对的,⼏何边缘就是场景内由⽬标到背景的突变所产⽣的边缘。作者论⽂中提到:对于3D匹配⽽⾔,⼏何边缘点是⼀种⽐较好的特征点,⽽纹理边缘点对于匹配并没有多少⽤处,相反反⽽会带来更⼤的计算量。因此论⽂中提到了⼀种⾼效的⼏何边缘点提取⽅法。所谓的多模态特征,便是基于⼏何边缘点 和参考点(reference point) 进⾏定义和计算的。其中参考点 通过对模型进⾏均匀采样获得。
多模态特征对于尺度(scale)变化、沿着视点⽅向的旋转(rotations of the object around the viewing direction)、以及透视畸变(perspective distortions)具有不变性。因⽽对于不同的视点,只需要⼀个模板图⽚就够了。下⾯是计算多模态特征的步骤
(1) 投影矫正
(Perspective Correction)⽰意图如下:
老北京炸酱的做法>个人思想状况将边缘点 和参考点 及其法向量 重投影到⼀个新的平⾯ 上( 是从 上选取的点, 是从 上选取的M I C I R ΩC ΩR p M p 0p 0p p e r r e ∈ΩE r ∈ΩR n r I ′
e I C r I R r
怒不可遏的意思将边缘点 和参考点 及其法向量 重投影到⼀个新的平⾯ 上( 是从 上选取的点, 是从 上选取的点)。新的投影平⾯ 定义为垂直于向量 且焦距与原投影平⾯具有相同的焦距的平⾯。重投影之后,参考点 位于新的投影平⾯的中⼼。通过重投影这⼀预处理,使得多模态特征具有上⾯提到的:沿着视点⽅向的旋转(rotations of the object around the viewing direction)不变形,以及透视畸变(perspective distortions)不变性。后⽂中出现的 和 都是重投影之后的点。
(2) ⼏何边缘检测(Geometric Edge Detection)
⼏何边缘点检测基于两步进⾏:
a. 在RGB图 中利⽤Canny边缘算⼦进⾏边缘检测,求得所有⼏何边缘的候选点。
b. 对第⼀步得到的所有候选点,计算其在深度图 中沿着该点边缘梯度⽅向的⼀条线段上的最⼤和最⼩深度值。如果两者深度差值⼤于⼀定阈值,则认为该点为⼏何边缘点,否则为纹理边缘点。(论⽂中给出深度阈值⼀般1-3即可)
经过这⼀步操作后,我们已经得到了场景中经过重投影后的所有⼏何边缘点 、参考点 、的法线⽅向 以及 的单位向量 ,下⾯开始进⼊多模态特征的计算。(注意,对于所有边缘梯度向外的边缘点,我们将其边缘梯度⽅向进⾏重定向,使得所有的边缘梯度⽅向都是指向物体内部的)
(3) 多模态特征的计算(Calculate Multimodal Feature)
多模态特征是⼀种4维的点对特征(point pair feature),定义如下:
其中每个特征维度定义如下:
其中 $f $ 为相机焦距, 为参考点 的深度。这样的定义,使得 具有缩放不变形。
其中 为边缘的梯度⽅向。
⽰意图如下:4. 模型描述(Model Description)
e ∈ΩE r ∈ΩR n r I e I C r I R I ′v =r ∣r ∣r r r e I C I R e r r n r r v =r ∣r ∣r F (e ,r )=(d (e ,r ),α,α,α)d n v (1)
d (
e ,r )=Z (r )
f ∣e −r ∣
百变围巾系法(2)
趔趄的意思
Z (r )r F (e ,r )α=d ∠(e ,e −r )d (3)
e d α=n ∠(n ,e −r )r (4)
α=v ∠(n ,v )
r r (5)
参考资料:
这⼀步,作者参考了上⾯参考论⽂中 3.2 Global Model Description ⼩节的内容,但是特征描述符使⽤作者⾃⼰提出的PPF多模态特征描述符。在离线阶段,我们需要对⽬标模型在不同视点下显⽰出来的可见部分的表⾯进⾏⼀个描述。这种描述通过⼀个hash表来
完成。该hash表将每⼀个量化(离散化)后的多模态特征向量映射到⼀个具有相似特征向量的特征点对列表中。⽰意图如下:其中左边为模型表⾯上具有相近特征向量的点对,右边为对应的hash表,这些点对被放在同⼀个hash slot中。
5. 投票⽅法(Voting Scheme)
参考资料:
论⽂使⽤⼀种类似于⼴义霍夫变换(GHT)的⽅法,对所有可能的结果进⾏投票,得到所有满⾜条件的结果。再对这些结果进⾏聚类操作得到最好的结果。最后,利⽤ICP算法对结果进⾏Refinement操作。
(1) Voting ⾸先说⼀下参考论⽂中提到的⼀个局部坐标系
:
小动物谜语
如上图所⽰。其定义为:
(m ,α)i s =i T R (α)T m s →g −1x m →g i (6)
其中 将 变换到以原点为起点且法向量 被旋转到 轴上, 对 执⾏同样的操作。这个局部坐标系的意义在于:对于场景中的每⼀个参考点(),确定⼀个位于模型上的与参考点 满⾜最佳匹配的条件的点 以及它们之间的⼀个沿 轴的旋转⾓度 ,那么场景中的模型的姿态便能由 唯⼀确定。因此,对每⼀个参考点 ⽽⾔,它的投票空间即是以所有可能⾓度 为横轴,以模型上的所有点 为纵轴的⼀个2D平⾯。
投票过程便是对每⼀个参考点 ,计算它与场景中每⼀个⼏何边缘点 的PPF特征 ,再通过模型描述中建⽴的hash表,找到所有可能的模型上的对应点对 ,计算对应的参数 并在投票空间中点 上进⾏累加。所有点对 投票完成后,找到投票空间中所有满⾜阈值条件的点
,作为下⼀步操作的输⼊。投票过程⽰意图如下:
(2) Po Clustering
投票完成后,对于每⼀个参考点 我们都到了⼀组满⾜条件的姿态 。对于所有的姿态 ,通过聚类将之分成多个组。对于每⼀个,计算组内所有姿态的分数加权和作为该组的⼀个评分。每个姿态的分数即为该姿态在投票环节所得的票数。选取分数最⾼的组的所有姿态的均值作为最终的结果。
(3) Po Refinement:
仅仅通过上述步骤得到结果,通常还具有⼀定的误差,⼀般旋转⾓度误差在 内,平移距离误差在模型直径的 0.005 内都算正常范围。因此,对于聚类得到的结果,还需要利⽤ICP算法进⾏Refinement操作,从⽽得到最终的最佳匹配结果。ICP算法细节见下⼀节。
ICP 算法
1. 参考资料
2. 问题定义
输⼊:
(1) 场景的3D点的坐标集合 (2) 模型的3D点的坐标集合 ⽬标:
求解⼀个点对集合 ,或者使得两个点集间对应点对某种误差最⼩的运动模型的参数 。⽅法:
Picky ICP 算法。
3. 算法流程T m →g m i n m x T s →g s i s ∈r S s r m i x α(m ,α)i s r αm i s r e i F (s ,e )r i (m ,m )i j αi (m ,α)i i (s ,e )r i (m ,α)i i s r p i P 10。A
B拼音un
C ={(i ,j )∣a ∈i A and b ∈j B }R ,t