LBD算法源自2013年文章《An efficient and robust line segment matching approach based on LBD descriptor and pairwise geometric consistency》
总体流程

1. 在尺度空间内提取线段
1.1. 构建尺度空间
当拿到一张图片,我们先构建一个尺度金字塔,就和sift算法所实现的那样,通过一组尺度因子scale factors和高斯模糊Gaussian blurring,对一张图片进行N个下采样,就可以得到N层尺度金字塔,最下方是原图,每高一层就是一层高斯模糊后的图像。但是和Sift算法不同,连续两个层之间并没有内层。
1.2. 提取线特征
2. 构建线段描述符
2.1. 线段支持域的条带表示方法
上一步得到了尺度空间中的线段,接下来我们可以通过线段构成的LSR线段支持区域计算描述符。
我们将LSR支持区域分割为一组条带{B1,B2,B3……Bm},这些条带是LSR支持区域的子区域,并且他们与线段是平行的关系。我们将LSR区域分割为 m 个条带,每一个条带的像素宽度为 w 。比如上图就是 m = 5 , w = 3的LSR区域图
在这里其采用了和MSLD类似的方法,定义了两种方向构成局部2D坐标系,来区分有相反梯度方向的平行线并使描述符旋转不变。
直线方向
表示直线所朝的方向。
正交方向
表示
方向的顺时针垂直方向。
这条线的中点被选为局部坐标系的原点。并且LSR内的每个像素的梯度投影到这个局部坐标系中
,其中
是图片坐标系中的像素梯度,
是局部坐标系中的像素梯度。
受到Sift和MSLD的启发,在
方向上的每一行都应用两个高斯函数。
首先,在LSR内的第i行上安排一个全局权重系数weight
,其中
表示LSR中第i行到中心行的距离,并且
其次,对于Bj条带和它的相邻条带Bj+1和Bj-1中的每一行,我们为第k行分配一个局部权重系数
,其中
是第k行到Bj条带中心行的距离,并且
此方法描述子区域的优点:
- 首先,它对线段方向
上的细小位置变化更具有鲁棒性,因为在这个方法中,条带边界的微小变化时,条带内的大部分图像内容依然保持不变。这一特性非常重要,因为通常情况下,由于线段端点的不稳定性,一条线在
方向的位置精度比
方向要低。 - 其次,由于
方向条带间没有重叠部分,所以其计算效率更高,并且高斯权重直接应用于每一行像素,而非每一个像素。
2.2. 构造LBD条带描述符
BDj 的计算
(对于条带中第K行,累计该行中四个方向上像素的梯度,分别是
方向,
反方向,
方向,
反方向):
其中
是高斯系数,所以一行像素我们总结出4个方向的梯度数据。
通过累计条带 Bj 相关联的所有行的梯度信息,我们可以构造一个条带描述符矩阵 BDMj 表示第j个条带的描述信息。 
然后我们计算 BDj ,BDj 由 BDMj 的平均向量 Mj 和标准方差向量 Sj 构成
然后对LDB的均值部分和标准方差部分分别进行归一化,因为他们大小不同。并且为了减小非线性光照的影响,对每个LBD维度进行约束,小于经验值0.4。最后我们重新归一化约束向量得到一个单元LBD。
本文转载自:https://blog.csdn.net/chishuideyu/article/details/,非常感谢!
https://github.com/chishuideyu/LBD_and_LineMatching
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199386.html原文链接:https://javaforall.net
