OpenCV入門【3.0対応】(9)

OpenCV入門【3.0対応】(9)

初めてのOpenCV開発 ― opencv_contrib紹介【OpenCV 3.1.0】

2017年9月12日

拡張モジュール群であるopencv_contribについて紹介する。

@dandelion1124(http://atinfinity.github.io/
  • このエントリーをはてなブックマークに追加

1. はじめに

 これまではOpenCVのメインモジュールについて紹介してきました。今回は、OpenCVの拡張モジュール群であるopencv_contribについて紹介します。

2. opencv_contribとは

 opencv_contribとは、contributorによって寄贈された拡張モジュール群です。また、opencv_contribリポジトリでは、opencv_contribについて、

This repository is intended for development of so-called "extra" modules, contributed functionality. New modules quite often do not have stable API, and they are not well-tested.

と紹介しており、opencv_contribでは比較的最新のアルゴリズム、試験的な機能が実装されることが多いため、それらのアルゴリズム、機能を試すのに適しています。ただし、テストが十分に行われていなかったり、APIが変更される可能性があったりするため、使用する際にはその旨に注意する必要があります。

 このopencv_contribは下記リンク先のリポジトリで管理されており、OpenCVのメインリポジトリとは別になっている点に注意が必要です。

 加えて、opencv_contribリポジトリに、

So, all the new modules should be developed separately, and published in the opencv_contrib repository at first. Later, when the module matures and gains popularity, it is moved to the central OpenCV repository, and the development team provides production quality support for this module.

と書かれてあるように、opencv_contribで成熟してポピュラーになったモジュールはOpenCVのメインリポジトリに移行されることがあります。最近の事例だと、OpenCV 3.3でdnnモジュールがメインリポジトリに移行されています。

 このopencv_contribのビルド方法については別の記事で紹介予定です。気になる方は公式ページを参照してください。

2.1 opencv_contribのモジュール一覧

 以下の表に執筆時点で最新のOpenCV 3.3に対応するopencv_contribのモジュール一覧を示します。

モジュール名 機能 URL
aruco AR(Augmented Reality)マーカー検出機能 https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/aruco
bgsegm 背景、前景セグメンテーションアルゴリズム https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/bgsegm
bioinspired Biologically inspired vision model https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/bioinspired
ccalib カメラキャリブレーション機能(魚眼カメラ、マルチカメラ) https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/ccalib
cnn_3dobj 3Dオブジェクトの分類および姿勢推定 https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/cnn_3dobj
cvv デバッグ用可視化ツール https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/cvv
datasets 既存の学習データセットの読み込み機能 https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/datasets
dpm Deformable Part Modelを用いた物体検出 https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/dpm
face 顔認識(Eigenfaces、Fisherfaces、Local Binary Patterns Histograms) https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/face
freetype freetype/harfbuzzによる文字描画機能 https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/freetype
fuzzy ファジィ理論を用いた画像処理アルゴリズム https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/fuzzy
hdf HDFフォーマットのファイル読み込み機能 https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/hdf
image_hash image hashingアルゴリズム https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/image_hash
line_descriptor 線分抽出のためのBinary descriptor https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/line_descriptor
matlab MATLABブリッジ機能 https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/matlab
optflow オプティカルフローアルゴリズム https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/optflow
phase_unwrapping 2次元の位相マップのアンラッピング https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/phase_unwrapping
plot プロット機能 https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/plot
reg 画像の自動位置合わせアルゴリズム(Image Registration) https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/reg
rgbd RGB-D処理 https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/rgbd
saliency 顕著性マップ推定 https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/saliency
sfm Structure From Motionアルゴリズム https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/sfm
stereo ステレオマッチングアルゴリズム https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/stereo
structured_light デプス推定のためのグレイコードパターン生成 https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/structured_light
surface_matching Surface Matchingアルゴリズム https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/surface_matching
text テキスト領域の検出および認識機能 https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/text
tracking オブジェクトトラッキング https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/tracking
xfeatures2d features2dモジュールのアルゴリズム拡張 https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/xfeatures2d
ximgproc imgprocモジュールのアルゴリズム拡張 https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/ximgproc
xobjdetect objdetectモジュールのアルゴリズム拡張 https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/xobjdetect
xphoto photoモジュールのアルゴリズム拡張 https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/xphoto
表1 OpenCV 3.3に対応するopencv_contribのモジュール一覧

2.2 opencv_contribのチュートリアル

 下記リンク先のページが、opencv_contribの各モジュールに関するチュートリアル(英語)です。気になる方は読んでみるとよいでしょう。

3. opencv_contribのデモ紹介

 ここではopencv_contribのモジュールについてイメージを掴んでいただくためにデモを紹介します。

3.1 arucoモジュール

 arucoモジュールはAR(Augmented Reality)の「マーカー生成」「マーカー検出」機能を提供しています。

3.1.1 ARマーカー生成

 arucoモジュールでは、ARマーカーを生成できます。図1にarucoモジュールで生成したマーカーの例を示します。

図1 arucoモジュールによるマーカー生成
図1 arucoモジュールで生成したマーカー画像
3.1.2 ARマーカー検出

 以下の動画は、arucoモジュールでARマーカーを検出して、ARマーカーのIDを認識し、そのマーカーの姿勢を推定しているデモムービーです。

[GSoC 15] Detection of ArUco board using OpenCV aruco module - YouTube

3.2 bgsegmモジュール

3.2.1 前景セグメンテーション

 背景・前景のセグメンテーションを行う機能はvideoモジュールでも提供されていますが、bgsegmモジュールは、それらの拡張アルゴリズムを提供しています。図2は、定点カメラで撮影された動画像に対して前景セグメンテーションを行った例です。水色の領域が前景と見なされた領域で、歩行者が前景と見なされていることが分かります。

図2 前景セグメンテーション

3.3 stereoモジュール

 ステレオマッチング(=左右に示した画像に対する視差によって奥行きを生み出す手法)の機能はcalib3dモジュールでも提供されていますが、stereoモジュールでは以下の拡張アルゴリズムを提供しています。

 これらの関数は、calib3dモジュールとは異なり、バイナリ特徴量を用いて、disparity map(視差マップ)を算出できます。以下に今回用いたステレオマッチングの入力となるleft image(左の画像)とright image(右の画像)を示します。

left image | right image

 図3はStereoBinarySGBMを使って生成したdisparity mapです。

図3 StereoBinarySGBMで得られたdisparity map

図3 StereoBinarySGBMで得られたdisparity map

3.4 ximgprocモジュール

3.4.1 disparity mapのフィルタリング

 ximgprocモジュールは、disparity map(視差マップ)のフィルタリング機能(cv::ximgproc::DisparityWLSFilter)を提供しています。

 図4はStereoSGBMを使って生成したdisparity map(フィルタリング前)です。この図で黒い部分が誤マッチングにより視差が計算できなかった領域となります。

図4 disparity map(フィルタリング前)
図4 disparity map(フィルタリング前)

 図5はximgprocモジュールのcv::ximgproc::DisparityWLSFilterを用いてフィルタリングを行った後のdisparity mapです。このフィルタリング処理によって、図4では視差が計算できていなかった領域の視差が補間できていることが分かります。

図5 disparity map(フィルタリング後)
図5 disparity map(フィルタリング後)
3.4.2 細線化

 ximgprocモジュールは、細線化(=2値画像を線幅1ピクセルとなるスケルトン画像に変換する処理)の機能(cv::ximgproc::thinning)を提供しています。

 図6は細線化の入力画像です。

図6 入力画像

 図7は細線化の出力画像です。この結果からも分かるように線幅1ピクセルとなるスケルトン画像が得られていることが分かります。

図7 出力画像

4. おわりに

 今回は、OpenCVの拡張モジュール群であるopencv_contribについて概要を紹介しました。次回以降では、opencv_contribのデモ紹介を引き続き行い、それぞれのモジュールについて詳細な解説を行う予定です。

※以下では、本稿の前後を合わせて5回分(第5回~第9回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

5. 初めてのOpenCV開発 ― coreモジュール【OpenCV 3.1.0】

OpenCVのcoreモジュールの概要を解説。そのMatクラスを使って画像データを扱う方法や、ユーティリティ関数、OpenCV 3.0より導入されたUMatクラスを紹介する。

6. 初めてのOpenCV開発 ― highgui/imgcodecs/videoioモジュール【OpenCV 3.1.0】

OpenCVのhighgui、imgcodecs、videoioという3つのモジュールの概要を解説。GUI機能、画像ファイル/動画ファイルの入出力機能、カメラキャプチャ機能などのAPIと、その基本的な使い方を説明する。

7. 初めてのOpenCV開発 ― デバッグ機能およびデバッグ支援プラグイン【OpenCV 3.1.0】

OpenCVを用いたアプリケーションの開発で役立つにデバッグ機能やデバッグ支援プラグインを紹介する。また、問題が生じた場合の対処法について説明する。

8. 初めてのOpenCV開発 ― CMakeを使ったOpenCVのカスタマイズ【OpenCV 3.1.0】

CMakeを使ったOpenCVのカスタマイズ方法として、CMakeの導入方法やCMakeの各種オプションについて紹介する。

9. 【現在、表示中】≫ 初めてのOpenCV開発 ― opencv_contrib紹介【OpenCV 3.1.0】

拡張モジュール群であるopencv_contribについて紹介する。

サイトからのお知らせ

Twitterでつぶやこう!


Build Insider賛同企業・団体

Build Insiderは、以下の企業・団体の支援を受けて活動しています(募集概要)。

ゴールドレベル

  • 日本マイクロソフト株式会社
  • グレープシティ株式会社