INDEMIND帶你玩轉OpenCV4.0(一):DIS光流算法解析

在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地址如下:
    如圖所示,選擇Sources

  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,完全滿足實時的需求。

運行時間及效果對比圖如下:

圖片摘自《Fast Optical Flow Using Dense InverseSearch》
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章