【目标跟踪】光流法运动视频跟踪【含Matlab源码 1357期】

news2024/11/28 6:37:06

⛄一、光流场简介

1 案例背景
运动视觉研究的内容是如何从变化场景中的一系列不同时刻的图像中提取有关场景中物体的形状、位置和运动的信息。根据研究的方法,它可以分为两类:基于特征的方法和基于光流场的方法。基于特征的方法抽取特征点,是离散的;光流场属于运动数据研究范畴,是基于连续的图像序列,并直接对其进行运动估计,可以求得图像中每一像素处所对应物体的运动信息。
当物体运动时, 在图像上对应物体的亮度模式也在运动。光流(Optical Flow) 是指图像中亮度模式运动的速度,光流场是一种二维瞬时速度场,它是景物中可见点的三维速度矢量在成像表面的投影。光流不仅包含了被观察物体的运动信息,而且携带着有关场景的三维结构信息。本案例基于Computer Vision System Toolbox, 使用光流场算法对交通视频中汽车的运动进行检测和估计。

2 理论基础
2.1光流法检测运动原理
光流场是指图像灰度模式的表观运动,它是一种像素级的运动。光流法检测运动物体的基本原理是:根据各个像素点的速度矢量特征,可以对图像进行动态分析。如果图像中没有运动物体,则光流矢量在整个图像区域是连续变化的;当图像中有运动物体时,由于目标和图像背景存在相对运动,所以运动物体所形成的速度矢量必然和邻域背景速度矢量不同,从而检测出运动物体及其位置。但是光流法的优点在于,光流不仅携带了运动物体的运动信息,还携带了有关三维结构的丰富信息,它能够在不知道场景任何信息的情况下,检测出运动的图像。基于光流场的运动检测的步骤如图1所示。在理想情况下,光流场和二维运动场互相吻合,但这一命题不总是对的。如图2所示,一个均匀球体在某一光源照射下,亮度呈现一定的明暗模式。当球体绕中心轴旋转时,明暗模式并不随着表面运动,所以图像也没有变化,此时光流在任意地方都等于零,然而运动场却不等于零。如果球体不动而光源运动,则明暗模式将开始随着光源运动,此时光流不等于零但运动场为零。
在这里插入图片描述
图1基于光流场的运动检测的步骤 图2光流场和运动场的联系和区别
光流场的方法能够较好地用于二维运动估计,它也可以同时给出全局点的运动估计,但是光流场并不等价于运动场,因此其本身必然存在着一些问题:遮挡问题、孔径问题、光照问题等。

2.2 光流的主要计算方法
光流场的计算主要有基于梯度的方法、基于匹配的方法、基于能量的方法和基于相位的方法。另外,近几年神经网络动力学也颇受学者重视。基于梯度的方法利用图像灰度的梯度来计算光流,是研究得最多的方法,比如Horn-S chun ck算法、Lucas-Kanade算法和Nagel算法。基于梯度的方法以运动前后图像灰度保持不变作为先决条件,导出光流约束方程。由于光流约束方程并不能唯一地确定光流,因此需要导入其他约束。根据引入的约束不同,基于梯度的方法又可以分为全局约束方法和局部约束方法。全局约束的方法假定光流在整个图像范围内满足一定的约束条件;而局部约束的方法假定在给定点周围的一个小区域内,光流满足一定的约束条件。
基于匹配的方法包括基于特征匹配和基于区域匹配两种。基于区域匹配技术在视频编码中得到了广泛应用,它通过对图像序列中相邻两帧图像间的子块匹配来进行运动估值。在区域匹配算法中,图像被分割为子块,子块中所有像素的运动被认为是相同的,由于复杂的运动可以被近似地分解为一组平移运动之和,所以区域匹配算法采用的运动模型假设图像中的运动物体由做平移运动的刚体组成,且假设在图像场景中没有大的遮挡物。
基于能量的方法首先要对输入图像序列进行时空滤波处理,这是一种时间和空间整合。对于均匀的流场,要获得正确的速度估计,这种时空整合是非常必要的。然而,这样做会降低光流估计的空间和时间分辨率。尤其是当时空整合区域包含几个运动成分(如运动边缘)时,估计精度将会恶化。此外,基于能量的光流技术涉及大量的滤波器,因此存在高计算负荷的问题。然而可以预期,随着相应硬件的发展,在不久的将来,滤波将不再是一个严重的限制因素,所有这些技术都可以在帧速下加以实现。
基于相位的方法由Fleet和Jepson提出, 该算法根据带通滤波器输出的相位特性来确定光流。通过与带通速度调谐滤波器输出中的等相位轮廓相垂直的瞬时运动来定义分速度。带通滤波器按照尺度、速度和定向来分离输入信号。基于相位的光流技术的综合性能比较优秀,光流估计比较精确且具有较高的空间分辨率,对图像序列的适用范围也比较宽。
对于光流计算来讲,如果说前面的基于能量或相位的模型有一定的生物合理性的话,那么近几年出现的利用神经网络建立的视觉运动感知的神经动力学模型则是对生物视觉系统功能与结构的更为直接的模拟。尽管现有的神经动力学模型还不成熟,然而这些方法及其结论为其进一步研究打下了良好的基础,是将神经机制引入运动计算方面所做的极有意义的尝试。
目前,对光流的研究方兴未艾,新的计算方法还在不断涌现。这里对光流技术的发展趋势与方向提出以下看法。
(1)现有技术有各自的优点与缺陷,方法之间相互结合,优势互补,建立光流计算的多阶段或分层模型是光流技术发展的一个趋势。
(2)通过深入的研究发现,现有光流方法之间有许多共通之处。如微分法和匹配法的前提假设极为相似;某些基于能量的方法等效于区域匹配技术;而相位方法则将相位梯度用于法向速度的计算。
(3)尽管光流计算的神经动力学方法还很不成熟,然而对它的研究却具有极其深远的意义。随着生物视觉研究的不断深入,神经网络方法无疑会不断完善,也许光流计算乃至计算机视觉的根本出路就在于神经机制的引入。

2.3 梯度光流场约束方程
假定像素点(x,y)在1时刻的灰度值为I(x,y,t),在1+dr时刻,该像素点运动到新的位置(x+dx,y+dy),此时对应的灰度值为I(x+dx,y+dy,t+dr)。根据图像的一致性假设,当dt→0时,图像沿着运动轨迹的亮度保持不变,即:I(x,y,t)=I(x+dx,y+dy,t+dt)(23.1)
如果图像灰度随(x,y,t)缓慢变换,则将(23.1)式进行泰勒级数展开:
(1)在这里插入图片描述
如果图像灰度随(x,y,t)缓慢变换,则将(1)式进行泰勒级数展开:
在这里插入图片描述
于是
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
式中,VI-[1…1,]表示梯度方向;U=[u,可表示光流。(23.4)式称为光流约束方程,是
所有基于梯度的光流计算方法的基础。
考虑由u和v组成的二维空间,那么(4)式定义了一条直线,所有满足约束方程的U=[u,都在该直线上,如图3所示,该直线和梯度VI-[1…1,]垂直。由于光流约束方程包含u和v两个未知量,显然由一个方程并不能唯一确定,为了求解光流场,必须引入新的约束条件。
在这里插入图片描述
图3光流基本方程所确定的约束线
根据约束条件的不同,梯度光流法又分为全局约束方法和局部约束方法。全局约束方法假定光流在整个图像范围内满足一定的约束条件,而局部约束的方法假定在给定像素点周围的一个小区域内,光流满足于一定的约束条件。常用的基于梯度的光流计算方法如下。
(1)运动场平滑
Horn-S chun ck假设光流在整个图像上光滑变化, 即运动场既满足光流约束方程又满足全局平滑性。将光滑性测度同加权微分约束测度组合起来,其中加权参数控制图像流约束微分和光滑性微分之间的平衡。
(2)预测校正
Lucas-kanade假设在一个小的空间邻域上运动矢量保持恒定, 然后使用加权最小二乘的思想来估计光流,它是一种基于像素递归的光流算法,就是预测校正型的位移估算器。预测值可以作为前一个像素位置的运动估算值,或作为当前像素邻域内的运动估算线性组合。依据该像素上的位移帧差的梯度最小值,对预测做进一步的修正。
(3)平滑约束
与Hom-S chun ck算法一样, Nagel也使用了全局平滑约束来建立光流误差测度函数,
但是Nagel提出的一种面向平滑的约束, 并不是强加在亮度梯度变化最剧烈的方向(比如
边缘方向)上的,这样做的目的是为了处理遮挡。

2.4 Horn-S chun ck光流算法
Horn-S chun ck算法是一种全局约束的方法, 其提出了光流的平滑性约束条件, 即图像
上任一点的光流并不是独立的,光流在整个图像范围内平滑变化。所谓平滑,就是在给定
邻域内其速度分量平方和积分最小:
在这里插入图片描述
在实际情况下,(5)式可以使用下面的表达式代替:
在这里插入图片描述
式中,u和▼分别表示u邻域和v邻域中的均值。
根据光流基本方程(4) 式考虑光流误差, Horn-S chun ck算法将光流求解归结为如下极值问题:
在这里插入图片描述
式中,入控制平滑度,它的取值要考虑图中的噪声情况,如果噪声较强,则说明图像数据
本身的置信度较低,需要更多地依赖光流约束,所以1可以取较大的值;反之,可以取较
小的值。

⛄二、部分源代码

function varargout = guidemo(varargin)
% GUIDEMO M-file for guidemo.fig
% GUIDEMO, by itself, creates a new GUIDEMO or raises the existing
% singleton*.
%
% H = GUIDEMO returns the handle to a new GUIDEMO or the handle to
% the existing singleton*.
%
% GUIDEMO(‘CALLBACK’,hObject,eventData,handles,…) calls the local
% function named CALLBACK in GUIDEMO.M with the given input arguments.
%
% GUIDEMO(‘Property’,‘Value’,…) creates a new GUIDEMO or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before guidemo_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to guidemo_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE’s Tools menu. Choose “GUI allows only one
% instance to run (singleton)”.
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help guidemo

% Last Modified by GUIDE v2.5 14-Sep-2021 10:00:52

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @guidemo_OpeningFcn, …
‘gui_OutputFcn’, @guidemo_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% — Executes just before guidemo is made visible.
function guidemo_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to guidemo (see VARARGIN)

% Choose default command line output for guidemo
handles.output = hObject;

a=ones(320,650);
imshow(a);

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes guidemo wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% — Outputs from this function are returned to the command line.
function varargout = guidemo_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

% — Executes on button press in Browse.
function Browse_Callback(hObject, eventdata, handles)
% hObject handle to Browse (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

[filename, pathname] = uigetfile(‘*.avi’, ‘Pick an VIDEO’);
if isequal(filename,0) || isequal(pathname,0)
disp(‘User pressed cancel’)
else
a=aviread(filename);

  handles.a=a;
  
end

% Update handles structure

guidata(hObject, handles);

% — Executes on button press in PlayMovie.
function PlayMovie_Callback(hObject, eventdata, handles)
% hObject handle to PlayMovie (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

B = ‘.png’;
C = ‘yjf-00_1-’;
k=1;

for kk=1:50

    d=num2str(kk);
    e2=strcat(C,d);
    filename3 =strcat(e2,B);
    b=imread( filename3);
    imshow(b);
    pause(0.5);

end
% — Executes on button press in framesepration.
function framesepration_Callback(hObject, eventdata, handles)
% hObject handle to framesepration (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

function BinaryPattern_Callback(hObject, eventdata, handles)
% hObject handle to BinaryPattern (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% — Executes on button press in Tracking.
function Tracking_Callback(hObject, eventdata, handles)
% hObject handle to Tracking (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

k=1;

for kk=1:50

    d=num2str(kk);
    e2=strcat(C,d);
    filename3 =strcat(e2,B);
    a=imread('yjf-00_1-bk.png');
    b=imread( filename3);
    a1=a(:,:,1);
    a2=a(:,:,2);
    a3=a(:,:,3);
    [r c]=size(a1);
    b1=b(:,:,1);
    b2=b(:,:,2);
    b3=b(:,:,3);
    z1= imsubtract(a1,b1);
    z2= imsubtract(a2,b2);
    z3= imsubtract(a3,b3);

   
    fig(:,:,2)=z2;
    fig(:,:,3)=z3;


    I2=rgb2gray(fig);
    I3 = imadjust(I2, stretchlim(I2), [0 1]);
    level = graythresh(I3);
   
    K6 = medfilt2(K,[5,5]);

% k6=double(K6);
% K6=edge(K6,‘canny’);
% imshow(K6,[])

    k=k+1;

    Image  = K6;
    % get size of image as H,W
    imshow(b);
    [H,W] = size(Image);
    [r,c] = find( bwperim(Image,4) == 1 );
    [tr,tc] = boundarytrack(r,c,H,W,0);
    X1=tr;
  
    YB =tc;
    Xmin = min(XB);
    Ymin = min(YB);
    Xmax = max(XB);
    Ymax = max(YB);
    X = [Xmin Xmax];
    Y = [Ymin Ymin];
    line(Y,X) ;
    X = [Xmin Xmin];
    Y = [Ymin Ymax];
    line(Y,X) ;
    X = [Xmax Xmax];
    Y = [Ymin Ymax];
    line(Y,X) ;
    X = [Xmin Xmax];
    Y = [Ymax Ymax];
    line(Y,X) ;
 
    pause(0.5);

end

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]裘加妤.基于视频信息的运动目标分析研究综述[J].计算机光盘软件与应用. 2012,15(24)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/91874.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

傻白探索Chiplet,Chiplet面临的挑战之互连和封装(四)

目录 一、互连技术 二、封装技术 (1)英特尔 (2)台积电 三、生产流程 四、软件技术 实施Chiplet技术面临的主要挑战包括: 互连技术。Chiplet技术需要开发新型互连技术,以便将小芯片组合在一起。目前&a…

51单片机模块化编程

模块化 传统方式编程:所有的函数均放在 main.c 里,若使用的模块比较多,则一个文件内会有很多的代码,不利于代码的组织和管理,而且很影响编程者的思路。 模块化编程:把各个模块的代码放在不同的 .c 文件里…

FL Studio21新版终于有内置的强大混响插件了

FL Studio 21新版终于有内置的强大混响插件了FL Studio 21新版不光如此,还增加很多官方主题,并内置了多款可选,满足大家对个性化的需求! 而且每一个人都能快速地创建属于自己的主题,彰显你的与众不同! 一分…

JavaScript(五):函数、作用域

JavaScript函数函数的基本使用return返回语句arguments的使用函数的两个案例作用域函数的基本使用 1.函数声明 格式: function 函数名(){ 函数体代码 } function是声明函数的关键字,必须小写 2.函数调用 函数名(); 调用的时候不要忘记加小括号函数如果…

【数据分析】大型ADCP数据集的处理和分析(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

猿如意中的【Sublime Text Build 3211】开发工具详情介绍

目录 一、工具名称 二、下载安装渠道 2.1 什么是猿如意? 2.2 如何下载猿如意? 2.3 如何在猿如意中下载Sublime Text Build 3211? 三、Sublime Text Build 3211介绍 四、软件安装过程 五、软件界面 六、Sublime Text Build 3…

redis7知识点总结

文章目录1. redis单线程为啥会这么快2. redis数据类型和底层存储结构2.1 string类型2.1.1 SDS2.2 hash类型2.3 list类型2.4 set类型(集合)2.5 zset类型(有序集合)2.6 ziplist压缩列表2.7 listpack2.8 quicklist-快速列表2.9 skipl…

马士兵-郑金维—并发编程—6.并发集合

一、ConcurrentHashMap 1.1 存储结构 ConcurrentHashMap是线程安全的HashMap ConcurrentHashMap在JDK1.8中是以CAS+synchronized实现的线程安全 CAS:在没有hash冲突时(Node要放在数组上时) synchronized:在出现hash冲突时(Node存放的位置已经有数据了) 存储的结构:…

DBCO-PEG3-NHS ester,2163772-16-3,二苯并环辛炔-三聚乙二醇-琥珀酰亚胺酯

英文名称:DBCO-PEG3-NHS ester 中文名称:二苯并环辛炔-三聚乙二醇-琥珀酰亚胺酯 CAS:2163772-16-3 分子式:C32H35N3O9 分子量:605.64 纯度:>95% 外观:浅黄色半固态 储存条件&#xff…

互联网企业的逆向奔赴,京东调集首批1000余名快递小哥陆续抵达北京

在每一次苦难来临的时刻,逆行者的背影,总是让人倍感温暖。   在疫情依然肆虐的当下,更是如此。   那些义无反顾地奔赴疫情最前线的逆行者们,总是在用血肉之躯守护着我们的生活冷暖。如果一定要寻找这些逆行者当中最美的那一抹…

SDK JDBC多种方式接入AZURE SQL DATABASE JAVA版

本文阐述使用JDBC接入AZURE SQL 数据库 笔者认为AZURE云上的AZURE SQL和SQL SERVER是很相似的,在普通的账号密码情况下JDBC字符串都是一致的。 下来全部说明官方的多种连接方式,参考官方: https://learn.microsoft.com/zh-cn/sql/connect/jdb…

Post-GWAS: single-cell disease relevance score (scDRS) 分析

1、scDRS的计算原理如下所示: 图片来源:Zhang M J, Hou K, Dey K K, et al. Polygenic enrichment distinguishes disease associations of individual cells in single-cell RNA-seq data[R]. Nature Publishing Group, 2022. 2、通过scDRS分析可以得到…

XDisplay 安装教程

Splashtop Wired XDisplay 安装教程1. 概述2. Splashtop XDisplay 详细安装教程2.1 下载 Splashtop XDisplay2.2 电脑上安装 Splashtop XDisplay2.3 iPad安装 Splashtop XDisplay3. 遇到的问题3.1 下载 iTunes3.2 安装 iTunes3.3 打开 iTunes3.4 同意许可协议4. iPad连接Window…

学会用这个键,Word做得比领导还整齐, 早早下班不是梦

大家比较常用到哪些快捷键呢?快捷键用得熟练,工作效率可是会大大提高的。下面介绍4类常用的Word快捷键,希望能够帮到你,大家一起提高效率,早早下班!一、字体样式:平常更改字体样式,总…

【openEuler系列】部署文件共享服务Samba

个人名片: 对人间的热爱与歌颂,可抵岁月冗长🌞 Github👨🏻‍💻:念舒_C.ying CSDN主页✏️:念舒_C.ying 个人博客🌏 :念舒_C.ying 1 配置环境 挂载系统ISO&am…

李沐精读论文:GAN

论文:https://papers.nips.cc/paper/2014/file/5ca3e9b122f61f8f06494c97b1afccf3-Paper.pdf 视频:GAN论文逐段精读【论文精读】_哔哩哔哩_bilibili 课程:CS231n 2022PPT笔记- 生成模型Generative Modeling ​李宏毅机器学习——对抗生成网络…

基本算法学习记录---Day2

并查集模板1 class Solution {int[] root new int[200000];public int Que() {//初始化for(int i 1;i<n;i){root[i] i;}//TODO}//找根(将节点连接)public int find(int x){if(root[x] ! x){root[x] find(root[x]);}return root[x];}//合并public void heb(int i,int j)…

快速突出重点数据,条件样式来帮你

使用条件样式可以实现使用样式标注符合规则的数据&#xff0c;可以帮助直观查看数据、发现关键数据问题和数据的变化趋势。例如&#xff1a; 使用红色文字标注同比增幅小于10%的省份 使用红色文字标注同比增幅小于10%的省份使用不同的图标标注计划完成情况&#xff0c;绿色图…

PS CS6视频剪辑基本技巧(一)CS6可以实现的视频剪辑功能

前几天儿子要做一个居家生活的视频在班会上分享&#xff0c;想把视频做得漂亮一些&#xff0c;不想应付了事&#xff0c;本人略懂PS&#xff0c;所以就地取材学了一下用PS CS6制作视频&#xff0c;现在把学习到的基本技巧给大家分享一下。本人非专业人士&#xff0c;所用软件也…

Arthas入门和安装使用

闲聊 我前几天也阳了&#xff0c;难受的要死&#xff0c; 不过今天明显好转&#xff0c;抓紧来一篇博文助助兴。如果对你有一点收获&#xff0c;辛苦点个赞。 简介 Arthas 是 Alibaba 在 2018 年 9 月开源的 Java 诊断工具。支持JDK6以上。主要用于定位和诊断线上程序运行问…