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

    浏览量

    13010
  • OpenCV
    +关注

    关注

    31

    文章

    635

    浏览量

    41345
  • KLT
    KLT
    +关注

    关注

    0

    文章

    5

    浏览量

    7462

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

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

收藏 人收藏

    评论

    相关推荐

    天合跟踪受邀参加2024伏行业年度大会

    近日,由中国光伏行业协会举办的 2024伏行业年度大会在四川宜宾盛大开幕。会议邀请行业主管部门,行业组织、专家、伏企业领袖等一同就行业发展热点问题进行深度探讨解析,天合跟踪智能控制系统研发负责人孙凯博士应邀出席
    的头像 发表于 12-12 11:04 217次阅读

    Hi7200 高精度同步切降压 LED 恒驱动器

    Hi7200 是一款外围电路简洁的同步降压 LED 恒驱动器,适用于 6V-65V 输入电压范围的 LED 恒照明领域,调光深度深,低辉负载调整率和一致性好。 Hi7200 采用我司专利算法
    发表于 11-25 16:32

    视频目标跟踪从0到1,概念与方法

    导读从目标跟踪的应用场景,底层模型,组件,类型和具体算法几个方面对目标跟踪做了全方面的介绍,非常好的入门文章。在今天的文章中,我们将深入研究视频目标跟踪。我们从基础开始,了解目标
    的头像 发表于 11-20 01:06 300次阅读
    视频目标<b class='flag-5'>跟踪</b>从0到1,概念与方法

    高抗噪性 电压跟踪

    电压跟踪
    jf_30741036
    发布于 :2024年09月29日 19:26:44

    抖动跟踪不丢失 慧视图像跟踪板和自研算法强势升级

    成都慧视开发的Viztra-HE030图像处理板是采用了瑞芯微旗舰级高性能芯片RK3588,能够凭借八核处理核心输出至高6.0TOPS的算力,在算法的强力辅助下,能够实现对目标的稳定锁定跟踪。随着
    的头像 发表于 09-04 08:05 435次阅读
    抖动<b class='flag-5'>跟踪</b>不丢失 慧视图像<b class='flag-5'>跟踪</b>板和自研<b class='flag-5'>算法</b>强势升级

    过零双向可控硅驱动KLT304X&KLT306X&KLT308X 产品规格书

    KLT304X&KLT306X&KLT308XDIP4过零双向可控硅驱动耦1.产品特点Productfeatures•无卤素(溴
    发表于 08-20 15:47 0次下载

    随机相位可控硅驱动KLT302X&KLT305X 产品规格书

    KLT302X&KLT305XDIP4随机相位双向可控硅驱动耦1.产品特点Productfeatures•无卤素(溴
    发表于 08-20 15:45 0次下载

    高效、智能、稳定,漫途LoRa监测终端为跟踪支架系统保驾护航

    伏发电领域,跟踪支架作为提高伏系统发电效率的关键技术之一,已经得到了广泛的应用。然而,如何有效地监测
    的头像 发表于 06-19 15:53 326次阅读
    高效、智能、稳定,漫途LoRa监测终端为<b class='flag-5'>光</b>伏<b class='flag-5'>跟踪</b>支架系统保驾护航

    高效、智能、稳定,LoRa监测终端为跟踪支架系统保驾护航

    伏发电领域,跟踪支架作为提高伏系统发电效率的关键技术之一,已经得到了广泛的应用。然而,如何有效地监测
    的头像 发表于 06-19 15:02 391次阅读
    高效、智能、稳定,LoRa监测终端为<b class='flag-5'>光</b>伏<b class='flag-5'>跟踪</b>支架系统保驾护航

    伏储能变流器恒压恒原理

    对整个系统的运行至关重要。伏储能变流器作为连接伏阵列和储能电池的关键设备,其性能直接影响到系统的稳定性和效率。恒压恒控制是伏储能变流器的一种重要控制策略,本文将对恒压恒
    的头像 发表于 05-07 14:28 894次阅读

    多目标跟踪算法总结归纳

    多目标跟踪是计算机视觉领域中的一个重要任务,它旨在从视频或图像序列中准确地检测和跟踪多个移动目标。不过在落地部署时,有一些关键点需要解决。
    的头像 发表于 04-28 09:42 1873次阅读
    多目标<b class='flag-5'>跟踪</b><b class='flag-5'>算法</b>总结归纳

    如何使用优象芯片U30实现四轴无人机悬停

    优象科技自主研芯片,用于模块、激光测距产品使用。
    的头像 发表于 04-25 16:47 1380次阅读
    如何使用优象<b class='flag-5'>光</b><b class='flag-5'>流</b>芯片U30实现四轴无人机悬停

    优象无人机模块使用技巧

    优象科技自主研发光模块多年,主要用于无人机、扫地机器人、激光测距领域,淘宝店铺可搜索“湖南优象”交流合作。
    的头像 发表于 04-25 16:38 989次阅读
    优象无人机<b class='flag-5'>光</b><b class='flag-5'>流</b>模块使用技巧

    同行!天合跟踪开拓者1P赋能巴西520MW圣卢西亚项目

    采用开拓者1P跟踪支架,并搭载SuperTrack智合智能跟踪算法。 天合跟踪是天合光能旗下智能跟踪解决方案提供商,具有20年
    的头像 发表于 04-07 18:15 1113次阅读

    SMT关键工序再焊工艺详解

    SMT关键工序再焊工艺详解
    的头像 发表于 01-09 10:12 634次阅读
    SMT关键工序再<b class='flag-5'>流</b>焊工艺<b class='flag-5'>详解</b>