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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【OpenCV--关键点检测】 -> 正文阅读

[人工智能]【OpenCV--关键点检测】

目录

一、SIFT算法

1.描述:

2.实现:

3.示例:

?二、FAST算法

1.描述:

2.实现:

3.示例:

?三、ORB算法

1.描述:

2.实现:

3.示例:


一、SIFT算法

1.描述:

Harris和Shi-Tomasi角点检测具有旋转不变性,但是都不具有尺度不变性,当图象被放大后,使用同样的窗口,就会检测不到角点,此时需要尺度不变特征转换即SIFT算法,分为以下四步:

1>尺度空间极值检测:搜索所有尺度上的图像位置。通过高斯差分函数来识别潜在的对于尺度和旋转不变的关键点,一个图像的尺度空间L(x,y,\sigma),定义为原始图像I(x,y)与一个可变尺度的2维高斯函数G(x,y,\sigma)卷积运算
2>关键点定位:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度,关键点的选择依据于它们的稳定程度。
3>关键点方向确定:基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向,?所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换,从而保证了对于这些变换的不变性。
4>关键点描述:在每个关键点周围的邻域内,在选定的尺度上测量图像局部的梯度,这些梯度作为关键点的描述符,它允许比较大的局部形状的变形或光照变化。

2.实现:

1>实例化sift

sift=cv.xfeatures2d.SIFT_create()

2>利用sift.detectAndCompute()检测关键点并计算

kp,des=sift.detectAndCompute(gray,None)

参数:

kp:关键点信息,包括位置、尺度、方向信息

des:关键点描述符,每个关键点对应128个梯度信息的特征向量

3>将关键点检测结果绘制在图像上

cv.drawKeypoints(image,keypoints,outputimage,color,flags)

参数;

keypoints:关键点信息

outputimage:输出图片,可以是原始图像

color:通过修改(B,G,R)的值

flags:绘图功能的标识设置

flags相关参数描述
cv.DRAW_MATCHES_FLAGS_DEFAULT创建输出图像,使用现存输出图像绘制匹配对和特征点,对每一个关键点只绘制中间点
cv.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG不创建输出图像矩阵,在输出图像上绘制匹配对
cv.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS对每一个特征点绘制带大小和方向的关键点图形
cv.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS单点的特征点不被绘制

3.示例:

import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv
img=cv.imread('building.jpg')
gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
sift=cv.xfeatures2d.SIFT_create()
kp,des=sift.detectAndCompute(gray,None)
cv.drawKeypoints(img,kp,img,flags=cv.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
plt.imshow(img[:,:,::-1])
plt.show()

?二、FAST算法

1.描述:

FAST算法是一种用于角点检测的算法,该算法原理是提取图像中检测点,以该点为圆心的周围邻域内像素点判断检测点是否为角点,即若有一个像素周围有一定数量的像素与该点像素值不同,则认为其是角点,流程如下:

1.在图像中选取一个像素点p,来判断它是不是关键点,Ip等于像素点p的灰度值。
2.以r为半径画圆,覆盖p点周围的M个像素,通常情况下,设置r=3,则M=16,如下图所示:


3.设置一个阈值t,如果在这16个像素点中存在n个连续像素点的灰度值都高于Ip?+?t,或者低于Ip-t,那么像素点p就被认为是一个角点。如上图中的虚线所示,n一般取值为12。
4.由于在检测特征点时是需要对图像中所有的像素点进行检测,然而图像中的绝大多数点都不是特征点,此时会浪费许多时间,因此采用进行非特征点判别的方法:首先对候选点的周围每个90度的点:?1,?9,?5,?13?进行测试(先测试1和19,如果它们符合阈值要求再测试5和13)如果p是角点,那么这四个占中至少有3个要符合阈值要求,否则剔除,再对剩下进行检测

2.实现:

1>实例化fast:

fast=cv.FastFeatureDetector_create(threshold,nonmaxSuppression)

threshold:阈值,默认10

nonmaxSuppression:进行非极大值抑制,默认True

2>利用fast.detect()检测关键点

kp=fast.detect(gray,None) #没有关键点描述

3>将关键点绘制在图像上

cv.drawKeypoints(image,keypoints,outputimage,color,flags)

3.示例:

import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv
img=cv.imread('building.jpg')
gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
fast=cv.FastFeatureDetector_create(threshold=30)
kp=fast.detect(img,None)
img2=cv.drawKeypoints(img,kp,None,color=(0,0,255))
plt.imshow(img2[:,:,::-1])
plt.show()

?三、ORB算法

1.描述:

ORB算法提出构造金字塔,为fast特征点添加了方向,使关键点具有尺度不变性和旋转不变性,改进了 Brief算法,Brief描述子不具备旋转不变性,理想的特征点描述子应该具备旋转不变性,使得图像在经过一定的旋转后仍然能够识别匹配其中的特征点,ORB算法解决了旋转一致性问题

2.实现:

1>实例化orb:

orb=cv.ORB_create(nfeatures)

nfearures:特征点最大数量

2>利用orb.detectAndCompute()进行关键点检测

kp,des=orb.detectAndCompute(gray,None)

3>将关键点检测结果绘制在图像上

cv.drawKeypoints(image,keypoints,outputimage,color,flags)

3.示例:

import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv
img=cv.imread('building.jpg')
gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
orb=cv.ORB_create(nfeatures=4000)
kp,des=orb.detectAndCompute(img,None)
img2=cv.drawKeypoints(img,kp,None,color=(0,255,0))
plt.imshow(img2[:,:,::-1])
plt.show()

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:28:48  更:2022-11-05 00:30:36 
 
开发: 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/25 20:42:24-

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