OpenCV学习笔记-BRIEF

原理转载自https://blog.csdn.net/luoshixian099/article/details/48338273,后面的代码是我用python实现的
还有两个博主的讲解也很清楚: 点击打开链接点击打开链接
传统的特征点描述子如SIFT,SURF描述子,每个特征点采用128维(SIFT)或者64维(SURF)向量去描述,每个维度上占用4字节,SIFT需要128×4=512字节内存,SURF则需要256字节。如果对于内存资源有限的情况下,这种描述子方法显然不适应。同时,在形成描述子的过程中,也比较耗时。后来有人提出采用PCA降维的方法,但没有解决计算描述子耗时的问题。

   鉴于上述的缺点Michael Calonder等人在论文提出BRIEF描述特征点的方法(BRIEF:Binary Robust Independent Elementary Features)。BRIEF描述子采用二进制码串(每一位非1即0)作为描述子向量,论文中考虑长度有128,256,512几种,(OpenCV里默认使用256,但是使用字节表示它们的,所以这些值分别对应于16,32,63)同时形成描述子算法的过程简单,由于采用二进制码串,匹配上采用汉明距离,(一个串变成另一个串所需要的最小替换次数)。但由于BRIEF描述子不具有方向性,大角度旋转会对匹配上有很大的影响。

   BRIRF只提出了描述特征点的方法,所以特征点的检测部分必须结合其他的方法,如SIFT,SURF等,但论文中建议与Fast结合,因为会更能体现出Brirf速度快等优点。


BRIEF描述子原理简要为三个步骤,长度为N的二进制码串作为描述子(占用内存N/8):

   1.以特征点P为中心,取一个S×S大小的Patch邻域;

   2.在这个邻域内随机取N对点,然后对这2×N点分别做高斯平滑。定义τ测试,比较N对像素点的灰度值的大小;

                                     

   3.最后把步骤2得到的N个二进制码串组成一个N维向量即可;

                                     

                                

原理解析:

__1.关于做τ测试前,需要对随机点做高斯平滑,由于采用单个的像素灰度值做比较,会对噪声很敏感;采用高斯平滑图像,会降低噪声的影响,使得         描述子更加稳定。论文中建议采用9×9的kernal。

__2.论文中对随机取N对点采用了5中不同的方法做测试,论文中建议采用G II的方法:

                       

1XY都服从在[-S/2S/2]范围内的均匀分布,且相互独立;


2XY都服从均值为0,方差为S2/25的高斯分布,且相互独立,即XY都以原点为中心,进行同方差的高斯分布;


3X服从均值为0,方差为S2/25的高斯分布,而Y服从均值为xi,方差为S2/100的高斯分布,即先确定X的高斯分布得到xi,同方法2,然后以xi为中心,进行高斯分布确定yi


4、在引入了空间量化的不精确极坐标网格的离散位置内,随机采样,得到xiyi

5xi固定在原点处,yi是所有可能的极坐标网格内的值。

__3.最后汉明距离的计算,直接比较两二进制码串的距离,距离定义为:其中一个串变成另一个串所需要的最少操作。因而比欧氏距离运算速度快.

      如果取N=128,即每个特征点需要128/8=16个字节内存大小作为其描述子。

具体代码:
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt


img = cv.imread('img/lena.png')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# Initiate FAST detector
star = cv.xfeatures2d.StarDetector_create()
# Initiate BRIEF extractor
biref = cv.xfeatures2d.BriefDescriptorExtractor_create()

kp = star.detect(gray, None)
kp, des = biref.compute(gray, kp)
print(biref.descriptorSize())
print(des.shape)

cv.namedWindow('img',cv.WINDOW_AUTOSIZE)
cv.imshow('img',img)
cv.waitKey(0)
cv.destroyAllWindows()
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页