文章目录

  • 一.OpencCV 4.0 新特性介绍
    • 首先是OpenCV完全支持了C++ 11
    • DNN(深度神经网络)模块是目前OpenCV更新最重要的模块
    • G-API 为算法的硬件优化加速提供计算图支持
    • Objdetect新增 QR 码的检测和解码
    • 实现了流行的 Kinect Fusion 算法
    • 非常高效且高质量的 DIS 密集光流算法已经从 opencv_contrib 转移到 opencv/video 模块
  • 二.Opencv 4.0 安装
  • 三.DIS 光流
    • 1.DIS光流介绍
    • 2.DIS光流调用流程
    • 3.Dis光流结果
    • INDEMIND双目视觉惯性模组运行DIS光流算法
  • 四.关于INDEMIND

在OpenCV 3.0发布至今三年半的时间中,经过 Alpha、Beta、RC等版本的打磨,OpenCV 4.0终于正式来袭,为我们带来很多新特性。这些新特性具体会为OpenCV带来怎样的提升?在实际使用情况下表现如何?INDEMIND在接下来的一段时间中将带大家一一解析,如有不实之处,敬请指正。

一.OpencCV 4.0 新特性介绍

首先是OpenCV完全支持了C++ 11

由于OpenCV 最开始开发时的语言是 C,导致许多模块无法利用 C++ 11 的良好特性,OpenCV 4.0 版本的一个重要使命就是去除 C 语言风格的接口,使其完全支持 C++ 11。

  1. 大量从 OpenCV 1.x 遗留的 C 语言风格的 API 接口被删掉,主要影响的模块是 objdetect, photo, video, videoio, imgcodecs, calib3d。

  2. 在 core 模块中的持久化(在 XML,YAML 或 JSON 中存储和加载结构化数据)已完全用 C ++ 重新实现,并去除了相应的 C 风格的接口。 目前,base64 支持尚未完成(仅支持加载 base64 编码的 XML 和 YAML,还未支持编码)。 现在,存储在 FileNode 中的序列的随机访问是 O(N) 操作; 使用 cv :: FileNodeIterator 能够更快地进行顺序访问, 速度上,FileStorage 的加载比以前的实现少了 3-6 倍的内存!

DNN(深度神经网络)模块是目前OpenCV更新最重要的模块
  1. 增加 Mask-RCNN 模型支持。

  2. 集成 ONNX 解析器。 支持多个流行的分类网络。 部分支持 YOLO 对象检测网络(YOLO 的 ONNX 版本缺少一些提供矩形列表的最终图层)。

  3. 通过引入 Intel DLDT 改进 DNN 模块速度。

  4. API 更改:默认情况下,blobFromImage 方法不会交换 R 和 B 通道,也不会对输入图像进行裁剪。 而且,此 API 更改也已添加到 OpenCV 3.4 分支。

  5. 为不支持 OpenCL 而支持 Vulkan 的硬件平台添加了实验性质的 Vulkan 后端(还在开发中!不建议大家使用)。

  6. 为 OpenCV 支持的最流行的深度学习网络添加了快捷方式。 可以通过指定模型的别名,跳过预处理参数甚至模型的路径!

  7. 修复了 AMD 和 NVIDIA GPU 上的 OpenCL 加速。 现在,可以为模型启用 DNN_TARGET_OPENCL,开启 OpenCL 支持。 请注意,DNN_TARGET_OPENCL_FP16 仅在英特尔 GPU 上进行测试,因此仍需要额外的 flags。

G-API 为算法的硬件优化加速提供计算图支持

opencv_gapi 是全新添加的模块,它是非常有效的图像处理引擎。开发者可以在程序中定义多个图像处理步骤组成的图,执行的时候进行优化,使得 fast and portable。

Objdetect新增 QR 码的检测和解码

这个功能在移动端几乎成为 APP 的标配了

实现了流行的 Kinect Fusion 算法

并针对 CPU 和 GPU(OpenCL)进行了优化,集成到 opencv_contrib / rgbd 模块中。
为了使实时采集处理更高效,在 opencv / videoio 模块中更新了 Kinect 2 支持。 在 4.0 beta
版本中,iGPU 的代码已经加速,在高分辨率的情况下(512x512x512 integration volume),性能提升了 3 倍。

非常高效且高质量的 DIS 密集光流算法已经从 opencv_contrib 转移到 opencv/video 模块

本次光流模块的更新是个亮点,毕竟之前OpenCV的光流模块相比学术界的最新成果实在显得太弱了。[1]

新版OpenCV 4.0更加聚焦图像处理基础功能和深度学习模块,尤其是DIS光流算法的更新,算是补足了光流算法落后的短板,然而DIS算法表现怎么样,我们不妨让事实说话。

注:本次DIS光流算法分析基于OpenCV测试集以及INDEMIND双目视觉惯性模组运行DIS算法实测。

二.Opencv 4.0 安装

首先,我们要安装OpenCV 4.0,具体操作如下:https://opencv.org/releases.html

  1. 下载最新的opencv 4.0.0地址如下:

  2. 解压下载的压缩包。从源码安装opencv4.0.0

a)安装openv依赖性。

 sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

b) Cmake 配置opencv,运行命令如下:

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

初次安装opencv可以选择/usr/local,对于电脑中已经有opencv的,可以选择其他安装目录。

c) 运行Make 和 Make install

三.DIS 光流

1.DIS光流介绍

光流是空间运动物体在观测成像平面上的像素运动的“瞬时速度”。光流的研究是利用图像序列中的像素强度数据的时域变化和相关性来确定各自像素位置的“运动”。研究光流场的目的就是为了从图片序列中近似得到不能直接得到的运动场。

光流法的前提假设:

(1)相邻帧之间的亮度恒定;

(2)相邻视频帧的取帧时间连续,或者,相邻帧之间物体的运动比较“微小”;

(3)保持空间一致性;即,同一子图像的像素点具有相同的运动 [2]

DIS 光流算法是Dense Inverse Search-basedmethod的简称,于2016年由Till Kroeger等人提出的一种在光流质量和计算时间中取得平衡的算法。

主要包含3个方面:

(1)基于块对应关系的逆搜索
(2)沿着多尺度做图像块的聚合从而获得稠密的光流场
(3)精细化搜索。精细化搜索。

DIS算法最大的优点在于运算速度的提升,在单核cpu上,1024*436分辨率可以达到300Hz-600Hz运行速率;包含图像预处理,例如平滑,缩放,梯度计算等运行速度能达到42/46 Hz,完全满足实时的需求。

运行时间及效果对比图如下:


Figure 1: Our DIS method runs at 10Hz up to 600Hz on a single coreCPUforanaverageend-pointpixelerrorsmallerorsimilarto top opticalflow methods at comparable speed. This plot excludes preprocessing time for all methods. Details in§3.1,3.3.

[4] Figure 18: Exemplary results on Sintel (training) and error maps. In each block of 2 × 6 images. Top row, left to right: Our method for operating points (1)-(4), Ground Truth. Bottom row: Error heat maps scaled from blue (no error) to red (maximum ground truth flow magnitude), Original Image.[3]

具体详细信息,请查看《Fast Optical Flow Using Dense Inverse Search》原论文。

2.DIS光流调用流程

Dis光流算法在OpenCV 4.0中被集成到video模块中。

调用

Ptr<DenseOpticalFlow> algorithm = DISOpticalFlow::create(DISOpticalFlow::PRESET_MEDIUM);
algorithm->calc(prevgray, gray, flow);

流程图如下:

3.Dis光流结果

说明:将光流场转换到HSV空间中显示,光流的数值用不同颜色来区分,色斑颜色深浅代表运动速率,白色代表物体无运动。

图像说明:左侧彩图为原始图像,白色背景图像为HSV空间显示,蓝色背景图像为HSV空间显示叠加原始图像。

为了充分测试DIS光流算法,我们对比了Farneback 光流算法在不同的纹理和光照下的结果。

本次的demo所用的测试集为:opencv 中的samples/data/vtest.avi。这个demo前景和背景的纹理都较为丰富。


如上图所示,Dis光流算法背景纯白无光斑,说明算法对纹理丰富的背景区域或无运动区域处理的更好。



在光流算法中,图像中的同一移动物体的速度应该一致,对应的色斑应是一致或平滑渐变,而Farneback 光流算法光斑却出现了突变,证明DIS光流算法对图像运动物体处理更精确。

如图,图像中行人路过路灯时,Farneback 光流算法将路灯识别成了移动物体,DIS光流算法并未出现类似错误,证明DIS光流算法对移动物体于固定物体叠加状态处理更精准迅速。

总结:

在纹理丰富场景,OpenCV 4.0中DIS光流算法对运动物体检测精准流畅,行人色斑一致顺畅,复杂场景(运动与固定物体重叠)无明显错误,达到了实用标准,比Farneback 光流算法表现更好。

INDEMIND双目视觉惯性模组运行DIS光流算法

说明:本Demo演示Dis光流算法与Farneback 光流算法在前景和背景纹理都较弱(天空部分无纹理),效果如下:


从Demo中可以看出, DIS光流算法对天空无文理、地面弱文理等场景支持不足,出现了大量混乱光斑,实用效果不及Farneback 光流算法。建议各位在使用OpenCV 4.0应对弱纹理场景时,使用Farneback 光流算法。

关于DIS光流算法的介绍到这里先告一段落,接下来INDEMIND将为大家带来更多OpenCV 4.0的新特性解析验证,敬请关注。

四.关于INDEMIND

INDEMIND是一家专注于计算机视觉技术研发与嵌入式计算平台研发的人工智能公司,行业领先的计算机视觉方案提供商。研发团队结合自身在计算机视觉技术上的优势,研发了包含空间感知、环境语义、多传感器融合等算法的软硬件全栈技术方案,推出了双目视觉惯性模组、环境感知视觉前端计算平台,以满足智能摄像头、机器人及穿戴计算等行业的感知计算需求。

参考资料:
[1] 周强.千呼万唤始出来!OpenCV 4.0正式发布!.2018-11-22
[2] jobbofhe.光流法简单介绍.2018-5-25
[3]Kroeger,T&R.Timofte&D.X.Dai&L.V. Gool. Fast Optical Flow Using Dense Inverse Search [J] .2016-09-17
[4]Kroeger,T&R.Timofte&D.X.Dai&L.V. Gool. Fast Optical Flow Using Dense Inverse Search [J] .2016-09-17

INDEMIND带你玩转OpenCV4.0(一):DIS光流算法解析相关推荐

  1. 找不到opencv_world310.lib OpenCv 一次配置永久使用 基于OpenCv4.0 于仕琪算法 dlib的疲劳检测

    第1次写博客 格式啥的还不是很好,前期配置了OpenCv4.0,然后因为OpenCv自身的人脸检测功能速度相比于仕琪老师自己写的库而言更慢一点,然后又配置了一下于仕琪老师的库.最后基本实现了人脸检测的 ...

  2. OpenCV 4.0 Dis光流算法 运动检测

    代码参考:https://github.com/gloomyfish1998/opencv_tutorial/blob/62fe36357e918fb390047527f7c615d56d16d6a1 ...

  3. 五分钟带你玩转Zabbix6.0容器化HA集群

    图片 蔡斯 | Zabbix开源社区签约专家 Zabbix资深玩家,SRE高级运维,架构师.精通服务组件监控.模板制作及告警治理. 擅长领域:Zabbix API定制化开发,对接企业蓝鲸,JMS保垒机 ...

  4. 江哥带你玩转C语言 | 11- C语言排序算法

    计数排序(Counting Sort) 计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出.它的优势在于在对一定范围内的整数排序时,快于任何比较排序算法. ...

  5. 五分钟带你玩转SpringSecurity(四)配置全解析,带你掌握security核心要点

    1认证 认证:辨别用户是否本系统用户. 优势:1 提供多样式的加密方法 2 提供多样式的用户存储方式 3 使用者无需关注验证封装业务 只需要提供查询方法即可 4 多样式的认证方式 5 提供用户信息获取 ...

  6. Ai带你玩股票项目(V1.0)内测说明

    Ai带你玩股票V1.0 前言 此项目虽然叫Ai带你玩股票,但现在1.0的项目还没有把Ai加进去,不过你可以自己玩一玩股票,我们给你提供了一个陪玩----"随机决策的电脑",你可以看 ...

  7. 如何玩赚Web3.0?去中心化抖音TiTi带你轻松赚取加密奖励!

    Web3.0机遇 Web3.0的崛起正为我们带来前所未有的机遇和创新.在这个数字化时代,人们渴望参与并从新兴技术中获益.而去中心化应用(DApps)则成为了实现这一愿望的利器之一. 其中,一款备受瞩目 ...

  8. 百度贴吧怎么进不去_百度霸屏怎么做?狼叔百度贴吧霸屏推广引流课程3.0,带你玩转百度贴吧霸屏...

    这次给我们可以带来的是百度贴吧霸屏引流项目实战课3.0技术,带你玩转网络流量进行热门聚集地 柱栅排水的运行情况仍然很好.对于小白和新手来说,操作起来非常困难.他们自己的贴吧也能做到.而现在一部Andr ...

  9. Opencv4.0运行yolov3

    代码我直接用的sample中的代码,用cmake编译一下即可 OpenCV4.0的源码下载后,自带的sample文件:opencv-4.0.0/samples/dnn/object_detection ...

最新文章

  1. 超越ImageNet?李飞飞力赞高徒的视频描述研究入选计算机视觉最前沿的十大论文
  2. TransG : A Generative Model for Knowledge Graph Embedding ACL 2016.Berlin, Germany.
  3. vcm驱动芯片原理_T6322A|电源芯片的内部设计是怎样的?
  4. 笑笑:农民与大款谈差距
  5. 深入浅出,对于代理模式的理解(代理模式与外观模式的区别)
  6. 8.1-CPU结构(学习笔记)
  7. oracle 01304,关于ORA-01034和ORA-27101的解决方法
  8. STM32H743+CubeMX-使用ADC(16bit分辨率)模数转换器读取CPU的温度(串行方式)
  9. 方格取数(信息学奥赛一本通-T1277)
  10. 对软件测试“核心价值”的思考
  11. android 广告close,小程序广告弹出与关闭
  12. linux vsftpd 550 create directory operation failed解决方法
  13. AU更新 AUTOIT
  14. python 车牌识别训练模型_使用Python基于HyperLPR/Mask-RCNN的中文车牌识别
  15. 安装Kylin Linux Advanced Server V10操作系统
  16. 偶然 --徐志摩
  17. excel手机版_这些Excel恢复神器,据说个个都很强,你用过吗?网友:很实用
  18. 在国企的 Java 程序员是一种什么样的体验?让我来告诉你吧!
  19. Oracle 21版Database In-Memory LivaLabs实验(上)
  20. Python爬虫实战——反爬机制的解决策略【阿里】

热门文章

  1. 利用PHPExcel将数据导出到xls格式的excel文件
  2. 计算机开机最快设置,怎样让电脑开机更快
  3. 使用WPS解决英文不占满一行
  4. webstorm 安装激活破解方法
  5. python自动求梯度
  6. ieee 802.3学习笔记-MII
  7. 关于母亲节的c语言程序设计教程课后答案,《我的母亲》习题及参考答案
  8. NR PRACH(四)PRACH与SSB的映射
  9. 【雷达与对抗】【2017.06】空中目标的无源雷达探测
  10. #1024程序员节#活动勋章获取方式