Book description
OpenCVの開発者によるベストセラー書の改訂版。最新のC++インタフェースに対応。OpenCVは現在、ロボットの視覚システムだけでなくスマホやパソコンの顔認証、画像アプリやセキュリティ監視の人物検出、製造、医療、自動運転車、ゲームやARアプリ、さらには機械学習に代表される人工知能の研究など、さまざまな分野で利用されています。本書では、カメラ入力やファイル出力といった簡単な使い方から、画像の変換やセグメンテーション、テンプレートマッチング、パターン認識、特徴量、物体や動きのトラッキング、ステレオビジョンからの3Dの再構成、機械学習まで、基礎から丁寧かつ詳細に解説します。関数のリファレンスとしても利用可能です。
Table of contents
- 大扉
- 原書大扉
- クレジット
- 訳者まえがき
- まえがき
- 1章 概要
- 1.1 OpenCVとは何か?
- 1.2 OpenCVを使うのはだれか?
- 1.3 コンピュータビジョンとは何か?
- 1.4 OpenCVの起源
- 1.4.1 OpenCVのブロック図
- 1.4.2 IPPでOpenCVを高速化する
- 1.4.3 OpenCVの所有者はだれか?
- 1.5 OpenCVをダウンロード、インストールする
- 1.5.1 インストール
- 1.6 Gitから最新のOpenCVを入手する
- 1.7 その他のOpenCVドキュメント
- 1.7.1 同梱のドキュメント
- 1.7.2 オンラインドキュメントとWiki
- 1.8 OpenCVの寄贈リポジトリ
- 1.8.1 寄贈コードのモジュールをダウンロードしビルドする
- 1.9 移植性
- 1.10 まとめ
- 1.11 練習問題
- 2章 OpenCV入門
- 2.1 インクルードファイル
- 2.1.1 リソース
- 2.2 初めてのプログラム——写真を表示する
- 2.3 2つ目のプログラム——動画
- 2.4 動き回る
- 2.5 簡単な変換
- 2.6 少し複雑な変換
- 2.7 カメラからの入力
- 2.8 AVIファイルへ書き込む
- 2.9 まとめ
- 2.10 練習問題
- 3章 OpenCVのデータ型
- 3.1 基本
- 3.2 OpenCVのデータ型
- 3.2.1 基本の型の概要
- 3.2.2 基本の型:深く掘り下げる
- 3.2.3 ヘルパーオブジェクト
- 3.2.4 ユーティリティ関数
- 3.2.5 テンプレート構造
- 3.3 まとめ
- 3.4 練習問題
- 4章 画像と大型配列型
- 4.1 動的可変長ストレージ
- 4.1.1 cv::Matクラス:N次元の密な配列
- 4.1.2 配列の生成
- 4.1.3 個々の配列要素へのアクセス
- 4.1.4 N変数配列イテレータ:cv::NAryMatIterator
- 4.1.5 ブロック単位での配列要素へのアクセス
- 4.1.6 行列の演算式:代数とcv::Mat
- 4.1.7 飽和型変換
- 4.1.8 その他、配列でできること
- 4.1.9 cv::SparseMatクラス:疎な配列
- 4.1.10 疎な配列の要素へのアクセス
- 4.1.11 疎な配列に特有の機能
- 4.1.12 大型配列型用のテンプレート形式
- 4.2 まとめ
- 4.3 練習問題
- 5章 配列の演算
- 5.1 配列でできる多様な処理
- 5.1.1 cv::abs()
- 5.1.2 cv::absdiff()
- 5.1.3 cv::add()
- 5.1.4 cv::addWeighted()
- 5.1.5 cv::bitwise_and()
- 5.1.6 cv::bitwise_not()
- 5.1.7 cv::bitwise_or()
- 5.1.8 cv::bitwise_xor()
- 5.1.9 cv::calcCovarMatrix()
- 5.1.10 cv::cartToPolar()
- 5.1.11 cv::checkRange()
- 5.1.12 cv::compare()
- 5.1.13 cv::completeSymm()
- 5.1.14 cv::convertScaleAbs()
- 5.1.15 cv::countNonZero()
- 5.1.16 cv::cvarrToMat()
- 5.1.17 cv::dct()
- 5.1.18 cv::dft()
- 5.1.19 cv::cvtColor()
- 5.1.20 cv::determinant()
- 5.1.21 cv::divide()
- 5.1.22 cv::eigen()
- 5.1.23 cv::exp()
- 5.1.24 cv::extractImageCOI()
- 5.1.25 cv::flip()
- 5.1.26 cv::gemm()
- 5.1.27 cv::getConvertElem()とcv::getConvertScaleElem()
- 5.1.28 cv::idct()
- 5.1.29 cv::idft()
- 5.1.30 cv::inRange()
- 5.1.31 cv::insertImageCOI()
- 5.1.32 cv::invert()
- 5.1.33 cv::log()
- 5.1.34 cv::LUT()
- 5.1.35 cv::magnitude()
- 5.1.36 cv::Mahalanobis()
- 5.1.37 cv::max()
- 5.1.38 cv::mean()
- 5.1.39 cv::meanStdDev()
- 5.1.40 cv::merge()
- 5.1.41 cv::min()
- 5.1.42 cv::minMaxIdx()
- 5.1.43 cv::minMaxLoc()
- 5.1.44 cv::mixChannels()
- 5.1.45 cv::mulSpectrums()
- 5.1.46 cv::multiply()
- 5.1.47 cv::mulTransposed()
- 5.1.48 cv::norm()
- 5.1.49 cv::normalize()
- 5.1.50 cv::perspectiveTransform()
- 5.1.51 cv::phase()
- 5.1.52 cv::polarToCart()
- 5.1.53 cv::pow()
- 5.1.54 cv::randu()
- 5.1.55 cv::randn()
- 5.1.56 cv::randShuffle()
- 5.1.57 cv::reduce()
- 5.1.58 cv::repeat()
- 5.1.59 cv::scaleAdd()
- 5.1.60 cv::setIdentity()
- 5.1.61 cv::solve()
- 5.1.62 cv::solveCubic()
- 5.1.63 cv::solvePoly()
- 5.1.64 cv::sort()
- 5.1.65 cv::sortIdx()
- 5.1.66 cv::split()
- 5.1.67 cv::sqrt()
- 5.1.68 cv::subtract()
- 5.1.69 cv::sum()
- 5.1.70 cv::trace()
- 5.1.71 cv::transform()
- 5.1.72 cv::transpose()
- 5.2 まとめ
- 5.3 練習問題
- 6章 描画方法とテキスト表示方法
- 6.1 図形を描画する
- 6.1.1 線画とポリゴンの塗りつぶし
- 6.1.2 フォントとテキスト
- 6.2 まとめ
- 6.3 練習問題
- 7章 OpenCVのファンクタ
- 7.1 「何かをする」オブジェクト
- 7.1.1 主成分分析(cv::PCA)
- 7.1.2 特異値分解(cv::SVD)
- 7.1.3 乱数生成器(cv::RNG)
- 7.2 まとめ
- 7.3 練習問題
- 8章 画像、動画、データファイル
- 8.1 HighGUI:ポータブルなグラフィックスツールキット
- 8.2 画像ファイルを扱う
- 8.2.1 画像を読み込む、書き込む
- 8.2.2 コーデックに関する注意
- 8.2.3 圧縮と展開
- 8.3 動画を扱う
- 8.3.1 cv::VideoCaptureオブジェクトを用いて動画を読み込む
- 8.3.2 cv::VideoWriterオブジェクトを用いて動画を書き出す
- 8.4 データの保存
- 8.4.1 cv::FileStorageに書き込む
- 8.4.2 cv::FileStorageから読み込む
- 8.4.3 cv::FileNode
- 8.5 まとめ
- 8.6 練習問題
- 9章 クラスプラットフォームとネイティブウィンドウ
- 9.1 ウィンドウで作業する
- 9.1.1 HighGUIネイティブのグラフィカルユーザーインタフェース
- 9.1.2 Qtバックエンドで作業する
- 9.1.3 OpenCVと他のGUIツールキットを統合する
- 9.2 まとめ
- 9.3 練習問題
- 10章 フィルタとコンボリューション
- 10.1 概要
- 10.2 始める前に
- 10.2.1 フィルタ、カーネル、コンボリューション
- 10.2.2 境界線の外挿と境界条件
- 10.3 閾値処理
- 10.3.1 大津のアルゴリズム
- 10.3.2 適応型閾値処理
- 10.4 平滑化
- 10.4.1 単純平滑化とボックスフィルタ
- 10.4.2 メディアンフィルタ
- 10.4.3 Gaussianフィルタ
- 10.4.4 バイラテラルフィルタ
- 10.5 微分と勾配
- 10.5.1 Sobel微分
- 10.5.2 Scharrフィルタ
- 10.5.3 Laplacian
- 10.6 画像のモルフォロジー
- 10.6.1 膨張と収縮
- 10.6.2 汎用的なモルフォロジー関数
- 10.6.3 オープニングとクロージング
- 10.6.4 モルフォロジーの勾配演算
- 10.6.5 トップハットとブラックハット
- 10.6.6 自前のカーネルを作成する
- 10.7 任意の線形フィルタによるコンボリューション
- 10.7.1 cv::filter2D()を用いて汎用フィルタを適用する
- 10.7.2 cv::sepFilter2D()を用いて汎用的な分離可能フィルタを適用する
- 10.7.3 カーネルを作る
- 10.8 まとめ
- 10.9 練習問題
- 11章 画像変換
- 11.1 概要
- 11.2 拡大、縮小、ワープ(歪曲)、回転
- 11.2.1 均一なリサイズ
- 11.2.2 画像ピラミッド
- 11.2.3 不均一写像
- 11.2.4 アフィン変換
- 11.2.5 透視変換
- 11.3 汎用的な写像
- 11.3.1 極座標変換
- 11.3.2 対数極座標(LogPolar)
- 11.3.3 任意の写像
- 11.4 画像修復
- 11.4.1 修復
- 11.4.2 ノイズ除去
- 11.5 ヒストグラムの平坦化
- 11.5.1 cv::equalizeHist():コントラストの平坦化
- 11.6 まとめ
- 11.7 練習問題
- 12章 画像解析
- 12.1 概要
- 12.2 離散フーリエ変換
- 12.2.1 cv::dft():離散フーリエ変換
- 12.2.2 cv::idft():逆離散フーリエ変換
- 12.2.3 cv::mulSpectrums():スペクトル乗算
- 12.2.4 DFTを用いたコンボリューション
- 12.2.5 cv::dct():離散コサイン変換
- 12.2.6 cv::idct():逆離散コサイン変換
- 12.3 積分画像
- 12.3.1 標準の積分計算用のcv::integral()
- 12.3.2 二乗和積分用のcv::integral()
- 12.3.3 傾斜和積分用のcv::integral()
- 12.4 Cannyエッジ検出器
- 12.4.1 cv::Canny()
- 12.5 Hough変換
- 12.5.1 Hough線変換
- 12.5.2 Hough円変換
- 12.6 距離変換
- 12.6.1 ラベルなし距離変換用のcv::distanceTransform()
- 12.6.2 ラベル付き距離変換用のcv::distanceTransform()
- 12.7 領域分割
- 12.7.1 フラッドフィル処理
- 12.7.2 Watershedアルゴリズム
- 12.7.3 Grabcuts
- 12.7.4 平均値シフト分割
- 12.8 まとめ
- 12.9 練習問題
- 13章 ヒストグラムとテンプレートマッチング
- 13.1 OpenCVでのヒストグラムの表現
- 13.1.1 cv::calcHist():データからヒストグラムを作成する
- 13.2 ヒストグラムの基本操作
- 13.2.1 ヒストグラムの正規化
- 13.2.2 ヒストグラムの閾値
- 13.2.3 最も値の大きいビンを見つける
- 13.2.4 2つのヒストグラムを比較する
- 13.2.5 ヒストグラムの使用例
- 13.3 もう少し洗練されたヒストグラムの手法
- 13.3.1 EMD(搬土距離)
- 13.3.2 バックプロジェクション
- 13.4 テンプレートマッチング
- 13.4.1 二乗差分マッチング手法(cv::TM_SQDIFF)
- 13.4.2 正規化二乗差分マッチング手法(cv::TM_SQDIFF_NORMED)
- 13.4.3 相互相関マッチング手法(cv::TM_CCORR)
- 13.4.4 正規化相互相関マッチング手法(cv::TM_CCORR_NORMED)
- 13.4.5 相関係数マッチング手法(cv::TM_CCOEFF)
- 13.4.6 正規化相関係数マッチング手法(cv::TM_CCOEFF_NORMED)
- 13.5 まとめ
- 13.6 練習問題
- 14章 輪郭
- 14.1 輪郭を見つける
- 14.1.1 輪郭の階層
- 14.1.2 輪郭を描画する
- 14.1.3 輪郭の例
- 14.1.4 もう1つの輪郭の例
- 14.1.5 高速な連結成分の解析
- 14.2 輪郭に対してさらに何かを行う
- 14.2.1 ポリゴン近似
- 14.2.2 幾何形状と特徴の要約
- 14.2.3 幾何形状的な調査
- 14.3 輪郭と画像をマッチングする
- 14.3.1 モーメント
- 14.3.2 モーメントの詳細
- 14.3.3 Hu不変モーメントを用いてマッチングを行う
- 14.3.4 Shape Contextを用いて形状を比較する
- 14.4 まとめ
- 14.5 練習問題
- 15章 背景除去
- 15.1 背景除去の概要
- 15.2 背景除去の弱点
- 15.3 シーンのモデル化
- 15.3.1 ピクセル集合の断面
- 15.3.2 フレーム差分
- 15.4 平均背景法
- 15.4.1 平均、分散、共分散を累積する
- 15.5 より高度な背景除去手法
- 15.5.1 クラス
- 15.5.2 背景を学習する
- 15.5.3 動く前景の物体も含めて学習する
- 15.5.4 背景差分:前景物体を見つける
- 15.5.5 コードブック背景モデルを使う
- 15.5.6 コードブックモデルに対するさらなる考察
- 15.6 前景除去のための連結成分
- 15.6.1 クイックテスト
- 15.7 背景手法を比較する
- 15.8 OpenCVの背景除去のカプセル化
- 15.8.1 cv::BackgroundSubtractor基底クラス
- 15.8.2 KaewTraKulPong and Bowdenの手法
- 15.8.3 Zivkovic法
- 15.9 まとめ
- 15.10 練習問題
- 16章 キーポイントと記述子
- 16.1 キーポイントとトラッキングの基礎
- 16.1.1 コーナー検出
- 16.1.2 オプティカルフローの概要
- 16.1.3 Lucas-Kanade法による疎なオプティカルフロー
- 16.2 一般化されたキーポイントと記述子
- 16.2.1 オプティカルフロー、追跡、認識
- 16.2.2 OpenCVによるキーポイントと記述子の一般的なケースにおける扱い方
- 16.2.3 キーポイント検出手法
- 16.2.4 キーポイントのフィルタ処理
- 16.2.5 マッチングメソッド
- 16.2.6 結果を表示する
- 16.3 まとめ
- 16.4 練習問題
- 17章 トラッキング
- 17.1 トラッキングの概念
- 17.2 密なオプティカルフロー
- 17.2.1 Farnebäckの多項式展開アルゴリズム
- 17.2.2 Dual TV-L1アルゴリズム
- 17.2.3 Simple Flowアルゴリズム
- 17.3 平均値シフトとCamshiftトラッキング
- 17.3.1 平均値シフト
- 17.3.2 Camshiftアルゴリズム
- 17.4 モーションテンプレート
- 17.5 推定器
- 17.5.1 Kalmanフィルタ
- 17.5.2 拡張Kalmanフィルタに関する簡単な説明
- 17.6 まとめ
- 17.7 練習問題
- 18章 カメラモデルとキャリブレーション
- 18.1 カメラモデル
- 18.1.1 射影幾何の基本
- 18.1.2 ロドリゲス変換
- 18.1.3 レンズ歪み
- 18.2 キャリブレーション
- 18.2.1 回転行列と平行移動ベクトル
- 18.2.2 キャリブレーションボード
- 18.2.3 ホモグラフィ
- 18.2.4 カメラキャリブレーション
- 18.3 歪み補正
- 18.3.1 歪み補正マップ
- 18.3.2 cv::convertMaps()を用いて歪み補正マップの表現を変換する
- 18.3.3 cv::initUndistortRectifyMap()を用いて歪み補正マップを計算する
- 18.3.4 cv::remap()を用いて画像の歪み補正を行う
- 18.3.5 cv::undistort()を用いて歪み補正を行う
- 18.3.6 cv::undistortPoints()を用いて疎な歪み補正を行う
- 18.4 キャリブレーションを全部まとめる
- 18.5 まとめ
- 18.6 練習問題
- 19章 射影変換と3次元ビジョン
- 19.1 射影
- 19.2 アフィン変換と透視変換
- 19.2.1 鳥瞰図変換の例
- 19.3 3次元姿勢推定
- 19.3.1 単一カメラによる姿勢推定
- 19.3.2 cv::solvePnP()を用いて既知の物体の姿勢を計算する
- 19.4 ステレオ画像処理
- 19.4.1 三角測量
- 19.4.2 エピポーラ幾何
- 19.4.3 基本行列と基礎行列
- 19.4.4 エピポーラ線を計算する
- 19.4.5 ステレオキャリブレーション
- 19.4.6 ステレオ平行化
- 19.4.7 ステレオ対応点探索
- 19.4.8 ステレオキャリブレーション、平行化、対応点探索のコード例
- 19.4.9 3次元再投影からの奥行きマップ
- 19.5 動画像からの3次元復元
- 19.6 2次元と3次元の線のフィッティング処理
- 19.7 まとめ
- 19.8 練習問題
- 20章 OpenCVによる機械学習の基本
- 20.1 機械学習とは?
- 20.1.1 訓練セットとテストセット
- 20.1.2 教師あり学習と教師なし学習
- 20.1.3 生成的モデルと識別的モデル
- 20.1.4 OpenCVのMLアルゴリズム
- 20.1.5 機械学習をビジョンで使う
- 20.1.6 変数の重要度
- 20.1.7 機械学習の問題を診断する
- 20.2 MLライブラリの古い関数群
- 20.2.1 K-means法
- 20.2.2 Mahalanobis距離
- 20.3 まとめ
- 20.4 練習問題
- 21章 StatModelクラス:OpenCVの学習標準モデル
- 21.1 MLライブラリの共通ルーチン
- 21.1.1 訓練とcv::ml::TrainDataクラス
- 21.1.2 予測
- 21.2 cv::ml::StatModelを用いた機械学習アルゴリズム
- 21.2.1 単純/ノーマルベイズ分類器
- 21.2.2 二分決定木
- 21.2.3 ブースティング
- 21.2.4 ランダムツリー
- 21.2.5 期待値最大化
- 21.2.6 K近傍法
- 21.2.7 多層パーセプトロン
- 21.2.8 サポートベクタマシン
- 21.3 まとめ
- 21.4 練習問題
- 22章 物体検出
- 22.1 木構造に基づく物体検出テクニック
- 22.1.1 カスケード分類器
- 22.1.2 教師あり学習とブースティングの理論
- 22.1.3 新しい物体を学習する
- 22.2 サポートベクタマシンによる物体検出
- 22.2.1 物体検出のためのLatent SVM
- 22.2.2 Bag of Wordsアルゴリズムと意味カテゴリ化
- 22.3 まとめ
- 22.4 練習問題
- 23章 OpenCVの今後
- 23.1 過去と現在
- 23.1.1 OpenCV 3.x
- 23.2 前回の予言はどれくらいうまくいったか?
- 23.3 将来の機能
- 23.3.1 現在のGSoCの成果
- 23.4 コミュニティからの貢献
- 23.4.1 OpenCV.org
- 23.5 AIに関する思索
- 23.6 あとがき
- 付録A 平面分割
- A.1 ドロネー三角形分割、ボロノイ分割
- A.1.1 ドロネーまたはボロノイ細分割区分の生成
- A.1.2 ドロネーの細分割区分を動き回る
- A.1.3 外側の三角形または凸包上の辺を特定し、凸包上を歩く
- A.1.4 使用例
- A.2 練習問題
- 付録B opencv_contribモジュール
- B.1 opencv_contribモジュールの概説
- B.1.1 opencv_contribの内容
- 付録C キャリブレーションパターン
- C.1 OpenCVで使われるキャリブレーションパターン
- 参考文献
- 著者・訳者紹介
- 奥付
Product information
- Title: 詳解 OpenCV 3 ―コンピュータビジョンライブラリを使った画像処理・認識
- Author(s):
- Release date: May 2018
- Publisher(s): O'Reilly Japan, Inc.
- ISBN: 9784873118376
You might also like
book
入門 Python 3 第2版
データサイエンスやウェブ開発、セキュリティなど、さまざまな分野で人気を獲得してきているPython。本書は、ベストセラー『入門 Python 3』の6年ぶりの改訂版で、プログラミング初級者を対象としたPythonの入門書です。プログラミングおよびPythonの基礎から、ウェブ、データベース、ネットワーク、並行処理といった応用まで、実践を見据えたPythonプログラミングをわかりやすく丁寧に説明します。Python 3.9に対応し、f文字列などの新機能も追加され大幅にボリュームアップしました。Pythonの機能をひと通り網羅し、リファレンスとしても便利です。
book
生成 Deep Learning ―絵を描き、物語や音楽を作り、ゲームをプレイする
生成型ディープラーニングの解説書。「絵を描く」「曲を作る」といった、これまで人間にしかできないと思われていた創造的な作業を機械に行わせるという、いま最もホットな技術の基礎から応用までをJupyterノートブック環境で実際に試しながら学びます。第I部は基礎編です。機械学習プログラミング、変分オートエンコーダ、GANやRNNなど、生成モデルの作成において重要な基礎技術を学びます。第II部は応用編です。CycleGAN、エンコーダ―デコーダモデル、MuseGANなどのモデルを作成し、作画、作文、作曲といった創造的なタスクに取り組みます。さらには、実環境を用いずにゲームプレイの学習を可能にする、世界モデルを使った強化学習にも取り組みます。
book
詳説 Deep Learning ―実務者のためのアプローチ
エンタープライズ向けのディープラーニングの解説書。企業でディープラーニングアプリケーションを開発、運用するための実践的な手法を紹介します。対象読者はソフトウェア開発の現場で活躍する実務者。前半はディープラーニング初心者、後半はJavaエンジニア向けの構成です。機械学習、ニューラルネットワークの基礎から始め、ディープラーニングの基本的な概念、実際にチューニングを行う際のベストプラクティス、データのETL(抽出・変換・ロード)の方法、Apache Sparkを用いた並列化について、JavaライブラリDeep Learning4J(DL4J)の開発者でもある著者がわかりやすく丁寧に解説します。
book
ゼロから作るDeep Learning ❹ ―強化学習編
人気シリーズの第4弾。今回のテーマは強化学習です。実際のコードを提示し動かしながら学ぶという本シリーズのスタイルを踏襲し、外部ライブラリに頼らず、強化学習を支える基本的な技術やアイデアをゼロから実装しながら学びます。本書では読者が強化学習独特の理論を確実にマスターできるように、強化学習という難解なテーマの構成要素の一つひとつを「理論」と「実践」の双方から丁寧に解説します。数式だけで説明する理論書とは異なり、読者はコードを通してハッとする気づきを数多く得られるでしょう。