1. sift = cv2.xfeatures2d.SIFT_create() 实例化
参数说明:sift为实例化的sift函数
2. kp = sift.detect(gray, None) 找出图像中的关键点
参数说明: kp表示生成的关键点,gray表示输入的灰度图,
3. ret = cv2.drawKeypoints(gray, kp, img) 在图中画出关键点
参数说明:gray表示输入图片, kp表示关键点,img表示输出的图片
4.kp, dst = sift.compute(kp) 计算关键点对应的sift特征向量
参数说明:kp表示输入的关键点,dst表示输出的sift特征向量,通常是128维的
第一步:进行高斯模糊,获得不同模糊度的图片
第二步:进行直接的降采样,获得多分辨的图片
第三步:将高斯模糊后的图片进行相减操作获得差分金字塔,使用DOC公式
第四步:对差分金字塔进行上下金字塔的比较,获得极值点
第五步:使用泰勒展开式,获得精确的极值点
第六步:使用herrian公式,通过特征向量变化,比较λ1和λ2的大小,用于消除边界点
第七步:使用sobel算子,计算特征点的梯度大小和梯度方向
第八步:统计特征点临近位置的梯度方向,做出直方图,求出特征点的主要方向
第九步:对应于特征的主要方向,进行旋转,保持特征点大小的方向不变性
第十步:对领域的特征点进行统计,按照4*4的数目,每个区域生成8个方向,即每个方向的出现的次数作为特征,一般使用16个区域,即16*8= 128个特征
shift特征点:用来进行侦查和描述图片的特征,它在空间尺度中寻找极值点,并提取位置,尺度(梯度大小),旋转不变量(方向)
流程:
第一步:先对图像进行高斯模糊,获得5-6张的模糊后的