OpenCV开发教程之SIFT关键点检测

19人浏览 / 0人评论 / 添加收藏

SIFT关键点检测

SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像处理领域的一种描述。
这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。
Harris角点具有旋转不变的特性。但是缩放后,原来的角点有可能就不是角点了。

其核心特点:尺度不变特征变换,最经典,精度最高,但计算量最大

典型应用:图像拼接、3D重建、物体识别。

推荐的场景:精度要求第一,不关心速度的科研或离线处理任务。

SIFT原理
图像尺度空间,在一定的范围内,无论物体是大还是小,人眼都可以分辨出来,然而计算机要有相同的能力却很难,
所以要让机器能够对物体在不同尺度下有一个统一的认知,就需要考虑图像在不同的尺度下都存在的特点。
尺度空间的获取通常使用高斯模糊来实现。
不同的高斯函数决定了对图像的平滑程度,越大的值对应的图像越模糊。

实例代码如下:


import cv2
import numpy as np
from opencv_jupyter_ui import cv2_imshow


img = cv2.imread('./images/hand.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#创建sift对象
sift = cv2.SIFT_create()
#进行检测
kp = sift.detect(gray)
# print(kp)
#绘制关键点
cv2.drawKeypoints(gray, kp, img)
cv2_imshow('img', img)

效果图展示如下:

全部评论