标签:window nts 解决 point 优化 flag 部分 海量 read
上一节中,我们介绍了Harris特征用于检测,角点在图像旋转的情况下也可以检测到,但是如果减小(或者增加)图像的大小,可能会丢失图像的某些部分,甚至有可能增加角点的数量。这样的损失现象需要一种与图像比例无关的角点检测方法来解决。尺度不变特征变换(Scale-Invariant Feature Transform,SIFT)可以解决这个问题。我们需要一个函数(或变换)来检测特征(或进行特征变换),并且该函数会对不同的图像尺度(尺度不变特征变换)输出相同的结果。需要注意的是,SIFT并不检测关键点(关键点可以由Different of Gaussians检测),但是SIFT会通过一个特征向量来描述关键点周围区域的情况。
SIFT具有一下特征:
我们先用OpenCV库函数演示一下DoG和SIFT特征提取的效果,然后再来讲述一下SIFT的原理。
我们先来介绍一下Different of Gaussians(DoG),DoG是对同一图象使用不同高斯滤波器所得到的结果。DoG操作的最终结果会得到感兴趣的区域(关键点),这将通过SIFT来进行说明。
我们来看看如何通过SIFT得到充满角点和特征的图像:
‘‘‘ SIFT特征 ‘‘‘ import cv2 import numpy as np img = cv2.imread(‘./image/cali.bmp‘) img = cv2.resize(img,dsize=(600,400)) #转换为灰度图像 gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #创建一个SIFT对象 sift = cv2.xfeatures2d.SIFT_create() #SIFT对象会使用DoG检测关键点,并且对每个关键点周围的区域计算特征向量。该函数返回关键点的信息和描述符 keypoints,descriptor = sift.detectAndCompute(gray,None) #在图像上绘制关键点 img = cv2.drawKeypoints(image=img,outImage=img,keypoints = keypoints,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS,color=(51,163,236)) #显示图像 cv2.imshow(‘sift_keypoints‘,img) cv2.waitKey(0) cv2.destroyAllWindows()
标签:window nts 解决 point 优化 flag 部分 海量 read
原文地址:https://www.cnblogs.com/zyly/p/9519011.html