目标检测光流法(四):matlab下光流法工具箱

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/on2way/article/details/48978585

该节主要介绍下matlab下的光流法以及一个研究物体检测方面的一个较好的工具箱 :Piotr’s Computer Vision Matlab Toolbox
http://vision.ucsd.edu/~pdollar/toolbox/doc/index.html

工具箱下载完以后,配合这个工具箱使用的还需要一个辅助工具箱:
Matlab evaluation/labeling code version 3.2.1 or later
这个里面有下载地址

将这两个工具箱及其里面所有文件的路径都添加到matlab路径中去,这样的话基本上是可以用了。
Piotr’s 的工具箱里面的函数很多,也涉及到了很多方面,更主要的是关于目标检测方面的。看看其中的目录:
这里写图片描述

里面包括了图像特征提取、一些分类算法(SVM、随机森林、adaboost等等优秀的算法)、滤波、显示等等很多,研究这方面的可以详细去上面的那个网站了解哦,真的不错的工具箱。本节我们主要介绍其中的videos模块里面的光流函数:

[Vx,Vy,reliab] = opticalFlow( I1, I2, pFlow )

一般的工具箱函数很多都是封装的较好,适用于多个场合与方法的,当然也就相对很复杂了,这个也不例外。函数的形式如上,参数的意义如下:

Input输入
I1, I2 - 用于计算光流的两幅图像
pFlow - 结构体参数(包含以下参数)
.type - 计算光流的方法选择,可供选择的有’LK’,’HS’,’SD’,这几种方法应该熟悉吧,第一种经典的LK方法,局部性质的,速度快,在opencv中也有说过。后两种是一种全局性的方法,速度慢点,opencv也有。该参数默认是’LK’方法的。
.smooth - [1] smoothing radius for triangle filter (may be 0)
.filt - [0] median filtering radius for smoothing flow field(对流场进行中值滤波的半径选择)
.minScale - [1/64] minimum pyramid scale (must be a power of 2)(图像金字塔的尺寸参数–在opencv也介绍过了)
.maxScale - [1] maximum pyramid scale (must be a power of 2)
.nBlock - [5] number of tested blocks [SD only](块匹配数目)

OUTPUTS输出:
Vx, Vy - x,y components of flow [Vx>0->right, Vy>0->down](x,y方向上的光流)
reliab - reliability of flow in given window(给定窗口的光流可信度,可以选择有或者没有)。

好了参数介绍到这里,下面小实践下,该函数的注释里面也有些例子,拿来看看:
首先是加载两幅图像(认为是前后两帧的存在一些运动图像),这里依然用上几节使用过的两幅树的图像。

先用LK方法显示一下光流:

load opticalFlowTest;
[Vx,Vy]=opticalFlow(I1,I2,'smooth',1,'radius',10,'type','LK');
subplot(1,2,1),imshow(double(Vx),[]);
subplot(1,2,2),imshow(double(Vy),[]);

这里写图片描述
有没有发现计算出来的光流与上节opencv中计算出来的光流差不多。

下面将三种方式都进行试一下,并比较他们各自计算刘需要的时间,同时用工具箱里面写的显示函数im可以彩色的显示出来看看:

  load opticalFlowTest;
  prm={'smooth',1,'radius',10,'alpha',20,'nIter',250,'type'};
  tic, [Vx1,Vy1]=opticalFlow(I1,I2,prm{:},'LK'); toc
  tic, [Vx2,Vy2]=opticalFlow(I1,I2,prm{:},'HS'); toc
  tic, [Vx3,Vy3]=opticalFlow(I1,I2,prm{:},'SD','minScale',1); toc
  figure(1); im([Vx1 Vy1; Vx2 Vy2; Vx3 Vy3]); colormap jet;

三者运行时间如下:
LK:时间已过 0.056681 秒。
HS:时间已过 0.480848 秒。
SD:时间已过 0.339636 秒。
可以看到LK还是速度快不少的。

结果如下:
这里写图片描述
三者在光流计算上其实差不是太多,考虑速度与效果的话用LK是不是更好些,这也是为什么将LK作为默认的方法吧。
好了这是两帧图像中存在的光流场,如何用光流方法去处理连续一段视频以及定位视频中运动目标才是光流真正的用途。

没有更多推荐了,返回首页