您的位置:首页 > 其它

LATCH: Learned Arrangements of Three Patch Codes

2015-07-13 17:04 225 查看
Gil Levi and Tal Hassner,The Open University of Israel,CVPR15,Gil’s blog有一系列讲binary特征的文章,记录了BRIEF、ORB、FREAK、BRISK。

this feature won the CVPR 2015,OpenCV State of the Art Vision Challenge,in the Image Registration category. LATCH is now integrated into OpenCV 3.0,项目链接

阅读时间:2015-07-12~13

简介

该算法是二值化特征描述方法的一个优化变种,一般的二值化特征描述主要通过计算特征点窗口内n个点对的比较值形成一个bit串,作为该特征点的特征描述子,这样的bit串特征描述子在图像匹配计算时可以通过同或计算汉明码,大大提高计算速度,但是点对的比较会有一个明显的缺点,就是受噪声影响较大,虽然后续的一些算法通过高斯模糊进行滤波,但是滤波后图像信息会有一定减少,建立在此基础上,作者提出了一种通过计算窗口内像素块的比较值形成bit串,同时作者也提出了如何定位像素块的方法。

该特征的特点

此为特征的binary描述子,其特征模式需要学习(可能受限于训练场景,与fast有相似的问题);

特征描述时能接受特征检测子的方向信息而进行相应旋转,故描述子具旋转不变性;

耗时介于binary特征和非binary特征之间,判别性也介于binary特征和非binary特征之间;

像素块比较

假设特征点窗口内有3个块P1P_1, P2P_2, P3P_3 ,每个块包含m×mm \times m个像素,每个块可以用一个m×mm \times m矩阵表示,块之间的比较为Frobenious norm,即两块中各个像素对应位置处像素差的平方和,因此该特征点处该像素块对应的特征可以表示为:

g(W,st)={1if∥∥Pt,a−Pt,1∥∥2F>∥∥Pt,a−Pt,2∥∥2F0otherwiseg(W,{s_t}) = \left\{ \matrix{
1\quad if\left\| {{P_{t,a}} - {P_{t,1}}} \right\|_F^2 > \left\| {{P_{t,a}} - {P_{t,2}}} \right\|_F^2 \cr 0\quad otherwise \cr} \right.

若需要256 bits长的特征描述子,则需要选择256个3像素块,每个3像素块得到一个bit结果。

像素块模式

在像素块比较中需要计算像素块内各个像素点的值,因此计算前提是定位像素快,一个很小的特征窗口能够产生非常多的像素块的组合,有些像素块对图像匹配不重要,有些非常重要,本节主要介绍如何选择像素块的组合方式使得匹配结果最优。本文中像素块位置的确定是通过有监督学习的方法进行。

数据集

首先构造一个训练数据集,该数据集来自Learning Local Image Descriptors Data,以下用LLIDD代表该数据集,LLIDD数据集主要对三个场景(Literty, Ntore Dame , Halp Dome)的3D场景构造图像中处理而来,首先通过Noah Snavely’s Photo Tourism算法计算3D构造图初始特征点,再通过立体深度地图匹配不同图像只能够对应的特征点,而数据集则是特征点领域内64x64的图像块。同时建立标签文件,记录各个图像块是否是来自同一目标。本文作者在LLIDD数据集的基础上创建了一个50k的数据样本对,每对数据样本包括两个图像块,同时有一个标签表示两个图像块是否相同,最终数据集包括一半匹配一半不匹配的图像块。

训练

随机产生56k个3像素快,即

S={St}t=1...T={[Pt,1,Pt,1,Pt,3]}t=1...T T=56000S=\left\{S_t\right\}_{t=1...T}=\left\{\left[P_{t,1}, P_{t,1}, P_{t,3} \right]\right\}_{t=1...T} ~~ ~~~~T=56000

再用每个3像素块去对每个数据对进行匹配,若匹配结果与标签结果相同则赋予一个值为1的bit,若不相同则赋予一个值为0的bit,这样对数据集中所有数据对匹配后将产生一个长度为50k的bit串,将bit串中每位值相加即为该像素快的匹配能力。对所有像素块都进行该运算后再对匹配能力进行排序,同时删除与前面3像素快相关度大于0.2的3像素快(降低最终triplets之间的相关性)。另外在程序计算描述子的时候3像素块的选取采用增量各点选取的方法(0, 6, 12,…)。这样选取最大的n个作为3像素快候选集。

性能

耗时方面

特征描述计算耗时高于其他binary特征,低于非binary特征,以下是计算一个特征点时的耗时。



精度方面

匹配精度高于其他binary特征,低于非binary特征。

代码

描述子计算伪代码:

PatchSize = 7 * 7   // 图像块大小
BytesLength = 32    // 每个特征描述子的长度 单位:Byte
descriptors = Mat(Keypoints.length, BytesLength, Byte) // 描述子初始化 为一个类型类Byte的
grayScale = convertToGray(img)
foreach keyPoint in Keypoints:
for i = 1 to BytesLength:
descriptors[k][i] = 0
for j = 0 to 7
get one tripet Pathes P1 P2 P3 their position
rotate the pixel in P1 P2 P3 to the direction of the Keypoint
compute the bit result: b = (P1-P2) > (P3-P2) ? 1 : 0
descriptors[k][i] += (Byte)b<<j
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: