詳解 OpenCV

コンピュータビジョンライブラリを使った画像処理・認識

内容

コンピュータビジョンについての解説書。コンピュータが「目」を持ち、情報に基づいて意思決定することが可能なアプリケーションをどう開発するかについて、OpenCVの開発者であるGary Bradski氏が詳しく解説します。本書を読めば、研究者や開発者も電子ホビーストもOpenCVが提供するフレームワークの使い方を身につけてすぐに活用できます。シンプルなものから最新鋭のものまでさまざまなビジョンアプリケーションを作ることができるようになるでしょう。日本語版では巻末付録として、OpenCV高速化テクニック、Webカメラで手や物体を感知するディスプレイの作成方法について加筆しました。

関連書籍

目次

日本語版に寄せて
訳者まえがき
まえがき
1章 概要
    1.1 OpenCVとは何か?
    1.2 OpenCVを使うのはだれか?
    1.3 コンピュータビジョンとは何か?
    1.4 OpenCVの起源
        1.4.1 IPPでOpenCVを高速化する
        1.4.2 OpenCVの所有者はだれか?
    1.5 OpenCVをダウンロード、インストールする
        1.5.1 インストール
    1.6 CVSから最新のOpenCVを入手する
    1.7 その他のOpenCVドキュメント
        1.7.1 HTMLで利用できるドキュメント
        1.7.2 Wiki上のドキュメント
    1.8 OpenCVの構造と内容
    1.9 移植性
    1.10 練習問題
2章 OpenCV入門
    2.1 始めましょう
    2.2 初めてのプログラム―写真を表示する
    2.3 2つ目のプログラム―AVIビデオ
    2.4 見て回る
    2.5 簡単な変換
    2.6 少し複雑な変換
    2.7 カメラからの入力
    2.8 AVIファイルへ書き込む
    2.9 次の章へ
    2.10 練習問題
3章 OpenCVについて知る
    3.1 OpenCVの基本データ型
        3.1.1 行列と画像の型
    3.2 CvMat行列構造体
        3.2.1 行列内のデータにアクセスする
        3.2.2 点の配列
    3.3 IplImageデータ構造体
        3.3.1 画像データにアクセスする
        3.3.2 ROIとwidthStepについての補足
    3.4 行列と画像
        3.4.1 行列と画像のオペレータ
    3.5 描画する
        3.5.1 直線
        3.5.2 円と楕円
        3.5.3 ポリゴン
        3.5.4 フォントとテキスト
    3.6 データ保管
    3.7 IPP
        3.7.1 インストールを検証する
    3.8 まとめ
    3.9 練習問題
4章 HighGUI
    4.1 ポータブルなグラフィクスツールキット
    4.2 ウィンドウを作成する
    4.3 画像をロードする
    4.4 画像を表示する
        4.4.1 WaitKey(キーを待つ)
        4.4.2 マウスイベント
        4.4.3 スライダー、トラックバー、スイッチ
        4.4.4 ボタンはない
    4.5 ビデオを扱う
        4.5.1 ビデオを読み込む
        4.5.2 ビデオを書き出す
    4.6 ConvertImage(画像を変換する)
    4.7 練習問題
5章 画像処理
    5.1 概要
    5.2 平滑化
    5.3 画像のモルフォロジー
        5.3.1 膨張と収縮
        5.3.2 自分のカーネルを作成する
        5.3.3 より汎用的なモフォロジー
    5.4 フラッドフィル
    5.5 リサイズ
    5.6 画像ピラミッド
    5.7 閾値
        5.7.1 適応型閾値
    5.8 練習問題
6章 画像変換
    6.1 概要
    6.2 コンボリューション
        6.2.1 コンボリューションの境界
    6.3 勾配とSobel微分
        6.3.1 Scharrフィルタ
    6.4 Laplacian
    6.5 Canny
    6.6 Hough変換
        6.6.1 Hough線変換
        6.6.2 Hough円変換
    6.7 写像
    6.8 拡大、縮小、ワープ(歪曲)、回転
        6.8.1 アフィン変換
        6.8.2 透視変換
    6.9 CartToPolarとPolarToCart
    6.10 対数極座標(LogPolar)
    6.11 離散フーリエ変換(DFT)
        6.11.1 スペクトル乗算
        6.11.2 コンボリューションとDFT
    6.12 離散コサイン変換(DCT)
    6.13 積分画像
    6.14 距離変換
    6.15 ヒストグラムの均一化
    6.16 練習問題
7章 ヒストグラムとマッチング
    7.1 基本的なヒストグラムのデータ構造
    7.2 ヒストグラムにアクセスする
    7.3 ヒストグラムの基本操作
        7.3.1 2つのヒストグラムを比較する
        7.3.2 ヒストグラムの使用例
    7.4 もう少し複雑なもの
        7.4.1 Earth Mover's Distance(EMD)
        7.4.2 バックプロジェクション
        7.4.3 テンプレートマッチング
    7.5 練習問題
8章 輪郭
    8.1 メモリストレージ
    8.2 シーケンス
        8.2.1 シーケンスを作成する
        8.2.2 シーケンスを削除する
        8.2.3 シーケンスの要素に直接アクセスする
        8.2.4 スライス、データのコピーと移動
        8.2.5 シーケンスをスタックとして使用する
        8.2.6 要素の挿入と削除
        8.2.7 シーケンスのブロックサイズ
        8.2.8 シーケンスのリーダーとライター
        8.2.9 シーケンスと配列
    8.3 輪郭を見つける
        8.3.1 輪郭はシーケンスである
        8.3.2 Freemanチェインコード
        8.3.3 輪郭を描画する
        8.3.4 輪郭の例
    8.4 もう1つの輪郭の例
    8.5 輪郭に対してさらに何かを行う
        8.5.1 ポリゴン近似
        8.5.2 特徴を要約する
        8.5.3 ジオメトリ
    8.6 輪郭のマッチング
        8.6.1 モーメント
        8.6.2 モーメントの詳細
        8.6.3 Huモーメントを用いてマッチングを行う
        8.6.4 階層型マッチング
        8.6.5 輪郭の凸部と凹状欠損
        8.6.6 ペアワイズ幾何ヒストグラム
    8.7 練習問題
9章 画像の部分領域と分割処理
    9.1 部分領域と分割
    9.2 背景除去
        9.2.1 背景除去の弱点
        9.2.2 シーンのモデル化
        9.2.3 ピクセルの断面
        9.2.4 フレーム差分
        9.2.5 平均背景法
        9.2.6 平均、分散、共分散を累積する
        9.2.7 高度な背景手法
        9.2.8 前景除去のための連結成分
        9.2.9 背景手法を比較する
    9.3 Watershedアルゴリズム
    9.4 画像修復
    9.5 平均シフト分割
    9.6 Delaunay三角分割法、Voronoi図
        9.6.1 DelaunayまたはVoronoiの細分割を作成する
        9.6.2 Delaunayの細分割を動き回る
        9.6.3 使用例
    9.7 練習問題
10章 トラッキングとモーション
    10.1 トラッキングの基礎
    10.2 コーナー検出
    10.3 サブピクセルコーナー
    10.4 不変特徴量
    10.5 オプティカルフロー
        10.5.1 Lucas-Kanade法
        10.5.2 密なトラッキングテクニック
    10.6 平均値シフトとcamshiftトラッキング
        10.6.1 平均値シフト
        10.6.2 camshift
    10.7 モーションテンプレート
    10.8 推定器
        10.8.1 Kalmanフィルタ
        10.8.2 拡張Kalmanフィルタに関する簡単な説明
    10.9 Condensationアルゴリズム
    10.10 練習問題
11章 カメラモデルとキャリブレーション
    11.1 カメラモデル
        11.1.1 射影幾何の基本
        11.1.2 レンズ歪み
    11.2 キャリブレーション
        11.2.1 回転行列と平行移動ベクトル
        11.2.2 チェスボード
        11.2.3 ホモグラフィ
        11.2.4 カメラキャリブレーション
    11.3 歪み補正
    11.4 キャリブレーションを全部まとめる
    11.5 Rodrigues変換
    11.6 練習問題
12章 投影と3Dビジョン
    12.1 投影
    12.2 アフィン変換と透視変換
        12.2.1 鳥瞰図変換の例
    12.3 POSIT:3D姿勢推定
    12.4 ステレオ画像処理
        12.4.1 三角測量
        12.4.2 エピポーラ幾何
        12.4.3 基本行列と基礎行列
        12.4.4 エピポーラ線を計算する
        12.4.5 ステレオキャリブレーション
        12.4.6 ステレオ平行化
        12.4.7 ステレオ対応点探索
        12.4.8 ステレオキャリブレーション、平行化、対応点探索のコード
        12.4.9 3D再投影からの奥行きマップ
    12.5 動画像からの3次元復元
    12.6 2次元と3次元の線のフィッティング処理
    12.7 練習問題
13章 機械学習
    13.1 機械学習とは
        13.1.1 学習セットとテストセット
        13.1.2 教師つきデータと教師なしデータ
        13.1.3 生成的モデルと識別的モデル
        13.1.4 OpenCVのMLアルゴリズム
        13.1.5 ビジョンで機械学習を使う
        13.1.6 変数の重要度
        13.1.7 機械学習の問題を診断する
    13.2 MLライブラリの共通ルーチン
        13.2.1 学習
        13.2.2 予測
        13.2.3 学習の繰り返しを制御する
    13.3 マハラノビス距離
    13.4 K-means
        13.4.1 問題と解決策
        13.4.2 K-meansのコード
    13.5 単純Bayes分類器
        13.5.1 単純Bayesのコード
    13.6 二分決定木
        13.6.1 回帰の不純さ
        13.6.2 分類の不純さ
        13.6.3 決定木の使い方
        13.6.4 決定木の結果
    13.7 ブースティング
        13.7.1 AdaBoost
        13.7.2 ブースティングのコード
    13.8 ランダムツリー
        13.8.1 ランダムツリーのコード
        13.8.2 ランダムツリーを使う
    13.9 顔検出器/Haar分類器
        13.9.1 教師あり学習とブースティング理論
        13.9.2 Viola-Jones分類器の理論
        13.9.3 顔検出器のコード
        13.9.4 新しいオブジェクトを学習する
    13.10 他の機械学習アルゴリズム
        13.10.1 期待値最大化
        13.10.2 K近傍
        13.10.3 多層パーセプトロン
        13.10.4 サポートベクトルマシン
    13.11 練習問題
14章 OpenCVの未来
    14.1 過去と未来
    14.2 方向性
        14.2.1 具体的な項目
    14.3 アーティストのためのOpenCV
    14.4 あとがき
付録A iPhone OSへのOpenCV/FaceDetectionの移植と高速化
    A.1 iPhoneへのOpenCV移植と最適化準備
        A.1.1 iPhoneのハードウェア/ソフトウェア構成について
        A.1.2 iPhoneへの移植作業
        A.1.3 プロファイリング環境の構築
        A.1.4 ボトルネックの特定
    A.2 最適化実践
        A.2.1 コンパイルオプションの調整
        A.2.2 ハイレベルなコード変更による最適化
        A.2.3 ディープなコード変更による最適化
        A.2.4 今後の課題
    A.3 参考文献
付録B Webカメラを使って手や物体を感知するディスプレイを作ろう
    B.1 カメラとディスプレイを使って装置を構成する
    B.2 カメラとディスプレイのキャリブレーション
    B.3 レーザー水平器を使ったマルチタッチディスプレイ
        B.3.1 レーザー水平器を用いた指の接触判定
        B.3.2 ヒストグラムを使った手領域の抽出
        B.3.3 レーザー水平器を使ったマルチタッチディスプレイの
               アプリケーション例
    B.4 偏光板を応用したディスプレイシステム
        B.4.1 偏光板を使ってディスプレイ上の物体を簡単に抽出する
        B.4.2 物体の抽出と形状認識を行うプログラム
        B.4.3 偏光板を応用したディスプレイシステムのアプリケーション例
    B.5 参考文献
付録C OpenCVインストールガイド
    共通の動作環境
    追加の動作環境(Linux、BSD、その他のUNIXライクなシステム)
    SourceForge SVNリポジトリから最新のOpenCVを取得する
    CMakeを使ってソースからOpenCVをビルドする(クロスプラットフォーム)
    autotoolsを使ってOpenCVをビルドする
    (Linux、Mac OS X、その他のUNIXライクなシステム)
    OpenCVをテストする(CMake、クロスプラットフォーム)
    OpenCVをテストする(autotools)
    Python/Octaveラッパーをテストする
    OpenCVを使った自身のコードをビルドする
    ARMに関する注意
付録D 参考文献
索引

正誤表

関連ファイル