第9回 初めてのOpenCV開発 ― opencv_contrib紹介【OpenCV 3.1.0】:OpenCV入門【3.0対応】
拡張モジュール群であるopencv_contribについて紹介する。
ご注意:本記事は、@IT/Deep Insider編集部(デジタルアドバンテージ社)が「www.buildinsider.net」というサイトから、内容を改変することなく、そのまま「@IT」へと転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。
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のモジュール一覧を示します。
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モジュールで生成したマーカーの例を示します。
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は、定点カメラで撮影された動画像に対して前景セグメンテーションを行った例です。水色の領域が前景と見なされた領域で、歩行者が前景と見なされていることが分かります。
3.3 stereoモジュール
ステレオマッチング(=左右に示した画像に対する視差によって奥行きを生み出す手法)の機能はcalib3dモジュールでも提供されていますが、stereoモジュールでは以下の拡張アルゴリズムを提供しています。
これらの関数は、calib3dモジュールとは異なり、バイナリ特徴量を用いて、disparity map(視差マップ)を算出できます。以下に今回用いたステレオマッチングの入力となるleft image(左の画像)とright image(右の画像)を示します。
図3はStereoBinarySGBMを使って生成したdisparity mapです。
3.4 ximgprocモジュール
3.4.1 disparity mapのフィルタリング
ximgprocモジュールは、disparity map(視差マップ)のフィルタリング機能(cv::ximgproc::DisparityWLSFilter)を提供しています。
図4はStereoSGBMを使って生成したdisparity map(フィルタリング前)です。この図で黒い部分が誤マッチングにより視差が計算できなかった領域となります。
図5はximgprocモジュールのcv::ximgproc::DisparityWLSFilterを用いてフィルタリングを行った後のdisparity mapです。このフィルタリング処理によって、図4では視差が計算できていなかった領域の視差が補間できていることが分かります。
3.4.2 細線化
ximgprocモジュールは、細線化(=2値画像を線幅1ピクセルとなるスケルトン画像に変換する処理)の機能(cv::ximgproc::thinning)を提供しています。
図6は細線化の入力画像です。
図7は細線化の出力画像です。この結果からも分かるように線幅1ピクセルとなるスケルトン画像が得られていることが分かります。
4. おわりに
今回は、OpenCVの拡張モジュール群であるopencv_contribについて概要を紹介しました。
Copyright© Digital Advantage Corp. All Rights Reserved.