Linemod算法小结

 

LineMod方法是由Hinterstoisser[1][2][3]在2011年提出,主要解决的问题是复杂背景下3D物体的实时检测与定位,用到了RGBD的信息,可以应对无纹理的情况,不需要冗长的训练时间。

图1. linemod特征图解

如图1所示,linemod特征采用彩色图像的梯度信息结合物体表面的法向特征作为模板匹配的依据。Linemod可以实现在几千个模板在图片上滑窗搜索达到实时,这与算法的设计以及特征的选取都密不可分,文献[3]详细阐述了算法为何如此高效。

1.计算梯度方向

以彩色梯度为例,Opencv源码先进行了7*7的高斯模糊,然后利用Sobel算子计算了梯度,继而在每个像素点求解出了梯度方向以及幅值,只有超过一定阈值的梯度才会被保留;接着在3*3的领域内统计梯度的方向,数量超过5的梯度方向才会被采用。值得注意的是,这里的方向都是无符号的,也就是只取上一半,Opencv实现的代码里分为了8个方向。如图所示,这种提取特征的方式对于梯度起到了主成分提取和放大的效果。

图2. Linemod特征提取效果和方向分割(彩色图)

2.方向扩散

为了使得匹配有一定的容错度,对图像(非模板)提取完方向后得到了特征图(如图3a)后,在一定领域里让这个特征进行扩散,继而利用模板进行滑窗匹配时就有了一定的容错度。图3扩散的范围是T=3个像素,方向的个数n=5。Opencv实现的代码里T=8, n=8。

图3. 方向的扩散

3.预处理响应图

针对n(=8)个方向和2里得到的扩散图逐个像素进行匹配,匹配的结果是距离最近方向角度的余弦值。值得注意的是,虽然这里有八个方向,但是夹角只有五种情况(算的直线夹角而非射线),故而匹配的结果只有五种,OpenCV里用0,1,2,3,4表示。

这里有8个方向,故而就有8张预处理的图,在利用模板进行匹配的时候就可以直接调用对应方向在对应像素的结果,避免了滑窗时重复的计算。

(很有DP问题解决的味道,用空间换时间)。

图4. 针对每个方向遍历图片计算匹配结果

4.线性存储3中预处理的结果

在进行滑窗匹配计算匹配度时调用3中的数据都是有规律的,每隔滑窗的步长T采取一次数据,故而文章提出直接将3中的数据拉成N2个“长条”,这样就可以将多个数据融合在一起进行加的操作从而减少算法的运行时间。

上文也提及到了匹配的结果只有0-4四种结果,一个char的长度是8位,最多能融合63个特征相加而不溢出,故而OpenCV实现的代码里最多只支持63个特征。

图5. 线性内存存储以及模板匹配的说明

5.扩展到深度图

如图6所示,深度图类似于彩色图,计算平面的法向,同样分为八个方向,可以融合到上述流程进行计算。

图6. 深度图法向特征提取

6.算法效果

如图7所示,linemod不仅算法速度很快,效果也很好。两千个模板遍历图片能达到实时。

图7. 各数据库实验结果对比

OpenCV (3.4.1版本) linemod源码的不足:

1.      金字塔下采样只能每次缩小一半

2.      特征的数量只能小于等于63个

相关文献:

1.    Hinterstoisser S, Holzer S, Cagniart C, et al. Multimodaltemplates for real-time detection of texture-less objects in heavily clutteredscenes[C]// International Conference on Computer Vision. IEEE Computer Society,2011:858-865.

2.    Hinterstoisser S, Lepetit V, Ilic S, et al. Model BasedTraining, Detection and Pose Estimation of Texture-Less 3D Objects in HeavilyCluttered Scenes[C]// Asian Conference on Computer Vision. Springer-Verlag,2012:548-562.

3.    Hinterstoisser S, Cagniart C, Ilic S, et al. Gradientresponse maps for real-time detection of textureless objects.[J]. IEEETransactions on Pattern Analysis & Machine Intelligence, 2012,34(5):876-888.

linemod算法小结相关推荐

  1. 数据挖掘中分类算法小结

    数据挖掘中分类算法小结   数据仓库,数据库或者其它信息库中隐藏着许多可以为商业.科研等活动的决策提供所需要的知识.分类与预测是两种数据分析形式,它们可以用来抽取能够描述重要数据集合或预测未来数据趋势 ...

  2. [转载]SIFT(尺度不变特征变换)算法小结

    原文地址:SIFT(尺度不变特征变换)算法小结[转]作者:慕容天峰 最近一直在看SIFT算法.Sift是David Lowe于1999年提出的局部特征描述子,并于2004年进行了更深入的发展和完善.S ...

  3. 分治算法小结(附例题详解)

    分治算法小结(附例题详解) 我的理解: 分治算法我的理解就是看人下菜碟,我们要解决的问题就好像一群人构成的集体,要我们解决这个问题,那我们就要满足这群人里面每个人不同的需求,也就是写出解决的代码,把每 ...

  4. Fast Gradient Sign Attack(FGSM)算法小结

    Fast Gradient Sign Attack(FGSM)算法小结 对抗攻击引发了机器学习一系列的思考,训练出来的model是否拥有强大的泛化能力?模型的准确率是否真实? 在对抗攻击中添加一些肉眼 ...

  5. 距离(distance)算法小结

    18种和"距离(distance)"."相似度(similarity)"相关的量的小结 在计算机人工智能领域,距离(distance).相似度(similari ...

  6. Tarjan算法小结1——SCC

    引入 许多最短单源路径算法,如Dijkstra,SPFA, floyd, Bellman-Ford等,在运用时只能给出指定点到任意点的最短距离,抑或是给出图中是否有环的信息,并不能准确确定环的个数.包 ...

  7. 基于暗通道先验的单幅图像去雾算法小结

    在开始之前,先看一组去雾的效果图. 1. 关于去雾的意义及算法 去雾在视频监控.航拍.遥感.自动/辅助驾驶等需要在室外复杂.恶劣天气下运行的视觉系统,都可能需要运用到这一技术. 目前去雾算法主要有两个 ...

  8. mysql loop嵌套_MySQL中Nested-Loop Join算法小结

    数据库中JOIN操作的实现主要有三种:嵌套循环连接(Nested Loop Join),归并连接(Merge Join)和散列连接或者哈稀连接(Hash Join).其中嵌套循环连接又视情况又有两种变 ...

  9. SLAM之特征匹配(二)————RANSAC--------翻译以及经典RANSAC以及其相关的改进的算法小结

    本文翻译自维基百科,英文原文地址是:http://en.wikipedia.org/wiki/ransac     RANSAC是"RANdom SAmple Consensus(随机抽样一 ...

最新文章

  1. oracle 信用检查,Oracle EBS 信用(Credit)额度(1)-基础设置
  2. C语言试题二十三之编写一个函数void function(int tt[m][n],int pp[n]),tt指向一个m行n列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中
  3. linux c之用fwrite和fread实现文件的复制
  4. 响应式布局---菜单
  5. PaperNotes(10)-Maximum Entropy Generators for Energy-Based Models
  6. 查询手机号段对应地区编码_2020陕西专升本考试今日起查询成绩啦
  7. JFinal针对ORACLE的timestamp字段解决办法
  8. 写一个简单易用可扩展vue表单验证插件(vue-validate-easy)
  9. 布隆过滤器误判_布隆过滤器原理
  10. 12 个学习新的编程语言的方法
  11. 利用python获取tushare 财经数据
  12. 帝豪云星外对接SWAPIDC教程
  13. css3D制作旋转魔方
  14. echars、象棋、飞机大战、五子棋
  15. 开发者企业公司 邓白氏公司 D-U-N-S Number
  16. torch中乘法整理,*torch.mul()torch.mv()torch.mm()torch.dot()@torch.mutmal()
  17. Python自动化办公:ppt文件操作教程
  18. 使用mediapipe和OpenCV实现摄像头实时人脸检测
  19. AWK----awk与shell交互
  20. 860-什么是MTU?

热门文章

  1. Python:垃圾分类小游戏
  2. android 第三方扇形图,Android扇形图(饼状图)
  3. org.xml.sax.SAXParseException: 元素内容必须由格式正确的字符数据或标记组成。 的解决办法
  4. 设计一个类代表二维空间的一个圆。_绝了!这是什么神仙花园设计! | 2020世界花园大会...
  5. linux cat eof如何指定变量,Linux cat和EOF的使用
  6. msxml4.dll加载失败、动态链接库例程失败
  7. elo匹配算法c语言,ELO算法教程
  8. 基于SSM的音乐视频网站的设计与实现
  9. Effective C++ XMind读书笔记
  10. 计算机网络技术毕业生实习报告_计算机网络专业实习报告