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

该节主要介绍下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),[]);
   
   
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

这里写图片描述
有没有发现计算出来的光流与上节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;
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在MATLAB中,可以使用光流法实现目标检测光流法是一种通过计算连续图像之间的像素运动来估计目标运动的方法。下面是一个基本的光流法目标检测的步骤: 1. 导入图像序列:首先,需要导入包含目标的图像序列。可以通过使用MATLAB的imread函数来读取每一帧的图像。 2. 光流估计:利用MATLAB中的光流估计函数,例如opticalFlowLK函数,计算每个像素的光流向量。这些向量表示了每个像素在两帧图像之间的运动。 3. 特征点提取:为了减少计算量和提高检测准确率,可以使用MATLAB的提取特征点函数,例如detectSURFFeatures或detectFASTFeatures等,来选择特定区域的特征点。 4. 特征匹配:使用MATLAB的matchFeatures函数将两个图像帧之间的特征点进行匹配。 5. 目标跟踪:根据帧间特征点的匹配结果,可以通过计算特征点的平均运动向量或其他跟踪方法来估计目标的运动轨迹。 6. 目标检测:根据目标的运动轨迹,可以通过设置阈值或其他规则来检测和识别目标。 7. 可视化结果:最后,在MATLAB中可以使用图形函数,如plot或imshow等,来可视化目标的检测结果,并将其显示在图像上。 总之,利用MATLAB光流法实现目标检测可以帮助我们从图像序列中提取目标的运动信息,并进行跟踪和检测。这种方法可以广泛应用于视频监控、自动驾驶、行人检测等领域。 ### 回答2: 光流法是一种常用的计算机视觉技术,用于检测视频序列中的目标运动。在MATLAB中,可以使用光流法进行目标检测的步骤如下: 1. 导入视频序列:首先,需要将视频序列导入到MATLAB中,使用VideoReader函数读取视频文件,并获取每个帧的图像数据。 2. 预处理图像:对于每个帧的图像,可以进行预处理步骤,如灰度化、降噪等,以减少计算量和提高光流估计的准确性。 3. 计算光流估计:使用opticalFlow函数计算每个像素点的光流向量。光流向量表示了当前帧中每个像素点相对于前一帧的位置变化。 4. 光流可视化:可以使用plot函数将光流向量可视化,以便观察目标的运动情况。可以通过调整阈值或其他参数来筛选出与目标相关的光流向量。 5. 目标检测:根据目标的运动特点,在光流图中检测和跟踪目标。可以通过设置阈值、区域大小等参数来筛选出目标的光流向量。 6. 目标跟踪:使用跟踪算法(如卡尔曼滤波器)来跟踪目标的位置和运动轨迹。可以使用plot函数将跟踪结果可视化。 7. 输出结果:根据目标检测和跟踪的结果,可以将结果保存为视频或图像文件,或者输出目标的位置和运动参数。 总的来说,MATLAB提供了丰富的函数和工具箱来实现光流法目标检测。通过对视频序列进行预处理、计算光流估计、可视化和目标检测跟踪等步骤,可以有效地实现目标的检测和跟踪任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值