石鑫华视觉论坛

 找回密码
 注册会员
查看: 194|回复: 0

[原创] Optical Flow光流函数计算速度

[复制链接]
  • TA的每日心情
    擦汗
    13 小时前
  • 签到天数: 3382 天

    连续签到: 4 天

    [LV.Master]2000FPS

     楼主| 发表于 2024-4-28 10:21:41 | 显示全部楼层 |阅读模式 来自:广东省东莞市 电信

    注册登陆后可查看附件和大图,以及购买相关内容

    您需要 登录 才可以下载或查看,没有账号?注册会员

    x
    Optical Flow光流函数计算速度
    image1.png
    OpticalFlow光流函数计算速度视频号
    OpticalFlow光流函数计算速度B
    通过机器视觉图像处理的方法,也是可以估计速度的。虽然没有交警测试仪那么准确,但是也是可以得到一个大概的速度。我们在高速上看到路边摆着的那种带摄像头还有数显的测速装备(通常只显示100KM的时速或以下,绿色没超速,红色超速),大概也是基于图像处理的方式,连续抓取两幅图像,通过目标在两幅图像中的位移以及两幅图像的时间差来计算速度的:V=D/T
    NI视觉中,官方提供了一组运动估计的函数,通过光流函数可以计算出流动目标的大概的运动方向的速度。
    image2.png
    NI视觉的运动估计
    其中光流(HS)、光流(LK)是用于计算目标的速度流信息,配合后面的覆盖运动矢量函数,可以将估计的运动方向的速度大小以覆盖箭头的方式表现在图像上,但是些算法,并没有直接输出速度数据。光流(LKP)函数则是基于金字塔的LucasKanade算法计算两幅连续图像之间的一组特征点的位置变化,示例中没有返回位置数据,但是函数本身是有Distance距离返回的,可以创建显示控件得到两幅图像之间的特征点的距离变化D,然后再根据两幅图像的时间差T,根据公式V=D/T就可以计算出特征点的速度V了。但是这种方法需要图像中有固定的目标特征点,很多时候并不好满足。
    image3.png
    基于光流(LKP)的距离计算
    image4.png
    基于光流(HS)或光流(LK)的速度估计
    使用基于光流(HS)或光流(LK)函数的速度估计,则看起来要更容易估计常规流体的运动速度,但是这两个函数均没有距离或速度相关的数据输出。这个是NI对自己的算法没信息,还是保守不给用户使用数据啊?都可以覆盖矢量了,有方向有大小,为什么不返回数据呢?
    在基于光流(HS)或光流(LK)的光流范例基础上,修改了一下,应该也可以大概的计算一下速度。上面的基于光流(HS)或光流(LK)的速度估计中,不是有覆盖矢量图了吗?那么使用复制覆盖函数,将这些覆盖复制到一幅纯黑或纯白的背景图像上,然后再去计算这些覆盖矢量的特征,应该就可以估算出运动方向和速度大小了:
    image5.png
    OpticalFlow光流覆盖矢量提取估计速度.vi程序框图
    image6.png
    OpticalFlow光流覆盖矢量提取估计速度.vi前面板效果图
    Optica Flow基础上,增加了一个复制覆盖的功能,将其速度信息的覆盖复制到另一个纯色背景图像上,这样方便去分析覆盖的矢量箭头。利用箭头特征的长短、方向,使用粒子分析等函数,应该可以简单的计算出速度信息,当然就算能计算,那也只是一个相对值,精度不会太高就是了。因为他本身计算出来的速度矢量就不会太精准,还因为覆盖的矢量也只量I32类型的整数类型。之后再使用粒子分析等函数时,会再次丢失一些精度。整体精度不会很高就是了。不过应该可以大概的估计出一个速度。如果是左右流动的方向,那么可以考虑计算一下所有矢量的平均值,这样相对来说可能更准确一些。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册会员

    本版积分规则

    LabVIEW HALCON图像处理入门教程(第二版)
    石鑫华机器视觉与LabVIEW Vision图像处理PDF+视频教程11种全套
    《LabVIEW Vision函数实例详解》教程-NI Vision所有函数使用方法介绍,基于NI VISION2020,兼容VDM21/22/23/24

    QQ|石鑫华视觉论坛 |网站地图

    GMT+8, 2024-11-20 21:28

    Powered by Discuz! X3.4

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表