[Halcon例程]光流法分割运动中的汽车optical_flow.hdev


前言

运动物体的常用方法就是帧差法和光流法,之前以介绍了视频的两帧差法去跟踪视频中的运动物体,今天借助Halcon的例程来介绍一下光流法的原理和使用方法。

1、原理介绍

光流法是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。
一般而言,光流是由于场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。研究光流场目的就是为了从图片序列中近似得到不能直接得到的运动场。光流场,是运动场在二维图像平面上(人的眼睛或者摄像头)的投影。通俗的讲,通过一个图片序列,把每张图像中每个像素的运动速度和运动方向找出来就是光流场。
关于光流法的介绍、研究部分参考以下博文:
光流法介绍

2、例程注释

* 序展示了如何使用optical_flow_mg算子计算图像序列中的光流以及如何分割光流。
dev_update_off ()
dev_close_window ()
read_image (Image1, 'xing/xing000')
dev_open_window_fit_image (Image1, 0, 0, -1, -1, WindowHandle)
* 设置光流矢量的显示方式
dev_set_paint (['vector_field',6,1,2])
dev_set_draw ('margin')
for I := 1 to 587 by 1    
    read_image (Image2, 'xing/xing' + I$'03')
    *计算两幅图像中的光流
    optical_flow_mg (Image1, Image2, VectorField, 'fdrig', 0.8, 1, 8, 5, 'default_parameters', 'accurate')
    * 二值化分割光流区域
    threshold (VectorField, Region, 1, 10000)
    dev_display (Image2)
    dev_set_color ('yellow')
    dev_set_line_width (1)
    dev_display (VectorField)
    dev_set_color ('green')
    dev_set_line_width (3)
    dev_display (Region)
    * 替换当前图为上一帧图
    copy_obj (Image2, Image1, 1, 1)
endfor

3、核心算子解析

optical_flow_mg算子.PNG
主要参数:
光流法算法Algorithm:

  • ‘fdrig’,使用 Brox、Bruhn、Papenberg 和 Weickert 提出的方法。这种方法是流动驱动的、稳健的、各向同性的,并使用梯度恒常项。
  • ‘ddraw’,使用了 Nagel 和 Enkelmann 提出的方法的稳健变体。这种方法是数据驱动的、稳健的、各向异性的,并使用扭曲(与原始方法相反)。
  • ‘clg’,使用了 Bruhn、Weickert、Feddern、Kohlberger 和 Schnörr 提出的局部全局组合方法。

4、运行结果

原图.png结果.PNG
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值