OpenCV2.3.1からOpenCV2.4betaの変更点(ChangeLog)

23 4月 2012 Under: opencv2.x-tips

オリジナルは http://code.opencv.org/projects/opencv/wiki/ChangeLog#24-beta

2012年4月

いつものように,リポジトリ上に 2.4 ブランチ (http://code.opencv.org/svn/opencv/branches/2.4) を作り,ここに,より安定したコードを置く予定です.2.4 のリリース前も後も,このブランチを定期的にチェックしてみると良いでしょう.

一般的な変更

  • OpenCV は,12年目にして自分のホームを手に入れました! http://code.opencv.org は,OpenCV 開発者にとっての一次サイトとなり, http://opencv.org (もうすぐオープンします) は,OpenCV ユーザ向けのオフィシャルサイトになる予定です.
  • imgproc, video, calib3d, features2d, objdetect モジュールのいくつかの古い機能は, legacy に移動しました.
  • CMake スクリプトは大幅に修正されました.現在は,新しいモジュールを非常に簡単に追加できるようになっています  - include, src, doc, そして test サブディレクトリの入ったディレクトリを,モジュールディレクトリに置いて,非常に単純な CMakeLists.txt を作成したら,自分のモジュールを OpenCV の一部としてビルドするだけです.また,特定のモジュールをビルドしないようにすることも簡単 (CMake 変数 “BUILD_opencv_<modulename>” によって制御可能) です.

新機能

  • 新しい基本クラス cv::Algorithm が導入されました.これは,OpenCVの全ての「簡単ではない」機能のベースになる予定です.このアルゴリズムベースのクラスは,次のような特徴を持ちます:
    • 「仮想コンストラクタ」,つまり,アルゴリズムインスタンスを名前から作成することができます.
    • 利用可能なアルゴリズムのリストを持ちます.
    • アルゴリズムパラメータの名前を使って,get/set ができます.
    • アルゴリズムパラメータを XML/YAML ファイルに保存し,それらを読み込むことができます.
  • ffmpeg ラッパーが新しくなり,マルチスレッドデコーディングや,よりロバストなビデオ位置特定などの機能が追加されています.これは,バージョン 0.7.x 以降の ffmpeg で利用できます.
  • features2d API が一掃され,機能が被った大量のクラスは無くなりました.基底クラス FeatureDetector および DescriptorExtractor は, cv::Algorithm からの派生クラスです.基底クラス Feature2D を利用すると,1回の呼び出しで,キーポイントの検出やディスクリプタの計算を行うことができ,より効率的になりました.
  • SIFT および SURF は,ユーザアプリケーションでこれらのアルゴリズムを利用することによって法的問題が起こる可能性のある事を明示するために, nonfree という名前の別のモジュールに分離されました.また,SIFT の性能が大幅に(3-4 倍)改善されています.
  • Patrick Mihelich により,現在の最新のテクスチャレス検出アルゴリズム(by S. Hinterstoisser)である Line-Mod が追加されました. objdetect/objdetect.hpp, class Detector を参照してください.
  • Philipp Wagner により,3つの顔認識アルゴリズムが追加されました. opencv/contrib/contrib.hpp, FaceRecognizer class, および opencv/samples/cpp/facerec_demo.cpp をチェックしてみてください.
  • PnP 問題を解く2つのアルゴリズムが追加されました. solvePnP および solvePnPRansac 関数のフラグパラメータをチェックしてみてください.
  • Fabio Solari と Manuela Chessa により, (Blind-Spot モデルを利用する) Enhanced LogPolar の実装が追加されました. opencv/contrib/contrib.hpp, LogPolar_* classes および opencv/samples/cpp/logpolar_bsm.cpp サンプルを参照してください.
  • 急増する「computational photography」分野をサポートするために,スタブモジュール photo が作成されました.現在は,imgproc から移動された inpainting アルゴリズムがあるのみですが,より多くの機能を追加する予定です.
  • ビデオ安定化における特定の重要なタスクを解決する,videostab (ベータ版) が追加されました.このモジュールは,未だ開発段階です. opencv/samples/cpp/videostab.cpp サンプルを参照してください.
  • findContours は,(白黒の 8-bit 画像だけではなく) 32-bit 整数画像の輪郭を検出できるようになりました.これは,連結成分分析をより便利にするための取組の第一歩です.
  • Canny エッジ検出器が,カラー画像に対しても実行できるようになりました.より良いエッジマップが得られます.
  • python スレッド内部で Python バインディングが利用されるようになったので,Python によるマルチスレッドのコンピュータビジョンアプリケーションが書けるようになりました.

OpenCV on GPU

  • 今までとは別のオプティカルフローアルゴリズムが追加されました:
    • Brox (NVidia の提供による)
    • PyrLK – 密および疎の両方のバリエーション
    • Farneback
  • 新しい特徴検出器,ディスクリプタ:
    • GoodFeaturesToTrack
    • SURF を代替する著作権フリーの FAST/ORB
  • GPU モジュール全体の機能強化:
    • CUDA 4.1 以降が必要になりました.
    • CPU と GPU での結果がより近い結果になるように改善しました.
    • 多くの関数で,境界補間がサポートされるようになりました.
    • 性能が改善しました.
  • pyrUp/pyrDown が実装されました.
  • GPU による行列の積 (CUBLAS ライブラリのラッパー) が実装されました.これはオプションであり, CUBLAS サポートを有効にして OpenCV を再コンパイルする必要があります.
  • highgui モジュール用の OpenGL バックエンドが実装されました.これにより, GpuMat を CPU に転送せずに直接表示できるようになりました.

OpenCV4Android

Android リリースノートを参照してください.

性能改善

  • いくつかのOpenCV の関数,色空間の変換,モルフォロジー,データ型の変換,ブルートフォース特徴点 matcher などが TBB と SSE により最適化されました.
  • 回帰テストに加え,多くの OpenCV の関数に対して,性能テストが実施されるようになりました.大部分のモジュールに対して, opencv_perf_<modulename> という名前のテストバイナリがビルドできます.これは,そのモジュールに存在する様々な関数を実行し,XML ファイルを作成します.これらのテストを実行したいなら,通常の回帰テストの場合と同様に,(かなり大きな) http://code.opencv.org/svn/opencv/trunk/opencv_extra ディレクトリを入手し,環境変数 OPENCV_TEST_DATA_PATH を “<your_copy_of_opencv_extra>/testdata” にセットする必要があることに注意してください.

バグ修正

  • このバージョンでは,数百のバグが修正されています.修正されたバグのリストは, http://code.opencv.org/projects/opencv/versions/1 を参照してください.

既知の問題点

  • OpenCV を 静的にビルドする場合,リンカが「利用されていない」オブジェクトファイルを排除するので,(Algorithm::create を介して) 動的に作成されるクラスは失敗します,この問題を回避するには,明示的にクラスを作成します.例えば,次のようになります.
Ptr&lt;DescriptorExtractor&gt; d = new BriefDescriptorExtractor;

コメントをどうぞ