OpenCV2.1からOpenCV2.2の変更点(ChangeLog)

07 12月 2010 Under: opencv2.x-tips

オリジナルは http://opencv.willowgarage.com/wiki/OpenCV%20Change%20Logs#A2.2

(2010年 12月)

一般的な変更点および改良点

  • ライブラリが再編成されました.cxcore,cv,cvaux,highgui および ml は,より細かい複数のモジュールに分割されています:
    • opencv_core – 基本機能(基本構造体,算術および線形代数演算,離散フーリエ変換,XMLおよびYAML入出力 …).
    • opencv_imgproc – 画像処理(フィルタ,ガウシアンブラー,収縮・膨張,リサイズ,リマップ,色変換,ヒストグラム計算など).
    • opencv_highgui – GUI および, 画像とビデオの入出力.
    • opencv_ml – 統計的機械学習モデル(SVM,決定木,ブースティングなど).
    • opencv_features2d – 2次元特徴検出器およびディスクリプタ(SURF,FASTなど.また,新機能である,検出器-ディスクリプタ-matcher のフレームワークが含まれます).
    • opencv_video – モーション解析および,オブジェクトトラッキング(オプティカルフロー,モーションテンプレート,背景差分).
    • opencv_objdetect – 画像からのオブジェクト検出(Haar & LBP 顔検出器,HOG人検出器など).
    • opencv_calib3d – カメラキャリブレーション,ステレオ対応点探索,3次元データ処理の基本機能
    • opencv_flann – the Fast Library for Approximate Nearest Neighbors (FLANN 1.5) および,そのOpenCVラッパー
    • opencv_contrib – 提供されたコードのうち,未だ未成熟なもの
    • opencv_legacy – 後方互換性のために残っている,サポートされなくなったコード
    • opencv_gpu – OpenCV の機能の CUDA による高速化(比較的不安定,OpenCVで非常に活発に開発が進んでいる部分)

もし,CMakeやpkg-config ツールを利用して,OpenCVの検出やmakeスクリプトの設定を行っていた場合は,何の変更もなく以前のコードをビルドすることができる可能性が高いです.
そうでない場合,リンカパラメータを修正して(ライブラリ名を変更してください),インクルードパスを更新する必要があるでしょう.
まだ,#include <cv.h> などを使うこともできますが,以下が推奨される書き方です:

#include "opencv2/imgproc/imgproc.hpp"
..

C および C++ のサンプル (https://code.ros.org/svn/opencv/trunk/opencv/samples) は,新形式のヘッダをインクルードしてますのでチェックしてみてください.

  • 現在の新形式のラッパーは,OpenCV 2.x API のより多くの部分をカバーしています.ドキュメントやサンプルも後々追加されます.また,追加機能を使いたい場合は,numpy が必要になります.SWIG-ベースのPythonラッパーは,完全に除外されました.
  • Ethan Rublee の貢献によって,現在のOpenCV は Android 用にビルド可能で,サンプルもいくつか付属します(GSoC 2010 プロジェクト). http://opencv.willowgarage.com/wiki/Android をチェックしてください.
  • opencv_gpu 高速化モジュールは,NVidia のサポートによって作成されました.詳細は,後述します.

-

新機能,特徴

  • core:
    • 固定型,固定サイズの行列に対する cv::Matx 型が追加されました.現在の Vec は,Matx から派生します.このクラスは,cv::Mat を使うとオーバヘッドが大きすぎるような,極小さい行列に対して利用されます.Matx と Mat は相互変換が可能です.
    • cv::Mat および cv::MatND は,同じ型になりました:typedef cv::Mat cv::MatND.しかし,行列の次元をチェックしていない関数が,まだ多数あります.なので,OpenCVで 3-,4- … 次元の行列を処理する場合には注意してください.
    • Eigen 2.x/3.x が実験的にサポートされています(CMake の WITH_EIGEN2 オプション).ここでも,Eigen2 の行列と cv::Mat と相互に変換できます. modules/core/include/opencv2/core/eigen.hpp を参照してください.
    • “<<” オペレータで cv::Mat を表示することができます.opencv/samples/cpp/cout_mat.cpp を参照してください.
    • SSE2 による最適化で cv::exp および cv::log が,かなり高速化されました.
  • imgproc:
    • 色変換関数が書き直されました;
      • RGB->Lab および RGB->Luv のパフォーマンスが著しく改善されました.現在の関数は,入力に sRGB 色空間(例えば,gamma=2.2)を仮定しています.オリジナルの線形変換 RGB->L** を行いたい場合,CV_LBGR2LAB などを利用してください.
      • Bayer->RGB を行う VNG アルゴリズムが追加されています.これは単純な補間アルゴリズムと比べると遅いですが,非常に精細な画像を返します.
      • 8-bit 画像に対する,新しい種類の RGB->HSV/HLS 変換関数が追加されました.これは,H チャンネルとして,0…179 ではなく 0..255 の範囲全体を利用します.変換用のコードは CV_RGB2HSV_FULL などです.
    • 広角カメラ用に, initUndistortRectifyMap の特別なバージョンが追加されました:initWideAngleProjMap()
  • features2d:
    • キーポイント抽出,ディスクリプタ計算,それらのマッチングに関する統合的フレームワークが導入されました.以前のものに加えて,SURF や FAST,StarDetector などの新しい検出器,ディスクリプタが,このフレームワークを介して利用できるようにラップされています.新しいフレームワークの利点は(異なる検出器やディスクリプタを扱う統合的なAPIとなることに加えて),画像のマッチング,およびテクスチャ付きオブジェクトの検出における高度なツールをも提供する点にあります.ドキュメント http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_feature_detectors.html ,および C++ のサンプルを見てください:
      • descriptor_extractor_matcher.cpp – キーポイントとそのディスクリプタを利用して,シーンからオブジェクトを検出します.
      • generic_descriptor_matcher.cpp – 上記サンプルのバリエーション.ディスクリプタを明示的に計算する必要の無いバージョンです.
      • bagofwords_classification.cpp – フレームワークを拡張するサンプル.それを利用して,VOCデータベースのデータを処理します: http://pascallin.ecs.soton.ac.uk/challenges/VOC/
    • Michael Calonder の最新の超高速キーポイントディスクリプタ BRIEF が,Ethan Rublee によって統合されました.サンプルを参照してください opencv/samples/cpp/video_homography.cpp
    • SURF キーポイント検出器が,TBBによって並列化されました(imahon と yvo2m のパッチ)
  • objdetect:
    • Nizhniy Novgorod State University (NNSU) のチームによる,P. Felzenszwalb のアルゴリズムを実装した LatentSVM オブジェクト検出器. opencv/samples/c/latentsvmdetect.cpp を参照してください.
  • calib3d:
    • 新しい半径方向歪みモデル:

x' = x*(1 + k1*r2 + k2*r4 + k3*r6)/(1 + k4*r2 + k5*r4 + k6*r6) + <xの接線方向歪み>,
y' = y*(1 + k1*r2 + k2*r4 + k3*r6)/(1 + k4*r2 + k5*r4 + k6*r6) + <yの接線方向歪み>

が導入されました.広角レンズのカメラをキャリブレーションする場合に役立ちます.最適化するパラメータが増えたので,それらすべてをロバストに推定するには,より多くのデータを与える必要があります.あるいは,単純に歪みベクトルを0で初期化してから,CV_CALIB_RATIONAL_MODEL + CV_CALIB_FIX_K3 + CV_CALIB_FIX_K4 + CV_CALIB_FIX_K5 や,特定の係数を有効/無効にするその他の組み合わせフラグを渡す方法もあります.

    • 一列に並んだ3眼カメラの平行化関数が追加されました.samples/cpp/3calibration.cpp を参照してください.
  • ml:
    • NNSU チームによる Gradient boosting trees モデル.
  • highgui:
    • GSoC 2010 プロジェクトの成果として(完成させたのは Yannick Verdie),OpenCVにQtバックエンドが追加されました.このバックエンドには,その他のバックエンドには存在しない追加機能があります.TTFフォントを利用したテキストレンダリング,分離型の「コントロールパネル」,プッシュボタン,チェックボックスとラジオボタン,highgui ウィンドウに表示された画像のインタラクティブな拡大・移動機能,「名前をつけて保存」などです.Yannic が新機能をデモするYoutube ビデオをチェックしてみてください:http://www.youtube.com/user/MrFrenchCookie#p/u
      新しいAPIの説明はここにあります: http://opencv.willowgarage.com/documentation/cpp/highgui_qt_new_functions.html .新しいAPIを使えるようにするには,Qt SDK(または,libqt4 の開発パッケージ)をマシンにインストールして,OpenCVでQtをサポートするように(CMake に -DWITH_QT=ON を渡して,GUIバックエンドとしてQtが使われるようになったことを確認してください)ビルドする必要があります.
    • 16-bit および LZW-圧縮された TIFF がサポートされるようになりました.
    • LinuxでIEEE1394カメラのモードを設定することができるようになりました.
  • contrib:
    • Marius Muja, Antonella Cascitelli, Marco Di Stefano および Stefano Fabri による Chamferマッチングアルゴリズム.samples/cpp/chamfer.cpp を参照してください.
  • gpu:
    • NVidia のサポートによって作成された,OpenCVの完全な新機能です.このパッケージはアルファ,または初期ベータ段階のものなので,注意して利用するとともに,OpenCV SVN をチェック更新を確認するようにしてください.
      利用するためは,最新の NVidia CUDA SDK をインストールして,OpenCVでCUDAをサポートするように(CMake の -DWITH_CUDA=ON フラグ)ビルドする必要があります.すべての機能は,cv::gpu 名前空間にあります.
      関数およびクラスの完全な一覧は, opencv/modules/gpu/include/opencv2/gpu/gpu.hpp を参照してください.ここでは,APIの主要なコンポーネントを挙げます: 

      • 画像計算,フィルタリング処理,モルフォロジー,幾何学変換,ヒストグラム,
      • 3眼ステレオ対応点探索アルゴリズム:ブロックマッチング,Belief Propagation,定数空間におけるBelief Propagation.
      • HOG-ベースのオブジェクト検出器.CPUバージョンと比べると桁違いに高速です! opencv/samples/cpp/ を参照してください.
  • Pythonバインディング:
    • 現在のPythonバインディングは,OpenCV 2.x の機能のより多くをカバーするにようになりました.この新しいラッパーでは,numpy をインストールする必要があります(詳しくは http://opencv.willowgarage.com/wiki/InstallGuide を参照してください).
      C++ API と同様に,新しい Python バインディングでは,出力配列を確保する必要はありません.関数によって自動的に作成されます.例を示します:
import cv

a=cv.imread("lena.jpg",0)
b=cv.canny(a, 50, 100, apertureSize=3)
cv.imshow("test",b)
cv.waitKey(0)

このサンプルでは,a と b が通常の numpy の配列になっており,OpenCVの機能と一緒に numpy と scipy のパワーを余すことなく利用できます.

-

ドキュメント,サンプル

  • 各関数の説明に wiki ページへのリンクが追加されました.http://opencv.willowgarage.com を参照してください.
  • すべてのサンプルに説明文が記載されています.また,新しいOpenCV API を利用するため,大部分のサンプルが C++ に変更されました.

-

バグフィックス

  • 300以上の問題が解決されています.この問題の大半は(closed または,まだ open な状態ものも含め), https://code.ros.org/trac/opencv/report/6 で見ることができます.
  • 現在,更新のために,古いバグトラッカー https://sourceforge.net/projects/opencvlibrary/ は閉じられています.現在も関係するバグレポートは,できるだけ早く code.ros.org に移動され,古いバグトラッカーは完全に削除される予定です.これからは新しいトラッカーを利用してください.

-

既知の問題/制限

  • 現在のWindows用のインストールパッケージは32-bitのみで,TBBサポートを含みません.並列化した,あるいは64-bitバージョンのOpenCVは,ソースコードからビルドすることができます.
  • その他のバグは, http://code.ros.org/trac/opencv/report/1 に一覧があります.

コメントをどうぞ