KLT光流跟踪特征点对

news/2024/7/20 8:22:02 标签: 图像处理

前言

本篇所述为KLT光流跟踪两个视频中匹配特征点对的具体实现。=> 源码见Github openCV版本:4.5.5

函数详解

1. 特征提取

(1) SIFT特征提取调用方式

sift=cv2.SIFT_create()   # ORB_create()
kp,d=sift.detectAndCompute(frame_gray, None)

OpenCV-Python Tutorials-Feature Detection and Description

关于匹配后的下标决定说明 kp1的索引由DMatch对象属性为queryIdx决定

(2) 角点检测

角点:某一点在任意方向的一个微小变动都会引起灰度很大的变化。
在这里插入图片描述
角点检测算法分类:

  • 基于灰度图像的角点检测
    基于梯度、基于模板、基于模板梯度组合
  • 基于二值图像的角点检测
  • 基于轮廓曲线的角点检测

基于模板的方法主要考虑像素邻域点的灰度变化 ,即图像亮度的变化。将与邻点亮度对比足够大的点定义为角点。常见的基于模板的角点检测算法有 Kitchen-Rosenfeld角点检测算法Harris角点检测算法KLT角点检测算法SUSAN角点检测算法

Harris角点检测

cv2.cornerHarris()

Shi-Tomasi角点检测

(Harris角点检测的进阶版)

cv2.goodFeaturesToTrack()

void cv::goodFeaturesToTrack(
		cv::InputArray image,    // 输入图像(CV_8UC1 CV_32FC1)
		cv::OutputArray corners, // 输出角点vector
		int maxCorners,          // 最大角点数目
		double qualityLevel,     // 质量水平系数(小于1.0的正数,一般在0.01-0.1之间)
		double minDistance,      // 最小距离,小于此距离的点忽略
		// 以下为可选参数
		cv::InputArray mask = noArray(), //指定感兴趣区域。 mask=0的点忽略
		int blockSize = 3,       // 使用的邻域数:计算协方差矩阵时的窗口大小
		bool useHarrisDetector = false,   // false ='Shi Tomasi metric'
		double k = 0.04         // Harris角点检测时使用
	);

// 常用如下参数:
void cv::goodFeaturesToTrack(image,corner,
                     		500,     // 最多检测到的角点数
                     		0.01,    // 阈值系数
                     		10);     // 角点间的最小距离

在这里插入图片描述
角点特征检测之一(cornerHarris、Shi-Tomasi、FAST)

注意:角点无法直接用来做特征匹配,做特征匹配都是需要描述子的

参考:
cv2.GFTTDetector_create将角点作为特征点进行特征匹配

【Shi-Tomasi角点检测+SIFT特征匹配】返回值需要进行一个转换

(3) 棋盘内角点检测

# size是内格点数,输出有序,按行展开
st1,corner1=cv2.findChessboardCorners(frame1gray,(9,6),None) # <class 'numpy.ndarray'>

当检测到了给定size的角点,st才会返回非0值

更详细的函数说明:角点检测与FindChessboardCorners函数

2. 特征匹配

python 3+opencv3.4 – 特征匹配

Python OpenCV 特征点检测与匹配

关于不是很熟的只适用于SIFT/SURF的FLANN匹配 & 一个很好的学习openCV的博客

(1) Harris角点匹配

基于PCV库

角点特征匹配

从0计算响应值并进行匹配

函数说明&完整实现(删除静止点)

KLT-Tracking

lk_params=dict(winSize=(15,15),
                maxLevel=2,
                criteria=(cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03))

tk2,st,err=cv2.calcOpticalFlowPyrLK(frame2gray,frame_nxgray2,track_points2,None,**lk_params)

python-openCV官方文档对于该函数的详解

KLT里的默认是Shi-Tomasi 角点检测,也可以换成fast cv2.FastFeatureDetector() ,参考:光流算法学习

KLT视频匹配跟踪几个要点

1. 判断静止点  前后两帧特征点位置微小?

知乎链- 静止点&回溯判断

类的写法&直接写法

2. 判断被遮挡点  st==0

3. 判断是否跟踪正确  环回检测?

4. 判断匹配是否正确  RANSAC?

Sift KLT

注意提取特征点的 类型和数据转换-Github

C++版本实现

遇到的BUG

  1. 特征点检测方法换成sift的过程中,注意特征点形式的转换过程中的数据形式dtype转换
    error: (-215:Assertion failed) (npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0 in function

  2. YOLOv3载入权重报错  (opencv版本不同引起的输出格式不同)
    output_layers=[layer_names[i[0]-1] for i in net.getUnconnectedOutLayers()] IndexError: invalid index to scalar variable.


http://www.niftyadmin.cn/n/735438.html

相关文章

一次搞懂 URI、URL、URN

一次搞懂 URI、URL、URN 文章目录一次搞懂 URI、URL、URN简介参考正文名词解释URI 格式URL 格式URN 格式结语简介 在使用网络相关的 API 又或是信息传输、甚至微服务配置时常常看到 URI、URL 交错着出现&#xff0c;而与之相似的还有一个叫做 URN 的东西。平常最常接触到的就是…

lsattr chattr命令 文件的隐藏权限

1.文件的隐藏权限当文件有可写的权限&#xff0c;可以又不能进行编辑。遇到这种情况&#xff0c;可能文件被设置了隐藏权限。2.chattr命令设置文件的隐藏属性。语法&#xff1a;chattr [-] [权限] 文件名选项&#xff1a;&#xff1a;设置为&#xff1a;新增-&#xff1a;去除-…

近期一些新的学习点的BLOG

关于各类激活函数 激活函数&#xff1a;基础知识 关于训练模型的暂停与继续 PyTorch实现断点继续训练——知乎链 顶会paper链接 计算机视觉、图像处理顶会顶刊历年论文链接 自定义loss function pytorch自定义损失函数 custom loss function PYTORCH自定义损失函数注意…

在Word中插入高亮代码

WPS中插入美观的高亮代码 使用一个在线MarkDown工具&#xff1a;Md2All 进行一个高亮&#xff0c;高亮主题为 atom-one-dark Copy右边的内容&#xff0c;粘贴到Word里&#xff0c;调整字体字号为 Courier New 10.5 段落间距为 固定值 12 &#xff0c;即可实现如下效果&#x…

技术人员如何创业《四》- 打造超强执行力团队(转载)

转载自LANCEYAN.COM 好的团队是创业公司成功的必要因素之一。差劲的团队会导致整个团队没有战斗力&#xff0c;互相算计&#xff0c;只看到自己的利益&#xff0c;永远做不成一个好的产品。优秀的团队整个团体非常有凝聚力&#xff0c;以公司的事业为自己的事业&#xff0c;各自…

Spring Cloud 概述: 一文看懂 Spring Cloud 到底在干嘛

Spring Cloud 概述: 一文看懂 Spring Cloud 到底在干嘛 文章目录Spring Cloud 概述: 一文看懂 Spring Cloud 到底在干嘛简介参考正文什么是 Spring Cloud&#xff1f;核心模块Service Discovery 服务发现Configuration 服务配置Routing & Messaging 路由 & 消息传递API…

Ubuntu20.04配置Cmake 3.23.1

前言 本篇记录踩坑日记。 第一次安装参考博客&#xff1a;Ubuntu20.04下载安装CMake&#xff0c;But… 软链接不要乱用…没啥好的… 遇到的问题 装是好像一路装的都很顺利… 但是我验 cmake --version 的时候…就开始出现问题了… 就像下面这样… 然后你把这段error copy到…

SpringBoot系列四:SpringBoot开发(改变环境属性、读取资源文件、Bean 配置、模版渲染、profile 配置)...

声明&#xff1a;本文来源于MLDN培训视频的课堂笔记&#xff0c;写在这里只是为了方便查阅。 1、概念 SpringBoot 开发深入 2、具体内容 在之前已经基本上了解了整个 SpringBoot 运行机制&#xff0c;但是也需要清楚的认识到以下的问题&#xff0c;在实际的项目开发之中&#…