资讯专栏INFORMATION COLUMN

opencv python SIFT(尺度不变特征变换)

marek / 3181人阅读

摘要:理论前面讲的角点检测器中的角点在旋转的图像中也是角点,但是缩放呢如果缩放图像,则角可能不是角例如,检查下面的简单图像,当在同一窗口中放大时,小窗口内的小图像中的角是平坦的所以角点检测器不是尺度不变的所以,在年,不列颠哥伦比亚大学的在他的论

Introduction to SIFT (Scale-Invariant Feature Transform)

理论

前面讲的Harris角点检测器中的角点在旋转的图像中也是角点,但是缩放呢? 如果缩放图像,则角可能不是角.例如,检查下面的简单图像, 当在同一窗口中放大时,小窗口内的小图像中的角是平坦的.所以Harris角点检测器不是尺度不变的.

所以,在2004年,不列颠哥伦比亚大学的D.Lowe在他的论文中提出了一种新的算法,即尺度不变特征变换(SIFT).

SIFT特征是基于物体上的一些局部外观的兴趣点而与影像的大小和旋转无关。对于光线、噪声、微视角改变的容忍度也相当高.基于这些特性,它们是高度显著而且相对容易撷取,在母数庞大的特征数据库中,很容易辨识物体而且鲜有误认.使用SIFT特征描述对于部分物体遮蔽的侦测率也相当高,甚至只需要3个以上的SIFT物体特征就足以计算出位置与方位.在现今的电脑硬件速度下和小型的特征数据库条件下,辨识速度可接近即时运算.SIFT特征的信息量大,适合在海量数据库中快速准确匹配.

OpenCV中的SIFT
import numpy as np
import cv2

img = cv2.imread("img.jpg")
gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

sift = cv2.xfeatures2d.SIFT_create()
kp = sift.detect(gray,None)

img=cv2.drawKeypoints(gray,kp,img)

cv2.imshow("img",img)
cv2.waitKey()

NOTE:
lz直接运行上述代码时,程序报错:
module "cv2.cv2" has no attribute "xfeatures2d",后面查询原因知道OpenCv3.x以后只包含部分内容,需要神经网络或者其他的函数需要导入opencv_contrib,所以需要pip install opencv-contrib-python

sift.detect()函数在图像中查找关键点, 如果只想搜索图像的一部分,可以传递掩膜.
OpenCV还提供了cv2.drawKeyPoints()函数,该函数在关键点的位置上绘制小圆圈.如果传递标志cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS,它将绘制一个大小为keypoint的圆圈并显示它的方向.

import numpy as np
import cv2

img = cv2.imread("img.jpg")

gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

sift = cv2.xfeatures2d.SIFT_create()
kp = sift.detect(gray,None)

img=cv2.drawKeypoints(gray,kp,img,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

cv2.imshow("img",img)
cv2.waitKey()

计算描述符,OpenCV提供了两种方法:

如果已经找到了关键点,可以调用sift.compute()来计算找到的关键点的描述符, 例如:kp,des = sift.compute(gary,kp)

如果没有找到关键点,可以使用函数sift.detectAndCompute()在一个步骤中直接查找关键点和描述符

sift = cv2.xfeatures2d.SIFT_create()
kp, des = sift.detectAndCompute(gray,None)

kp是关键点列表,des是形状为Number_of_Keypoints×128的numpy数组.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42063.html

相关文章

  • Programming Computer Vision with Python (学习笔记十一)

    摘要:降采样的目的是为了综合所有不同清晰度的图像进行关键点提取,这种关键点携带了不同清晰度的信息,对缩放具有不变性。是对的一种改进,主要特点是快速。的达到维,导致的比较耗时,使用哈尔小波转换得到的方向,让的降到维,减少了一半,提高了匹配速度。 尺度不变特征变换(Scale-invariant feature transform, 简称SIFT)是图像局部特征提取的现代方法——基于区域/图像块...

    levius 评论0 收藏0
  • PythonSIFT算法的实现

    摘要:安装我们可以使用库中的函数实现,但由于专利保护,很多版本的库已无法提供该函数,目前仅版本的库可使用此函数。算法选择其中最优的四个点程序结果 本文侧重于如何使用Pyt...

    Lsnsh 评论0 收藏0
  • opencv python SURF

    摘要:理论在上一章中,我们看到了的关键点检测和描述但它相对较慢,人们需要更加快速的版本,所以年引入了一种名为的新算法顾名思义,它是的加速版本作为尺度不变特征变换算法的加速版,算法在适中的条件下完成两幅图像中物体的匹配基本实现了实时处理,其快速的 Introduction to SURF (Speeded-Up Robust Features) 理论 在上一章中,我们看到了SIFT的关键点检...

    andot 评论0 收藏0
  • OpenCV】 ⚠️高手勿入! 半小时学会基本操作 24⚠️ SIFT 算法

    【OpenCV】 ⚠️高手勿入! 半小时学会基本操作 24⚠️ SIFT 算法 概述图像尺度空间多分辨率金字塔高斯差分金字塔计算极值点 SIFT 算法函数实战 概述 OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. (第 24 课) 图像尺度空间 在一定的范围内, 无论物体是大还是小, 人眼都可以分辨出来. 而计算机要...

    DevTalking 评论0 收藏0
  • opencv python 使用特征匹配和单应性查找对象

    摘要:为了解决这个问题,算法使用和可以通过参数来设定所以好的匹配提供的正确的估计被称为,剩下的被称为返回一个掩模,这个掩模确定了和点 Feature Matching + Homography to find Objects 联合使用特征提取和 calib3d 模块中的 findHomography 在复杂图像中查找已知对象. 之前在一张杂乱的图像中找到了一个对象(的某些部分)的位置.这些...

    BDEEFE 评论0 收藏0

发表评论

0条评论

marek

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<