IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> python+OpenCV笔记(三十二):特征检测——SIFT与SURF示例 -> 正文阅读

[人工智能]python+OpenCV笔记(三十二):特征检测——SIFT与SURF示例

目录

SIFT算法

SIFT实现流程

SIFT特性与原理

SIFT代码示例

SURF算法

拓展

关键点KeyPoints剖析


SIFT算法

SIFT,即尺度不变特征变换,是用于图像处理领域的一种描述。这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。

SIFT实现流程

1.实例化SIFT

sift = cv2.SIFT_create()

2.找出关键点并计算描述符

keypoints, descriptors = sift.detectAndCompute(gray, None)

特征检测与描述符提取的相关函数:

  1. detect:该函数可用来从一张图像或一组图像中检测特征(即关键点)。
  2. compute:该函数可以用来从关键点中提取(即计算)描述符。
  3. detectAndCompute:该函数可以同时执行检测与计算。
  4. descriptorSize()、descriptorType()、defaultNorm()

3.画出关键点

API:

img = cv2.drawKeypoints(image, keypoints, outImage, color, flags)

参数:

  • image:输入的灰度图像
  • keypoints:从原图中获得的关键点,这也是画图时所用到的数据
  • outImage:输出的图片
  • color:颜色
  • flags:绘图功能的标识设置
    有以下4种:
    1. cv2.DRAW_MATCHES_FLAGS_DEFAULT:只绘制特征点的坐标点,显示在图像上就是一个个小圆点,每个小圆点的圆心坐标都是特征点的坐标
    2.?cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS:绘制特征点的时候绘制的是一个个带有方向的圆,这种方法同时显示图像的坐标,size,和方向,是最能显示特征的一种绘制方式
    3.?cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG:函数不创建输出的图像,而是直接在输出图像变量空间绘制,要求本身输出图像变量就是一个初始化好了的,size与type都是已经初始化好的变量
    4.?cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS:单点的特征点不被绘制

SIFT特性与原理

  1. 旋转、缩放、平移不变性
  2. 区分性好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配
  3. 解决图像仿射变换,投影变换的关键的匹配
  4. 光照影响小
  5. 目标遮挡影响小
  6. 噪声景物影响小

SIFT实现原理参考:

https://www.cnblogs.com/my-love-is-python/p/10414135.html

SIFT代码示例

import cv2
import numpy as np

img = cv2.imread('E:/test3.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

sift = cv2.SIFT_create()
kp, des = sift.detectAndCompute(gray, None)  # 找到关键点

img = cv2.drawKeypoints(gray, kp, img)  # 绘制关键点

cv2.imshow('SIFT', img)
cv2.waitKey(0)

原图:

?SIFT检测结果:

修改drawKeyPoints函数,flags使用cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS

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

SURF算法

(注:目前SURF为专利授权算法,只有在opencv_contrib构建中使用了 OPENCV_ENABLE_NONFREE? CMake标志时才可用)

应用SURF进行特征检测与描述符的提取只需要将SIFT的示例代码稍作修改:

SIFT代码:

sift = cv2.SIFT_create()
kp, des = sift.detectAndCompute(gray, None)  # 找到关键点

修改后的SURF代码:

surf = cv2.xfeatures2d.SURF_create()
kp, des = surf.detectAndCompute(gray, None)  # 找到关键点

拓展

关键点KeyPoints剖析

  • pt:即点,包含图像中关键点的位置x,y
  • angle:表示特征的方向,如前面处理过的图像中的径向线的方向。如果检测关键点的算法能够找到它,则设置它,否则设置为-1
  • size:表示特征的直径
  • response:表示关键点的强度,可对关键点排序或者滤除强度较弱的关键点等等
  • octave:表示发现该特征的图像金字塔层。这是一个非常强大而实用的概念,广泛用于在检测关键点以及使用关键点进一步检测图像上可能大小不同的对象时,实现尺度独立,或者说尺度不变性。为了实现该功能,用相同的算法处理同一图像的不同尺度版本(仅缩小版本),称每一个尺度为金字塔的一个分组或一层。
  • class_id:为一个关键点或者一组关键点分配自定义的标识符

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-02-03 01:12:38  更:2022-02-03 01:15:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 20:45:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码