L-K光流法---视频追踪

光流法基本概念介绍如下:https://chunqiu.blog.ustc.edu.cn/?p=661

原文作者阐述的十分详细,按照我一个行外人的理解来说就是一个运动模糊轨迹实时检测。视频光流检测所有代码如下:

% 光流法测试--视频
clc
clear
close all
% 读取文件对象
videoReader = vision.VideoFileReader(‘D:\桌面\图像处理\00-1-

1.avi‘,‘ImageColorSpace‘,‘Intensity‘,‘VideoOutputDataType‘,‘uint8‘);
% 类型转化对象
converter = vision.ImageDataTypeConverter;
% 光流对象
opticalFlow = vision.OpticalFlow(‘ReferenceFrameDelay‘, 1);
opticalFlow.OutputValue = ‘Horizontal and vertical components in complex form‘;
if 0 % 使用的算法
opticalFlow.Method = ‘Lucas-Kanade‘;
opticalFlow.NoiseReductionThreshold = 0.001; % 默认是0.0039
else
opticalFlow.Method = ‘Horn-Schunck‘;
opticalFlow.Smoothness = 0.5; % 默认是1
end
% 显示对象
frame = step(videoReader);
figure
subplot(121)
himg = imshow(frame);
subplot(122)
hof = imshow(frame);
% 开始播放
while ~isDone(videoReader)
% 得到一帧
frame = step(videoReader);
% 格式转化
im = step(converter, frame);
% 计算光流
of = step(opticalFlow, im);
% 光流图转化
ofI = computeColor(real(of), imag(of));
% 显示
set(himg, ‘cdata‘, frame)
set(hof, ‘cdata‘, ofI)
drawnow
end
release(videoReader);
function img = computeColor(u,v)
%   computeColor color codes flow field U, V
%   According to the c++ source code of Daniel Scharstein
%   Contact: [email protected]
%   Author: Deqing Sun, Department of Computer Science, Brown University
%   Contact: [email protected]
%   $Date: 2007-10-31 21:20:30 (Wed, 31 Oct 2006) $
% Copyright 2007, Deqing Sun.
%
%                         All Rights Reserved
%
% Permission to use, copy, modify, and distribute this software and its
% documentation for any purpose other than its incorporation into a
% commercial product is hereby granted without fee, provided that the
% above copyright notice appear in all copies and that both that
% copyright notice and this permission notice appear in supporting
% documentation, and that the name of the author and Brown University not be used in
% advertising or publicity pertaining to distribution of the software
% without specific, written prior permission.
%
% THE AUTHOR AND BROWN UNIVERSITY DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
% INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ANY
% PARTICULAR PURPOSE.  IN NO EVENT SHALL THE AUTHOR OR BROWN UNIVERSITY BE LIABLE FOR
% ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
nanIdx = isnan(u) | isnan(v);
u(nanIdx) = 0;
v(nanIdx) = 0;
colorwheel = makeColorwheel();
ncols = size(colorwheel, 1);
rad = sqrt(u.^2+v.^2);
a = atan2(-v, -u)/pi;
fk = (a+1) /2 * (ncols-1) + 1;  % -1~1 maped to 1~ncols
k0 = floor(fk);                 % 1, 2, ..., ncols
k1 = k0+1;
k1(k1==ncols+1) = 1;
f = fk - k0;

for i = 1:size(colorwheel,2)
    tmp = colorwheel(:,i);
    col0 = tmp(k0)/255;
    col1 = tmp(k1)/255;
    col = (1-f).*col0 + f.*col1;
    idx = rad <= 1;
    col(idx) = 1-rad(idx).*(1-col(idx));    % increase saturation with radius
    col(~idx) = col(~idx)*0.75;             % out of range
    img(:,:, i) = uint8(floor(255*col.*(1-nanIdx)));
end;   

%%
function colorwheel = makeColorwheel()
%   color encoding scheme
%   adapted from the color circle idea described at
%   http://members.shaw.ca/quadibloc/other/colint.htm
RY = 15;
YG = 6;
GC = 4;
CB = 11;
BM = 13;
MR = 6;

ncols = RY + YG + GC + CB + BM + MR;
colorwheel = zeros(ncols, 3); % r g b
col = 0;
%RY
colorwheel(1:RY, 1) = 255;
colorwheel(1:RY, 2) = floor(255*(0:RY-1)/RY)‘;
col = col+RY;
%YG
colorwheel(col+(1:YG), 1) = 255 - floor(255*(0:YG-1)/YG)‘;
colorwheel(col+(1:YG), 2) = 255;
col = col+YG;
%GC
colorwheel(col+(1:GC), 2) = 255;
colorwheel(col+(1:GC), 3) = floor(255*(0:GC-1)/GC)‘;
col = col+GC;
colorwheel(col+(1:CB), 2) = 255 - floor(255*(0:CB-1)/CB)‘;
colorwheel(col+(1:CB), 3) = 255;
col = col+CB;
%BM
colorwheel(col+(1:BM), 3) = 255;
colorwheel(col+(1:BM), 1) = floor(255*(0:BM-1)/BM)‘;
col = col+BM;
%MR
colorwheel(col+(1:MR), 3) = 255 - floor(255*(0:MR-1)/MR)‘;
colorwheel(col+(1:MR), 1) = 255;

运行结果如下图所示:

时间: 2024-11-07 00:15:46

L-K光流法---视频追踪的相关文章

OpenCv_Image与光流法中设置ROI区域

无论是在图片显示中或者是在光流法寻找角点的过程中,我们都会遇到ROI这个东西.它的作用就是让我们能够专注于图像或者当前视频帧中的某一块区域(我们称之为感兴趣区域) 进行处理,而不是对整个图像或者是整个视频帧进行处理,这不仅能够排除掉一些不必要的误差干扰,还能减少运算量.接下来分别说明来图像和光流法视频中如何设置ROI. 图像设置ROI 代码如下: /* * Description : setting ROI in image * Author : Liulongpo * Date : 2015年

【图像处理】openCV光流法追踪运动物体

openCV光流法追踪运动物体 email:[email protected] 一.光流简单介绍 摘自:zouxy09 光流的概念是Gibson在1950年首先提出来的.它是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的相应关系.从而计算出相邻帧之间物体的运动信息的一种方法.一般而言,光流是因为场景中前景目标本身的移动.相机的运动,或者两者的共同运动所产生的. 研究光流场的目的就是为了从图片序列中近似得到

光流法optical flow

光流是图像亮度的运动信息描述.光流法计算最初是由Horn和Schunck于1981年提出的,创造性地将二维速度场与灰度相联系,引入光流约束方程,得到光流计算的基本算法.光流计算基于物体移动的光学特性提出了2个假设: ①运动物体的灰度在很短的间隔时间内保持不变: ②给定邻域内的速度向量场变化是缓慢的. 算法原理 假设图像上一个像素点(x,y),在t时刻的亮度为E(x+Δx,y+Δy,t+Δt),同时用u(x,y0和v(x,y)来表示该点光流在水平和垂直方向上的移动分量: u=dx/dt v=dy/

光流法

原文:http://blog.csdn.net/crzy_sparrow/article/details/7407604 本文目录: 一.基于特征点的目标跟踪的一般方法 二.光流法 三.opencv中的光流法函数 四.用类封装基于光流法的目标跟踪方法 五.完整代码 六.参考文献 一.基于特征点的目标跟踪的一般方法 基于特征点的跟踪算法大致可以分为两个步骤: 1)探测当前帧的特征点: 2)通过当前帧和下一帧灰度比较,估计当前帧特征点在下一帧的位置: 3)过滤位置不变的特征点,余下的点就是目标了.

K近邻法(KNN)原理小结

K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出了.这里就运用了KNN的思想.KNN方法既可以做分类,也可以做回归,这点和决策树算法相同. KNN做回归和分类的主要区别在于最后做预测时候的决策方式不同.KNN做分类预测时,一般是选择多数表决法,即训练集里和预测的样本特征最近的K个样本,预测为里面有最多类别数的类别.而KNN做回归时,一般是选择平均

Horn&ndash;Schunck 光流法与其算法理解(gup cuda)

1. 基于Horn-Schunck模型的光流算法 1.1     光流的约束条件 光流 的假设条件认为图像序列,在时间t 的某一像素点与在时间t+1的这一像素点的偏移量保持不变,即 .这就是灰度值守恒假设,通过Taylor展开,就能得到光流的约束条件(OFC): ,其中下标表示图像的梯度. 1.2     Horn-Schunck 模型 1981年,Horn和Schunck根据同一个运动物体的光流场具有连续.平滑的特点, 提出一个附加约束条件,将光流场的整体平滑约束转换为一个变分的问题.它的能量

HS 光流法详解

前言 本文较为详细地介绍了一种经典的光流法 - HS 光流法. 光流法简介 当人的眼睛与被观察物体发生相对运动时,物体的影像在视网膜平面上形成一系列连续变化的图像,这一系列变化的图像信息不断 "流过" 视网膜,好像是一种光的  "流",所以被称为光流. 光流是基于像素点定义的,所有光流的集合称为光流场.通过对光流场进行分析,可以得到物体相对观察者的运动场.在这过程中分析的算法称为光流法. HS 光流法的推导 HS光流计算基于物体移动的光学特性的两个假设: 1. 运动

目标跟踪之光流法---光流法简单介绍

光流的概念是Gibson在1950年首先提出来的.它是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法.一般而言,光流是由于场景中前景目标本身的移动.相机的运动,或者两者的共同运动所产生的.其计算方法可以分为三类: (1)基于区域或者基于特征的匹配方法: (2)基于频域的方法: (3)基于梯度的方法: 简单来说,光流是空间运动物体在观测成像平面上的像素运

光流法与KLT

一 光流 光流的概念是Gibson在1950年首先提出来的.它是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法.一般而言,光流是由于场景中前景目标本身的移动.相机的运动,或者两者的共同运动所产生的.其计算方法可以分为三类: (1)基于区域或者基于特征的匹配方法: (2)基于频域的方法: (3)基于梯度的方法: 简单来说,光流是空间运动物体在观测成像平面