zoukankan      html  css  js  c++  java
  • 手势跟踪

    camshift:

    Continuously Adaptive Mean Shift algorithm的简称。基于MeanSift的改进算法,可以跟踪视频中尺寸可能产生变化的目标。

    Meanshift只估计数据分布的梯度(变化的方向)。若梯度为0的地方则表示是这个分布的峰值。

    重心:一阶矩与零阶矩的比值。

     

    移动窗口到此重心的位置。由于窗口的移动,窗口的内容也将改变,于是又将重复刚才重新定位窗口中心的步骤。窗口中心重定位的过程通常会收敛到Meanshift矢量为0,也就是窗口不能再移动。收敛的位置为窗口像素的局部最大值处。

    Meanshift算法扩展到连续图像序列,就是Camshift算法,它将视频的所有帧都做Meanshift运算,并将上一帧的结果,即搜索窗的大小和中心,作为下一帧meanshift算法搜索窗的初始值,如此迭代下去,就可以实现对目标的跟踪。

     

    根据概率分布图计算下一帧跟踪框的大小。2D直方图的概率分布图可由二阶矩得到,跟踪框的旋转角和大小也可相应得到。

     

    基于OpenCVCamshift算法的步骤如下:

    (1)初始化搜索框;

    (2)将图像由RGB颜色空间转换到hsv颜色空间;

    (3)从hsv图像中分离处h通道的图像;

    (4)用手势分割得到的掩模板(mask)分割出h通道图像的手势区域

    (5)对h通道的图像建立直方图

    (6)对h的直方图作反向投影图

     

    (7)利用Meanshift算法在反向投影图中迭代搜索,直到其收敛或达到最大迭代次数。并保存零次矩;

     

    (8)利用第(7)步得到的搜索框的中心位置和窗口尺寸信息作为初始值,返回到第(2)步,重新计算,即进入下一帧的目标跟踪。

    直方图:条形图。比如颜色可以取值0~255,把这256个值分组,分成16组,则1~16的数值有多少个,直方图的y坐标值就是几,得到条形图。

    反向投影图:位置(0,0)上的像素值为0,对应的bin为[0,3),有4个元素,所以反向直方图在该位置上的值这个bin的值4,在直方图中值较多的地方,反向投影图中该位置的值较大,在图像中该位置权重就比较大,离重心近。

     

    catmull曲线插值:

     

     

     

     

    第一、二帧,直接更新坐标值。

    第三帧,根据前两帧的光标位置,用第一帧的光标位置作为P1控制点,第二帧的光标位置作为P3控制点,第三帧的光标位置作为P4控制点,即可利用P1P1P3P4四个控制点得到P1P3间的插值曲线。

    第四帧以后,将前三帧的光标位置和当前帧的光标位置作为四个控制点P1P2P3P4,计算P2P3之间的Catmull曲线。

    对最后三帧,可将前两帧的光标位置分别作为P1P2控制点,最后一帧的光标位置作为P4控制点,可根据P1P2P4P4控制点得到P2P4之间的Catmull曲线。

     

  • 相关阅读:
    uniapp 基于 flyio 的 http 请求封装
    微信小程序实现连续扫码功能(uniapp)
    定时器+echarts运行时间太长导致内存溢出页面崩溃
    vue2.0 + element ui 实现表格穿梭框
    js 不同时间格式介绍以及相互间的转换
    vue2.0+Element UI 表格前端分页和后端分页
    vue2.0 + Element UI + axios实现表格分页
    kafka能做什么?kafka集群配置 (卡夫卡 大数据)
    Java List和Map遍历的方法,forEach()的使用
    Flink 集群搭建,Standalone,集群部署,HA高可用部署
  • 原文地址:https://www.cnblogs.com/jerrice/p/4354620.html
Copyright © 2011-2022 走看看