0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

稀疏光流跟踪(KLT)算法详解

OpenCV学堂 来源:OpenCV学堂 作者:gloomyfish 2022-09-02 10:07 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

稀疏光流跟踪(KLT)详解

在视频移动对象跟踪中,稀疏光流跟踪是一种经典的对象跟踪算法,可以绘制运动对象的跟踪轨迹与运行方向,是一种简单、实时高效的跟踪算法,这个算法最早是有Bruce D. Lucas and Takeo Kanade两位作者提出来的,所以又被称为KLT。KLT算法工作有三个假设前提条件:

亮度恒定

短距离移动

空间一致性

亮度恒定

对象中任意像素点p(x,y)亮度值,在t-1时候的值,在t时刻移动(u, v)之后亮度值保持不变

2aa9dd0a-2a03-11ed-ba43-dac502259ad0.jpg


空间一致性

假设对像素点p(x, y)来说,周围的像素点都保持相同的移动距离(u, v) 假设窗口大小为5x5,则对于25个窗口内的像素点来说,就会如下等式成立:

2ac6159c-2a03-11ed-ba43-dac502259ad0.jpg


得到下面的过约束等式,根据最小二乘可以求解(u, v):

2b0ca192-2a03-11ed-ba43-dac502259ad0.jpg


这样我们就得到了KLT光流等式与该窗口的的Hessian矩阵

2b21ef5c-2a03-11ed-ba43-dac502259ad0.png

2b38436a-2a03-11ed-ba43-dac502259ad0.jpg

空间尺度不变性

通过建立每一帧的图像金字塔,实现尺度空间窗口目标对象搜索

2b5a444c-2a03-11ed-ba43-dac502259ad0.jpg


OpenCV中KLT演示代码实现

OpenCV中KLT算法API及其参数解释如下:

voidcv::calcOpticalFlowPyrLK(
InputArrayprevImg,//前一帧图像
InputArraynextImg,//后一帧图像
InputArrayprevPts,//前一帧的稀疏光流点
InputOutputArraynextPts,//后一帧光流点
OutputArraystatus,//输出状态,1表示正常该点保留,否则丢弃
OutputArrayerr,//表示错误
SizewinSize=Size(21,21),//光流法对象窗口大小
intmaxLevel=3,//金字塔层数,0表示只检测当前图像,不构建金字塔图像
TermCriteriacriteria=TermCriteria(TermCriteria::EPS,30,0.01),//窗口搜索时候停止条件
intflags=0,//操作标志
doubleminEigThreshold=1e-4//最小特征值响应,低于最小值不做处理
)

特征点检测与绘制的代码实现如下:

//detectfirstframeandfindcornersinit
Matold_frame,old_gray;
capture.read(old_frame);
cvtColor(old_frame,old_gray,COLOR_BGR2GRAY);
goodFeaturesToTrack(old_gray,featurePoints,maxCorners,qualityLevel,minDistance,Mat(),blockSize,useHarrisDetector,k);

特征点绘制

voiddraw_goodFeatures(Mat&image,vectorgoodFeatures){
for(size_tt=0;t< goodFeatures.size(); t++) {
        circle(image, goodFeatures[t], 2, Scalar(0, 255, 0), 2, 8, 0);
    }
}

KLT跟踪代码如下

TermCriteriacriteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS,30,0.01);
doublederivlambda=0.5;
intflags=0;

boolret=capture.read(frame);
if(!ret)break;
imshow("frame",frame);
roi.x=0;
frame.copyTo(result(roi));
cvtColor(frame,gray,COLOR_BGR2GRAY);

//calculateopticalflow
calcOpticalFlowPyrLK(old_gray,gray,pts[0],pts[1],status,err,Size(31,31),3,criteria,derivlambda,flags);

特征点状态检查与匹配的代码如下

size_ti,k;
for(i=k=0;i< pts[1].size(); i++)
{
    // 距离与状态测量
    double dist = abs(pts[0][i].x - pts[1][i].x) + abs(pts[0][i].y - pts[1][i].y);
    if (status[i] && dist >2){
pts[0][k]=pts[0][i];
initPoints[k]=initPoints[i];
pts[1][k++]=pts[1][i];
circle(frame,pts[1][i],3,Scalar(0,255,0),-1,8);
}
}
//resize有用特征点
pts[1].resize(k);
pts[0].resize(k);
initPoints.resize(k);

绘制跟踪轨迹的代码如下

//绘制跟踪轨迹
draw_lines(frame,initPoints,pts[1]);

该方法实现如下:

voiddraw_lines(Mat&image,vectorpt1,vectorpt2){
if(color_lut.size()< pt1.size()) {
        for (size_t t = 0; t < pt1.size(); t++) {
            color_lut.push_back(Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)));
        }
    }
    for (size_t t = 0; t < pt1.size(); t++) {
        line(image, pt1[t], pt2[t], color_lut[t], 2, 8, 0);
    }
}

运行效果:

左侧是视频的原始每一帧、右侧视频是每一帧中KLT算法实时轨迹绘制

车辆运行轨迹跟踪

2b7754b0-2a03-11ed-ba43-dac502259ad0.jpg



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 跟踪算法
    +关注

    关注

    0

    文章

    41

    浏览量

    13251
  • OpenCV
    +关注

    关注

    33

    文章

    652

    浏览量

    45076
  • KLT
    KLT
    +关注

    关注

    0

    文章

    5

    浏览量

    7601

原文标题:干货 | OpenCV中KLT光流跟踪原理详解与代码演示

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    新一代单目标 AI 跟踪算法,解决典型困难场景下的跟踪稳定性问题

    作为具备算法定制开发的公司,成都慧视之前的目标跟踪算法均是采用相关跟踪,通过在线更新分类模型来实现目标的定位跟踪。即以当前帧目标区域为正样本
    的头像 发表于 03-17 17:59 666次阅读
    新一代单目标 AI <b class='flag-5'>跟踪</b><b class='flag-5'>算法</b>,解决典型困难场景下的<b class='flag-5'>跟踪</b>稳定性问题

    工作节点说明开始节点

    详解参考动态快捷指令),或Webhook事件触发器执行工作任务时使用(详解参考触发器)。 4、FILES_INPUT:工作添加到智能体中使用时,打开智能体“输入文件设置”中支持照
    发表于 03-13 14:52

    MAX20800 MPP跟踪DC - DC转换器:伏系统的高效解决方案

    MAX20800 MPP跟踪DC - DC转换器:伏系统的高效解决方案 引言 在伏系统中,如何提高伏模块的能量收集效率和可靠性一直是工程师们关注的重点。MAX20800系列电池串
    的头像 发表于 03-05 14:15 259次阅读

    LED补灯3.7V降3V线性恒调光方案H7304A

    LED补灯3.7V降3V线性恒调光方案H7304A 一、方案介绍: 惠海半导H7304A是一款内置 PWM 调光功能的线性降压恒 LED 驱动器,外围电路简单,仅需外接一颗电阻即可构成完整驱动
    发表于 03-04 11:41

    天合跟踪位列全球跟踪支架制造商排名第二

    近日,在全球知名咨询机构伍德麦肯兹(Wood Mackenzie)最新发布的全球跟踪支架制造商综合排名报告显示,天合光能下属智能跟踪解决方案提供商天合跟踪(TrinaTracker
    的头像 发表于 02-25 13:36 645次阅读

    天合跟踪与西班牙EPC达成战略合作

    近日,天合跟踪(TrinaTracker)宣布与西班牙EPC达成合作,将为其位于西班牙的两大伏项目提供合计360MW智能跟踪系统解决方案。此次合作计划交付约11,000套开拓者1P单排跟踪
    的头像 发表于 02-24 17:46 1755次阅读

    实用!智能空开过调整步骤详解:从原理到实操,精准守护用电安全

    详解智能空开过调整步骤,助力用户精准掌握技能。 一、过保护的底层逻辑:为何需要调整? 智能空开的过保护机制,本质是通过内置的电流传感器实时监测回路电流,当电流超过设定阈值时,触
    的头像 发表于 01-29 09:41 519次阅读

    炎核开源开放平台上架推出OpenSparseBlas高性能稀疏计算库

    在科学计算与工程仿真领域,高效处理大规模稀疏矩阵运算是提升整体计算效能的关键。为此,我们在炎核开源开放平台上架推出 OpenSparseBlas——一个专为稀疏矩阵/向量计算而打造的高性能稀疏计算库
    的头像 发表于 12-15 15:18 974次阅读

    DLPC3478显示和控制器:技术详解与应用指南

    DLPC3478显示和控制器:技术详解与应用指南 在电子设备不断追求高精度、高速度和小型化的今天,DLPC3478显示和控制器凭借其卓越的性能,成为众多应用领域的理想选择。今天我们就来深入探讨
    的头像 发表于 12-11 16:11 2518次阅读
    DLPC3478显示和<b class='flag-5'>光</b>控制器:技术<b class='flag-5'>详解</b>与应用指南

    基于FD-SST 的无人机目标跟踪系统的设计与实现|技术集结

    应用实现功能1.本应用基于睿擎派,实现了对无人机目标的实时跟踪,并将跟踪结果用于驱动两轴转台完成自动指向。主要功能包括:使用FD-SST算法在视频中实时
    的头像 发表于 12-10 19:32 1w次阅读
    基于FD-SST 的无人机目标<b class='flag-5'>跟踪</b>系统的设计与实现|技术集结

    天合跟踪携手Elmya打造西班牙Mirabal伏电站项目

    )的Mirabal一期和二期伏电站项目提供开拓者1P智能跟踪解决方案。此次合作始于天合跟踪和Elmya既往项目建立的信任,并进一步巩固了天合跟踪作为其长期技术合作伙伴的地位,充分印证
    的头像 发表于 10-29 09:24 765次阅读

    自动驾驶中如何将稀疏地图与视觉SLAM相结合?

    [首发于智驾最前沿微信公众号]在自动驾驶场景中,稀疏地图通常是由一系列关键帧和若干三维稀疏特征点构成的地图,每个特征点包含三维坐标和描述外观的描述子;而视觉SLAM是运行在车辆上的实时算法,它一边
    的头像 发表于 10-28 09:07 811次阅读
    自动驾驶中如何将<b class='flag-5'>稀疏</b>地图与视觉SLAM相结合?

    天合跟踪再获乌兹别克斯坦纳沃伊363MW伏支架订单

    近日,天合跟踪宣布与中能建海外投资有限公司正式签署乌兹别克斯坦纳沃伊363.48MW伏电站跟踪支架供应协议。这标志着天合跟踪在乌兹别克斯坦市场累计订单规模突破千兆瓦大关,以丰富的项目
    的头像 发表于 10-22 11:32 1162次阅读

    【开发实例】基于GM-3568JHF开发板安装OpenCV并使用视频目标跟踪 ( CamShift)

    在计算机视觉领域,视频目标跟踪是一个非常重要的任务。视频目标跟踪广泛应用于监控、自动驾驶、人机交互等多个领域。OpenCV提供了多种目标跟踪算法,其中MeanShift和CamShif
    的头像 发表于 09-02 08:04 935次阅读
    【开发实例】基于GM-3568JHF开发板安装OpenCV并使用视频目标<b class='flag-5'>跟踪</b> ( CamShift)

    同步电机在位置随动系统中跟踪误差的分析与研究

    跟踪最终位置过程的不确定性和传统PID控制器超调量大,调节时间长的缺点,设计了Fuzzy-LQR-PD控制算法来提高位置跟踪精度,通过Matlab软件对该算法进行仿真,并由STEP7编
    发表于 06-23 07:07