いまからはじめる、MATLABによる
画像処理・コンピュータビジョン (導入編)
MathWorks Japan アプリケーションエンジニアリング部 シニアアプリケーションエンジニア 大谷 卓也画像処理とは?
例えば、デジタルカメラの内部処理 様々な画像処理がハードウェア・ソフトウェアで行われる 様々なアルゴリズムを使用し、画像の変形や変換、色の補正、
ノイズ除去などを行うこと
統計解析などを併用し、画像からデータの数値化を行うこと
データ解析 モデリング アルゴリズム 開発 アプリケーション 開発 処理方法 アルゴリズムの探求
MATLABを使用した、画像処理ワークフロー
ファイル ソフトウェア ハードウェア C/C++/Javaなど データへのアクセス ドキュメント 生成 組み込み開発 アプリケーションとして 配布 結果の共有/IP化MATLABを使用した、データ解析ワークフロー
~画像データへのアクセス~
静止画・動画の取り込み
• 主要画像フォーマットへの対応
• 各種カメラデバイスへの対応
• RAWなど、特殊フォーマットへの対応
ファイル ソフトウェア ハードウェア C/C++/Javaなど データへのアクセスサポートされている静止画フォーマット (R2013b)
imread() によりサポートされている静止画フォーマットBMP — Windows ビットマップ CUR — Cursor ファイル
GIF — Graphics Interchange Format HDF4 — Hierarchical Data Format ICO — Icon ファイル
JPEG — Joint Photographic Experts Group
JPEG 2000 — Joint Photographic Experts Group 2000 PBM — Portable Bitmap PCX — Windows Paintbrush PGM — Portable Graymap PNG — ポータブル ネットワーク グラフ PPM — Portable Pixmap RAS — Sun ラスター
TIFF — Tagged Image File Format XWD — X Window Dump
サポートされている動画フォーマット (R2013b)
VideoReader によりサポートされている動画フォーマット Windows AVI – AVIファイル MJ2 - Motion JPEG 2000 MPG - MPEG-1WMV, ASF, ASX - Windows Media® ビデオ
Microsoft® DirectShow® がサポートするすべての形式 Windows7
MP4, M4V - H.264 エンコード ビデオ(Windows 7 のみ) MOV - Apple QuickTime Movie
Microsoft Media Foundation がサポートするすべての形式。 Apple
MOV - QuickTime Movie および QuickTime がサポートするすべての形式 Linux®
各種カメラデバイスからのデータ取り込み
Image Acquisition Toolbox
業界標準のHWからの動画像取込み機能を提供
– フレームグラバ Analog
Camera Link
– DCAM 互換 FireWire (IIDC 1394)
– GigE Vision – 一般的なUSB Webカメラ
Microsoft Kinect
RGB画像+ スケルトン 認識した人(6人まで) 深度画像カメラキャリブレーション
レンズの歪(ひずみ)補正
カメラキャリブレータ
既存ライブラリやIPの活用
~ C/C++ コードのインポート~
MEX 呼び出し #include "mex.h" void mexFunction( int nlhs, //出力パラメータ数 mxArray *plhs[], //出力パラメータ int nrhs, //入力パラメータ数 const mxArray *prhs[]){ //入力パラメータ ... myFunc(...); }int myFunc(int a) { ...
ゲートウェイルーチン付きのCコード
MATLAB環境のメリット
~データへのアクセス~
動画、静止画フォーマットへアクセス
– 多彩な静止画・動画フォーマットへ標準対応 (オプションツール不要) – MEXを使用することで、レガシーコードや、特殊なフォーマットへも 対応可能 ハードウェアからのデータ入力
– 業界標準ハードウェア対応– Microsoft Kinectからの容易なRGB, IR, Depthデータの取得
データ解析 モデリング アルゴリズム 開発 アプリケーション 開発 処理方法 アルゴリズムの探求
MATLABを使用した、画像処理ワークフロー
ファイル ソフトウェア ハードウェア C/C++/Javaなど データへのアクセス ドキュメント 生成 組み込み開発 アプリケーションとして 配布 結果の共有/IP化MATLABを使用した、データ解析ワークフロー
~処理方法 アルゴリズムの探求~
迅速な画像処理アルゴリズムの開発
• インタープリタ言語による、
インタラクティブな開発・デバッグ環境
• ドキュメント、ユーザコミュニティの活用
• GUI付きアプリケーションの作成
データ解析 モデリング アルゴリズム 開発 アプリケーション 開発 処理方法 アルゴリズムの探求画像処理アルゴリズム開発の基礎
~豊富なアルゴリズム・ライブラリ群~
セグメンテーション 機械学習による 物体認識 特徴点マッチング レジストレーション 物体の定量評価画像処理・コンピュータビジョン関連ツール
Image Processing Toolbox
コントラスト調整 幾何学変換 各種フィルタ モルフォロジー処理 セグメンテーション 物体の定量評価
Computer Vision System Toolbox 高速な動画 I/O
特徴点ベースのマッチング トラッキング
ステレオビジョン
Image Acquisition Toolbox 業界標準HWからの画像取り込み
Analog, Camera Link, DCAM, GigE Vision, USB camera, etc Microsoft Kinect Support
Statistics Toolbox クラスタリング 主成分分析 K-means 混合ガウス分布 クラシフィケーション
インタープリタ言語による、インタラクティブな
開発・デバッグ環境
コードをセクション分けし、コンパイル 等不要で、部分的に即実行
アルゴリズムのパラメータ探索
~特徴点ベースのマッチング例~
特徴点検出
特徴量の
抽出
Corner SURF MSER SURF MSER Block FREAK SSD 各処理ステージで使用 するアルゴリズムや、 パラメータが複数存在ドキュメント、リファレンス
たくさんの実用的なサンプル プログラムが付属 アルゴリズム の実装詳細 論文などの詳細な文献の利用
File Exchangeには、画像 処理・コンピュータービジョ ン系のアルゴリズム、サン プル等が2千件以上登録 共有されているほとんど のファイルは、BSDライ センス R2012bより、Apps機能MATLAB Central
File Exchangeからの便利ツール例
thresh_tool (2値化) exploreRGB (色空間の探索) FindCirclesGUI (円の検出) SegmentTool (セグメンテーション)Cascade Training GUI (物体認識の機械学習ツール) ImadjustGUI
(コントラスト調整)
ユーザーインターフェース構築機能
ユーザーインターフェース
設計環境 (GUIDE)
21
MATLAB環境のメリット
~アルゴリズム開発~
シンプルな構文による、アイデアの実現 – C/C++等に比べ少ない記述量 (行列単位での処理により、ループ等の記述は最小限) – 変数の取扱いが簡単(多くの場合定義も不要、サイズの自動変更) インタプリタ言語による、迅速な開発・デバッグ – コンパイル等の作業が不要 – 対話的な処理方法探索 – プログラム途中でのデバッグが容易 豊富なアルゴリズム・ツール類 – 最小限の設定ですぐに使える画像処理アルゴリズム・関数 – 豊富な例、アルゴリズムの説明、参考文献データ解析 モデリング アルゴリズム 開発 アプリケーション 開発 処理方法 アルゴリズムの探求
MATLABを使用した、画像処理ワークフロー
ファイル ソフトウェア ハードウェア C/C++/Javaなど データへのアクセス ドキュメント 生成 組み込み開発 アプリケーションとして 配布 結果の共有/IP化MATLABを使用した、データ解析ワークフロー
~レポート、プログラムの共有・IP化~
開発したアルゴリズムのレポート、共有、IP化
• 処理結果のレポート、ドキュメント化
• アプリケーション配布
• C/C++ アプリケーションに向けたIP化
• 処理の高速化
ドキュメント 生成 組み込み開発 アプリケーションとして 配布 結果の共有/IP化レポートの生成、結果の共有
MATLABCompiler .exe .dll
アプリケーション配布と、他言語との連携
MATLABCoder .exe .lib .dll MATLAB Builder EX JA NE Java Excel .NET並列/分散処理・GPGPUによる高速・大規模データ処理
Parallel Computing Toolbox
• 並列・分散処理による高速化
• 12コアまでのマルチコア、マルチCPU処理が可能
• MATLAB 関数のGPUによる実行
• 2次元FFT等 150以上のMATLAB基本関数
• Image Processing ToolboxのGPUサポート関数
imrotate(), imfilter(), imdilate(), imerode(), imopen(), imclose(), imtophat(), imbothat(), imshow(), padarray() ...
GPGPU処理
CPU GPU メモリー メモリー gpuArray() gather() I = imrotate(I, 75, 'bicubic'); % 画像を75°回転 I = gpuArray(I); I = imrotate(I, 75, 'bicubic'); % 画像を75°回転 各種関数を、GPU上で実行MATLAB環境のメリット
~処理結果の共有~
簡単なドキュメント作成
– ワンクリックで、PDF, Wordなどの文書に処理結果を書き出し
作成したプログラムの共有
– MATLAB Compiler 使用により、GUIを含めて
.dllや、.exeの形へ変換
– MATLAB Coder使用により、アルゴリズム/IP部分を
.c / .cppへ変換、組み込み開発へ適用
まとめ
MATLABは単なるプログラミングツールでは無く、「
環境
」
多彩なデータ入力手段
インタープリタならではの迅速なアルゴリズム開発
簡単・柔軟な高速化手段
アプリケーション開発、共有、組み込み開発まで視野に入
れたコード開発
MATLABの画像処理、コンピュータビジョン開発 「環境」デモブースのご案内
信号処理アルゴリズム設計 ~システム設計~実装
デモブースの紹介
~
画像処理・コンピュータビジョンの実装フロー紹介~
© 2013 The MathWorks, Inc. MATLAB and Simulink are registered trademarks of The MathWorks, Inc.
ARMターゲット実装
FPGA (Xilinx Zynq) ターゲット実装