理论

前面讲的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数组.

python的sift算法_opencv python SIFT(尺度不变特征变换)相关推荐

  1. 论文笔记:SIFT(Scale-invariant feature transform 尺度不变特征变换)

    1.SIFT介绍 1.1.介绍 SIFT(Scale-invariant feature transform 尺度不变特征变换)图像特征匹配,即使图像有旋转.模糊.尺度.亮度的变化,即使使用不同的相机 ...

  2. Python+OpenCV:尺度不变特征变换 (SIFT, Scale-Invariant Feature Transform)

    Python+OpenCV:尺度不变特征变换 (SIFT, Scale-Invariant Feature Transform) 理论 A corner in a small image within ...

  3. OPENCV学习笔记 - SIFT 尺度不变特征变换 Python

    OPENCV学习笔记 - SIFT 尺度不变特征变换 Python 为什么我们需要SIFT尺度不变特征变换? 第一,建立高斯差分金字塔 第二,极值点的精确定位 第三,确定关键点的主方向 第四,构建关键 ...

  4. Python+OpenCV:尺度不变特征变换(SIFT)的加速健壮特性(SURF)

    Python+OpenCV:尺度不变特征变换(SIFT)的加速健壮特性(SURF) 理论 In SIFT, Low approximated Laplacian of Gaussian with Di ...

  5. 【图像】尺度不变特征变换算法(SIFT)

    SIFT(Scale-Invariant Feature Transform),中文含义就是尺度不变特征变换.自1999年由David Lowe提出以后被广泛的应用于CV的各种领域:图像识别,图像检索 ...

  6. 算法 | 尺度不变特征变换匹配算法 Scale Invariant Feature Transform (SIFT)

    /******************************************************/ github:https://github.com/MichaelBeechan CS ...

  7. 数字图像处理学习笔记(二):SIFT(尺度不变特征变换)算法

    数字图像处理学习笔记(二):SIFT(尺度不变特征变换)算法 一.概述: 提到特征点算法,首先就是大名鼎鼎的SIFT算法了.SIFT的全称是Scale Invariant Feature Transf ...

  8. [转载]SIFT(尺度不变特征变换)算法小结

    原文地址:SIFT(尺度不变特征变换)算法小结[转]作者:慕容天峰 最近一直在看SIFT算法.Sift是David Lowe于1999年提出的局部特征描述子,并于2004年进行了更深入的发展和完善.S ...

  9. SIFT(尺度不变特征变换)算法浅析

    SIFT(尺度不变特征变换)算法浅析 SIFT简介 SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像处理领域的一种算法,这是一种 ...

  10. 尺度不变特征变换(SIFT算法)Matlab程序代码测试例子的说明(Lowe的代码)

    目前网络上可以找到的关于SIFT算法Matlab测试代码的资源就是: 1 加拿大University of British Columbia 大学计算机科学系教授 David G. Lowe发表于20 ...

最新文章

  1. 「SAP技术」SAP SD微观研究之根据销售订单查询到该订单发货的批次
  2. C语言经典例21-猴子吃桃问题
  3. 让Dreamweaver支持phtml
  4. 阿里云openapi接口使用,PHP,视频直播
  5. IPhone开发 用子类搞定不同的设备(iphone和ipad)
  6. nodejs项目_多人群聊实现其实很简单:Nodejs+WebSocket+Vue轻松实现Web IM
  7. 拦截游戏窗口被移动_Ruined King官网版-拳头rpg Ruined King游戏最新版下载v1.0
  8. 特征工程系列之自动化特征提取器
  9. Oracle_忘记密码
  10. js进阶 10-4 jquery中基础选择器有哪些
  11. 【服务器环境搭建-Centos】tmpfs,【转载】
  12. 图像处理_描述下SIFT特征?(清晰易懂)
  13. windows超级工具AlantopTool
  14. ai修复照片软件是哪个软件_AI照片修复免费版-AI照片修复软件下载v1.1.0安卓版-西西软件下载...
  15. 简述php语言的特点是_PHP是什么语言?有什么的特点?
  16. HEVC预测块(PU)模式划分显示
  17. 大数据实战项目 -- 离线数仓
  18. opencv中使用摄像头录制视频
  19. 公司内部邮箱如何注册呢?外贸企业邮箱价格多少钱?
  20. 互联网程序员和外包公司的程序员有什么区别?

热门文章

  1. Android sendEmptyMessage(0)里面的“0”是啥意思?
  2. Python数据挖掘-关键字提取
  3. linux系统下安装python3
  4. 微信端支付宝支付,iframe改造,解决微信中无法使用支付宝付款和弹出“长按地址在浏览器中打开”...
  5. mysql监视器MONyog的使用
  6. 判断闰年的方法以及如何获得单链表的倒数第K个元素
  7. MySQL数据库(五)
  8. 游戏开发之C++继承与派生(包含访问控制)(C++基础)
  9. 游戏开发之使用类封装动态数组(vector)(C++基础)
  10. Security+ 学习笔记40 网络安全设备