欢迎关注更多精彩
关注我,学习常用算法与数据结构,一题多解,降维打击。
参考论文:Object recognition in 3D scenes with occlusions and clutter by Hough voting
关注公众号回复hough voting
可以获得文章链接
霍夫投票
霍夫投票是对霍夫变换在三维场景下的扩展。
其作用是可以识别出可能有效的特征匹配,去除无效的特征。
基本步骤如下:
上图中model是要查找的物体,需要要在scene中找到model。
蓝色圈是我们抽取出来的特征关键点,可以计算出特征向量
根据特征向量可以把距离相近的特征匹配到一起。
上图中绿色的线表示正确匹配,红色的线为错误匹配。
红色的圆圈是model的中心,绿线的空圆是由霍夫投票出来的model在scene中的中心。
蓝点到红点的连线就是投票向量。
如何识别出正确的匹配,就是用到霍夫投票。
基本思想:把投票向量转化到scene空间下,如果某些投票向量都指向同一个地方,说明找到了model在scene中的中心,也就找到了model所在位置,根据特征点位置求一个rt
实际情况不可能完全指向同一个点,可以有一定的容错性,所以用了一个空间(格子)的扩展。
上图中右边蓝色的格子为事先划分好的投票箱。
因为每个特征点都有局部标架,而特征点到中心的向量相对于局部标架的坐标是不变的。
把每个model中的特征关键点对应的中心向量转化到scene中对应局部坐标系下,就可以知道在scene中投票向量指向的空间。
统计出哪个格子里向量指向最多,就认为指向该格子的所有特征点为可信特征点。
变量定义与公式
F i M 的局部标架的 X , Y , Z 轴分别为列向量 L i , x M , L i , y M , L i , z M F_i^M的局部标架的X,Y,Z轴分别为列向量L_{i,x}^M, L_{i,y}^M, L_{i,z}^M FiM的局部标架的X,Y,Z轴分别为列向量Li,xM,Li,yM,Li,zM
V i , G M = C M − F i M 代表 m o d e l 下的全局投票向量 V_{i,G}^M=C^M-F_i^M 代表model下的全局投票向量 Vi,GM=CM−FiM代表model下的全局投票向量
公式 1 V i , G M 在 F i M 的局部标架下的坐标 V i , L M = R i , G L M ⋅ V i , G M 公式1 \ \ V_{i,G}^M在F_i^M的局部标架下的坐标V_{i,L}^M=R_{i,GL}^M\cdot V_{i,G}^M 公式1 Vi,GM在FiM的局部标架下的坐标Vi,LM=Ri,GLM⋅Vi,GM
R i , G L M = [ L i , x M , L i , y M , L i , z M ] T R_{i,GL}^M=[L_{i,x}^M, L_{i,y}^M, L_{i,z}^M]^T Ri,GLM=[Li,xM,Li,yM,Li,zM]T
假设
F i S 是与 F i M 配对的特征点 F_i^S 是与F_i^M配对的特征点 FiS是与FiM配对的特征点
F i S 的局部标架的 X , Y , Z 轴分别为列向量 L i , x S , L i , y S , L i , z S F_i^S的局部标架的X,Y,Z轴分别为列向量L_{i,x}^S, L_{i,y}^S, L_{i,z}^S FiS的局部标架的X,Y,Z轴分别为列向量Li,xS,Li,yS,Li,zS
V i , G S 是 S c e n e 下的全局投票向量 V_{i,G}^S 是 Scene下的全局投票向量 Vi,GS是Scene下的全局投票向量
V i , L S 是 V i , L M 经过 F i M 的局部标架旋转到 F i S 所在标架得到,可知 V i , L S = V i , L M 公式 2 V_{i,L}^S 是V_{i,L}^M经过F_i^M的局部标架旋转到F_i^S所在标架得到,可知V_{i,L}^S =V_{i,L}^M \ \ \ 公式2 Vi,LS是Vi,LM经过FiM的局部标架旋转到FiS所在标架得到,可知Vi,LS=Vi,LM 公式2
所以
公式 3 V i , G S = R i , L G S ⋅ V i , L M + F i S 公式3 \ \ V_{i,G}^S = R_{i,LG}^S \cdot V_{i,L}^M+F_i^S 公式3 Vi,GS=Ri,LGS⋅Vi,LM+FiS
R i , L G S = [ L i , x S , L i , y S , L i , z S ] 这里没有转置符号 R_{i,LG}^S=[L_{i,x}^S, L_{i,y}^S, L_{i,z}^S] 这里没有转置符号 Ri,LGS=[Li,xS,Li,yS,Li,zS]这里没有转置符号
投票详细过程
- 在model和scene表面采集特征关键点,可以使用划分格子,在每个格子里查找到离格子中心最近的点作为特征关键点。
- 利用shot算子,计算出每个特征关键点的局部标架和特征向量。特征算子计算
- 利用kd树查询model 到scene的匹配特征向量。
- 计算投票向量
对于所有配对的特征点
先计算出model场景下的全局投票向量
根据公式1 计算出在model场景下的局部投票向量
再根据公式2,3计算出在scene场景下的投票向量 - 投票,对scene进行格子划分,遍历所有投票向量,对向量指向的格子进行加权
- 筛选出权重比较大的格子,所有指向该格子的特征对为可信特征对
- 利用可信特征对的点云进行icp匹配得到rt。icp
本人码农,希望通过自己的分享,让大家更容易学懂计算机知识。创作不易,帮忙点击公众号的链接,帮忙转发,感激不尽。