scikit-image の概要
scikit-image は Pythonで開発されておりPythonから用いる,無償でオープソースの,画像処理用ライブラリである.
- Webサイト:sciki-image.org
scikit-imageでは,Numpy配列形式で 画像が操作でき,numpy や scipy や matplotlib等の主要Python科学計算ライブラリ群と,同時に使用できるように設計されている .「画像処理ライブラリ」であるとは書いたが,デジタル画像処理の基本的な処理以外にも,古典的な「画像特徴量」や「画像セグメンテーション」手法もscikiti-imageには収録されているのが,特徴の1つである.
scikit-image の主要機能
scikit-imageには,主に以下のような機能が収録されている.(公式サイトのGeneral examples の結果画像ギャラリーを参照すると,これらのモジュールごとに整理されていてわかりやすい)
- デジタル画像処理全般 (カラー処理,フィルタリング,エッジ・コーナー検出,テンプレートマッチング,位置合わせなど)
- 特徴検出
- セグメンテーション
scikit-imageの登場当時は,当時研究でよく使用されていた「SLIC superpixel」がPythonから使える唯一のライブラリであったので,その部分だけ重宝されていたりもした.また,その他もセグメンテーション系処理が多めに搭載されているのもscikit-imageの特徴で,外観検査的な処理や医用・細胞画像処理など向けの処理を重視した Contributorが多かったことも感じられる特徴である.
Pythonでの OpenCVと,scikit-image の使い分け.
scikit-image で実施できる処理の多くは,OpenCV にも実装されており,つまりはどちらのライブラリで行ってもよい処理が多い.一方,膨大にコンピュータビジョン・画像処理全般の処理が用意してあるOpenCVと比べると,scikit-image で提供されている機能は限定的なので,Python だと OpenCV にしか提供されていない機能をすぐにライブラリから使いたい場合は, OpenCVのPythonバインディングを用いることになる.
scikit-image の画像データは,scipyやmatplotlibと親和性のあるnumpy配列形式である.カラーチャンネル並び替えや,ロード後のデータ値の調整などをせずに,そのままscipyの画像処理関数で処理したり,matplolibにplotしたりできる.しかし,scikit-imageは基本numpy/scipyで画像処理が実装されているので,(matplotlib等との親和性はよくとも) 処理は遅いが,OpenCV pythonだと元がC++ネイティブの高速処理なので,scikit-imageよりもかなり高速に処理可能である.
従って,基本的な画像処理を行う場合は,計算速度を重視する場合だと以下のように使い分けすれば良いでしょう.
- 画像はロードするだけで,前処理もほとんど行わずのその処理速度も遅くても良い:scikit-imageを用いる
- 凝った前処理を何度も行うので(resizeや部分領域クロップや,アフィン変換など),高速に処理した:OpenCV Pythonバインディングを用いる
例えばディープラーニングの学習の前処理やデータ拡張で,凝った処理をするのならOpenCV-Pythonバインディングで行う方が,scikit-imageよりも高速に実行できます.