* This example program shows how to use optical_flow_mg to compute the optical flow in an image sequence and how to segment the optical flow.

*这个示例程序显示了如何使用._flow_mg来计算图像序列中的光流,以及如何分割光流。

dev_update_off ()

dev_close_window ()

* Initialize the image sequence.

初始化图像序列

read_image (Image1, 'xing/xing000')

dev_open_window_fit_image (Image1, 0, 0, -1, -1, WindowHandle)

* Set the display parameters for the vector field.

设置现实的矢量场参数

dev_set_paint (['vector_field',6,1,2])

定义灰度值输出模型,

dev_set_draw ('margin')

for I := 1 to 587 by 1

* Read the current image of the image sequence.

读连续的图像序列

read_image (Image2, 'xing/xing'+I$'03')

* Compute the optical flow.

计算光流

optical_flow_mg (Image1, Image2, VectorField, 'fdrig', 0.8, 1, 8, 5, 'default_parameters', 'accurate')

*计算两幅图片的光流场。

参数:1&2是输入的两个单色图片序列的连续图片,

3为输出的光流结果

4是求取光流三种算法的选取其中的一种

5高斯平滑初始偏差初始值

6积分滤波偏差初始值

7平滑项在数据项中的权重

8梯度恒定性相对于灰度值恒定性的权重

9多栅算法的名字

10多栅算法的变量

* Segment the optical flow vector field.

分割矢量场

threshold (VectorField, Region, 1, 10000)

* Display the current image of the sequence.  Note that this means that the optical flow vectors will also be displayed at the "end" of the movementof the objects in the image.

显示序列的当前图像。注意,这意味着光流矢量也将显示在图像中物体运动的“末端”。

dev_display (Image2)

* Display the optical flow.

dev_set_color ('yellow')

dev_set_line_width (1)

dev_display (VectorField)

* Display the segmented optical flow.

dev_set_color ('green')

dev_set_line_width (3)

dev_display (Region)

* Copy the current image to the previous image of the sequence.

*将当前图像复制到序列的前一个图像。

copy_obj (Image2, Image1, 1, 1)

endfor

背景介绍

光流的概念是Gibson在1950年首先提出来的。它是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。一般而言,光流是由于场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。

当人的眼睛观察运动物体时,物体的景象在人眼的视网膜上形成一系列连续变化的图像,这一系列连续变化的信息不断“流过”视网膜(即图像平面),好像一种光的“流”,故称之为光流(optical flow)。光流表达了图像的变化,由于它包含了目标运动的信息,因此可被观察者用来确定目标的运动情况。

研究光流场的目的就是为了从图片序列中近似得到不能直接得到的运动场。运动场,其实就是物体在三维真实世界中的运动;光流场,是运动场在二维图像平面上(人的眼睛或者摄像头)的投影。

那通俗的讲就是通过一个图片序列,把每张图像中每个像素的运动速度和运动方向找出来就是光流场。那怎么找呢?咱们直观理解肯定是:第t帧的时候A点的位置是(x1, y1),那么我们在第t+1帧的时候再找到A点,假如它的位置是(x2,y2),那么我们就可以确定A点的运动了:(ux, vy) = (x2, y2) - (x1,y1)。

那怎么知道第t+1帧的时候A点的位置呢? 这就存在很多的光流计算方法了。

1981年,Horn和Schunck创造性地将二维速度场与灰度相联系,引入光流约束方程,得到光流计算的基本算法。人们基于不同的理论基础提出各种光流计算方法,算法性能各有不同。Barron等人对多种光流计算技术进行了总结,按照理论基础与数学方法的区别把它们分成四种:基于梯度的方法、基于匹配的方法、基于能量的方法、基于相位的方法。近年来神经动力学方法也颇受学者重视。

作者:来套煎饼果子
链接:https://www.jianshu.com/p/f91a8a519a50
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

车流检测之halcon光流法算法实现相关推荐

  1. java光流法运动目标检测_基于光流法运动目标检测和跟踪算法.PDF

    第,+ 卷第' 期 东 北 大 学 学 报 ( 自 然 科 学 版 ) 5# (! ,+ ,*#! ' ! " #' 年 ' 月 "#$%&'( #) *#%+,-'.+- ...

  2. 稀疏光流python_python光流法算法学习

    基于python-opencv程序对光流法的理解 光流法的定义 Lucas-Kanade光流原理 Shi-Tomasi角点检测 python-opencv代码demo 光流法的定义 光流法是空间运动物 ...

  3. HALCON:Optical Flow(光流法)

    HALCON:Optical Flow(光流法) 光流法基本原理 光流概念由Gibson在1950年首先提出来,它是一种简单实用的图像运动表达方式,通常定义为一个图像序列中图像亮度模式的表观运动,即空 ...

  4. 基于运动信息的物体检测(背景差分法、帧间差分法和光流法)。

    1.背景差分法: 它的基本思想是将输入图像与背景模型进行比较,通过判定灰度等特征的变化,或用直方图等统计信息的变化来分割运动目标. 首先建立好背景模型,存储背景图像.当当前帧与背景图像相减大于一定的阈 ...

  5. OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope

    OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...

  6. Python人工智能实例 │ 使用Haar级联进行人脸检测、使用CAMShift算法、光流法进行人脸追踪

    使用Haar级联进行人脸检测 使用CAMShift算法进行人脸追踪 使用光流法进行人脸追踪 01.背景知识 1.1●Haar级联简介 Haar级联是基于Haar特征的级联分类器.那么级联分类器是什么? ...

  7. 运动目标检测__光流法

    以下内容摘自一篇硕士论文<视频序列中运动目标检测与跟踪算法的研究>: 1950年Gibson首先提出了光流的概念,光流(optical flow)法是空间运动物体在观测成像面上的像素运动的 ...

  8. pythonopencv算法_opencv python 光流法

    光流法 光流是由对象或相机的移动引起的两个连续帧之间的图像对象的明显运动的模式.它是2D矢量场,其中每个矢量是位移矢量,表示从第一帧到第二帧的点的移动. 上图表示的是一个球在连续的5帧图像中的运动,箭 ...

  9. 目标检测、追踪梳理:帧差法、光流法、背景减除法

    (0)总览 运动目标检测是指在序列图像中检测出变化区域并将运动目标从背景图像(背景层)中提取出来.通常情况下,目标分类.跟踪和行为理解等后处理过程仅仅考虑图像中对应于运动目标的像素区域(前景层),因此 ...

最新文章

  1. ffmpeg + opencv 把摄像头画面保存为mp4文件
  2. Spring MVC 解读——mvc:annotation-driven/
  3. C++中的new和delete操作符重载
  4. JZOJ 1016. 【PKU3321】苹果树
  5. python3操作MySQL:查询
  6. console react 去除_vue或react项目生产环境去掉console.log的操作
  7. mysql 测试数据的脚本_Mysql脚本 生成测试数据
  8. 【Java】GUI界面切换的解决方案
  9. 江阴南菁高考2021高考成绩查询,江阴8所四星级高中高考成绩公布 南菁高中本一进线率达到了92.97%...
  10. js声明变量三种方式
  11. 浮点数:一种有漏洞的抽象【译】
  12. IDEA 报 「Could not autowire. No beans of ‘UserMapper‘ type found」错误解决方案
  13. HDMI EDID解读
  14. CSDN 博客前200名
  15. js实现select动态添加option,默认为选中状态
  16. 麦克风音频服务器未响应,win7电脑插入麦克风后realtek高清晰音频管理器没有反应怎么办...
  17. RS485接线 | Modbus智能LED三色声光报警器 机房警示灯带蜂鸣器
  18. 计算机系统:计算机系统的基本组成
  19. uart硬件一些小知识
  20. vmware启动sda assuming drive cache黑屏

热门文章

  1. Docker : 数据卷(创建、挂载、查看、删除)
  2. Java Web Start实例
  3. WebService中文件传输
  4. 生成随机码,保存随机文件.
  5. (转)Linux服务器磁盘空间占满问题
  6. iPhone屏幕尺寸/launch尺寸/icon尺寸
  7. SqlBulkCopy 批量复制数据到数据表
  8. redhat rpmforge epel 安装源配置
  9. 再送一波干货,测试2000线程并发下同时查询1000万条数据库表及索引优化
  10. 学习API HOOK,编写了一个winsock 的封包抓取程序,可免费使用;