サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Wikipedia
labs.eecs.tottori-u.ac.jp
We Harrisのコーナー検出の背景にある概念を理解します. 以下の関数の使い方を学びます: cv2.cornerHarris(), cv2.cornerSubPix() 理論¶ 前チュートリアルでコーナーとは全方向に対して画素値の大きな変化が観測される領域であることを学びました.初期のComputer Visionにおけるコーナー検出の試みとして Chris Harris と Mike Stephens が A Combined Corner and Edge Detector という論文で提案したHarrisのコーナー検出と呼ばれる方法があります.Harrisらはこの単純なアイディアを数式で表現しました.基本的には全方向に対して画素位置 の移動量に対する画素値の違いを見つけるわけです.以下のように表現できます. 窓関数は矩形窓か画素に対して重み付けをするガウシアン窓を使います. コー
OpenCVを使って色々な幾何学的形状を持つオブジェクトを描画する方法を学びます 以下の関数の使い方を学びます: cv2.line(), cv2.circle() , cv2.rectangle(), cv2.ellipse(), cv2.putText() etc. img : オブジェクトを描画する画像 color : オブジェクトの色.BGRで指定する場合はtupleとして指定する,例えば青であれば (255,0,0) .グレースケールで指定する場合は単にスカラー値を指定する. thickness : 線や円などの太さ. 閉じている図形(例えば円)に対して -1 が指定された場合,そのオブジェクトは塗りつぶされる. デフォルト値は1 lineType : 線のタイプ, 8連結,アンチーエイリアス等.デフォルトは8連結. cv2.LINE_AA を指定すると曲線の描画に適したアンチーエ
領域(輪郭)の属性情報¶ ここでは物体の特徴を表す時によく使われる輪郭の属性情報(ソリディティ, 等価直径, マスク画像,平均値など)について学びます. より詳細な情報については Matlab regionprops documentation を参照してください. (NB : 重心,面積,周囲長なども輪郭の属性情報ですが,前のチュートリアルで既に扱いました)
更に,カメラの内部パラメータや外部パラメータといった情報も必要になります. 内部パラメータ(Intrinsic parameters) とはカメラ固有のパラメータを指し,焦点距離 (),光学中心, () などです.内部パラメータはカメラ行列とも呼ばれます.このパラメータはカメラ固有のものであるため,一度計算すればそれ以降保存した値を使い続けられます.内部パラメータは3x3の行列として以下のように表されます: 外部パラメータはある座標系における3次元点の座標を別の座標系での座標に変換するための回転と並進のパラメータを指します. ステレオアプリケーションを作るためには,まず初めにこれらの歪みを解消(補正)する必要があります.これらのパラメータを推定するためにはチェスボードのように,(歪みが無かったとしたら)画像中でどのように見えるか想像できるパターンを何枚か撮影します.そのような特殊パターン上
目的¶ このチュートリアルでは 特徴点のマッチングとcalib3dモジュールのfindHomographyを組み合わせて,複雑な画像中から既知の物体を検出する方法を学びます. 基礎¶ 前のチュートリアルでは何をしましたか?クエリ画像上の特徴点を検出し,別の画像上で対応点を検出しました.端的に言うと,もう1枚の画像内にある物体の幾つかの部分の場所を見つけたことになります.この情報は学習画像上の物体の厳密な位置を見つけるのに十分な情報です. このために,calib3dモジュールの cv2.findHomography() という関数を使えます.両方の画像から得られた点の集合を与えると,その物体の射影変換を計算します.次に cv2.perspectiveTransform() を使いその物体を検出します.射影変換の計算には最低でも4組の対応点が必要となります. マッチングの際に,結果に影響を及ぼ
ある画像を別の色空間へ変換する方法を学びます. また,動画中で特定の色を持つ物体の追跡方法を学びます.
目的¶ このチュートリアルでは オプティカルフローの概念と,Lucas-Kanade法を使ったオプティカルフローの計算方法を学びます. 同画像中の特徴点の追跡のために cv2.calcOpticalFlowPyrLK() 関数などを使います. オプティカルフロー(Optical Flow)¶ オプティカルフローとは物体やカメラの移動によって生じる隣接フレーム間の物体の動きの見え方のパターンです.各ベクトルが1フレーム目から2フレーム目への変位ベクトルを表す2次元ベクトル場で表現されます.以下の画像(画像引用: Wikipedia article on Optical Flow) を見てください.
返戻値はarray型のデータになり,各行に3つの数値 - [ 始点, 終点, 最も遠い点, 最も遠い点までの近似距離] を指します.以下にその例を示します.まず初めに始点と終点を結ぶ線を引き,最も遠い点に円を描きます.最初の3個の値は cnt のインデックスだという点に注意してください.そのため,点の座標を得るためには``cnt`` から取得しなければいけません. import cv2 import numpy as np img = cv2.imread('star.jpg') img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) ret, thresh = cv2.threshold(img_gray, 127, 255,0) contours,hierarchy = cv2.findContours(thresh,2,1) cnt = con
ここでは画像ファイルを読み込む方法,表示する方法,保存する方法を学びます 以下の関数の使い方を学びます : cv2.imread(), cv2.imshow() , cv2.imwrite() さらに,Matplotlibを使った画像の表示方法も学びます 画像を読み込む¶ 画像ファイルを読み込むには cv2.imread() という関数を使います.画像ファイルが作業ディレクトリ内に保存されている場合はファイル名のみを指定し,そうでない場合は絶対パスもしくは適切な相対パスで指定しなければいけません. 第2引数は画像の読み込み方法を指定するためのフラグです. cv2.IMREAD_COLOR : カラー画像として読み込む.画像の透明度は無視される.デフォルト値 cv2.IMREAD_GRAYSCALE : グレースケール画像として読み込む cv2.IMREAD_UNCHANGED : アルファ
このチュートリアルでは画像を異なる色空間に変換する方法を学びます.例えばカラー空間からグレースケール空間への変換やBGR空間からHSV空間への変換です. さらに,動画中から特定の色を持つ物体を検出する方法もナビます. 以下の関数の使い方を学びます : cv2.cvtColor(), cv2.inRange() etc. 色変換の変換¶ OpenCVは150種類以上の色空間の変換を用意していますが,その中で最も広く使われている二つの変換方法(BGR Gray変換とBGR HSV変換)を詳しく見ていきます. 色変換に使う関数は cv2.cvtColor(input_image, flag) です.ここで flag は色変換の種類を指定するフラグです. BGR Gray変換には cv2.COLOR_BGR2GRAY フラグ,BGR HSV変換には cv2.COLOR_BGR2HSV フラグを指定
画素値のアクセス及び変更方法 画像の属性情報の取得 画像中の注目領域(ROI)の設定 画像の分割と統合 このセクションで使用するほとんどすべての処理はOpenCVというよりNumpyに関係しています. 最適化されたOpenCVのコードを書くにはNumpyに関する知識が必要になります. ( このページに載せてある各コードは数行程度のコードばかりなので,Pythonのターミナル上で実行した結果を載せています.)
目的¶ このチュートリアルでは テンプレートマッチングを使った画像中の物体検出について学びます. 以下の関数の使い方を学びます : cv2.matchTemplate(), cv2.minMaxLoc() 理論¶ テンプレートマッチングは画像中に存在するテンプレート画像の位置を発見する方法です.OpenCvは cv2.matchTemplate() 関数を用意しています.この関数はテンプレート画像を入力画像全体にスライド(2D convolutionと同様に)させ,テンプレート画像と画像の注目領域とを比較します.OpenCVではテンプレートと注目領域を比較する方法を幾つか用意しています(詳細についてはドキュメントを参照してください).出力は各画素がテンプレート画像と注目画素の近傍領域の類似度を表すグレースケール画像になります. 入力画像のサイズが (WxH) ,テンプレート画像のサイズが
画像中のノイズを除去するNon-local Means Denoisingアルゴリズムを学びます. cv2.fastNlMeansDenoising() や cv2.fastNlMeansDenoisingColored() といった関数を学びます. 理論¶ これまでのチュートリアルでガウシアンフィルタリングや中央値フィルタリングなど様々な画像の平滑化技術を学んできました.これらの技術はノイズが小さい時にはうまく動いてくれます.ある画素の近傍画素に対して何かしらの処理を施すわけですが,これらの技術はいうなればノイズ除去は注目画素の近傍で局所的に行われるわけです. ノイズにはある性質があります.一般的には平均ゼロのランダムな値であると考えられます.ノイズがかかった画素値を以下のようにモデル化します. ここで はノイズが含まれない本来の画素値を表し は画素に加えられたノイズの値を表します.同様
輪郭とは何なのか理解します 輪郭の検出方法,描画方法を学びます 以下の関数の使い方を学びます : cv2.findContours(), cv2.drawContours() 輪郭とは何か?¶ 輪郭とは同じ色や値を持つ(境界線に沿った)連続する点をつなげて形成される曲線のことです.形状解析や物体追跡,認識お有用なツールになります. 精度よく輪郭を検出するために,二値日画像を使います.そのため,まずはじめにしきい値処理やCannyのエッジ検出などで二値画像を取得します. cv2.findContours() 関数は入力画像を変える処理です.輪郭検出後の処理で入力画像を使用する必要がある場合は,別の変数としてコピーしてください. OpenCVの輪郭検出は,黒い背景から白い物体の輪郭を検出すると仮定しています.物体は白(明るい色),背景は黒(暗い色)と覚えておいてください. import num
目的¶ このチュートリアルでは OpenCvとNumPyの両方の関数を使ってヒストグラムを計算する方法を学びます. OpenCVとMatplotlibの関数を使ってヒストグラムをプロットする方法を学びます. 以下の関数の使い方を学びます : cv2.calcHist(), np.histogram() etc. 理論¶ ヒストグラムとは何でしょうか?ヒストグラムとは画像中の画素値の全体的な分布を知るためのグラフやプロットとみなせます.横軸に画素値(常にではないけど0から255の値を持つ),縦軸に画素値の出現頻度を載せるプロットです.ヒストグラムの可視化は画像を理解するための一つの方法です.ヒストグラムを観れば画像のコントラスト,明るさ,画素値の分布などが直観的に理解できます.今日利用できる画像処理ソフトのほとんどがヒストグラムに関する機能を持っています.以下に示す画像は Cambridge
動画ファイルの読み込み方,表示方法,保存方法を学びます PCに接続したカメラを使って撮影した映像を表示する方法を学びます 以下の関数の使い方を学びます : cv2.VideoCapture(), cv2.VideoWriter() カメラから動画を撮影する¶ OpenCVはカメラを使って動画を撮影するための非常に単純なインタフェースを用意しています.カメラ(私はノートPCに備え付けのウェブカメラを使っています)を使って撮影した動画をグレースケールの動画に変換して表示させましょう.初めの一歩として簡単な例になります. 動画を撮影するには VideoCapture 型のオブジェクトを生成しなければいけません.引数には撮影に使用するカメラのデバイス番号か読み込みたい動画ファイルのファイル名を指定します.デバイス番号はコンピュータに接続されているカメラを識別するための番号です.普通は1台のカメラが
目的¶ このチュートリアルでは 画像の前景領域を抽出するためのGrabCutアルゴリズムについて学びます. この目的のために対話的アプリケーションを作成します. 理論¶ GrabCutアルゴリズムはイギリスのMicrosoft Research Cambridgeの研究者だったCarsten Rother, Vladimir Kolmogorov, Andrew Blakeらの論文 “GrabCut”: interactive foreground extraction using iterated graph cuts で提案されたアルゴリズムです.使用者の手作業をできるだけ少なくした画像中の前景領域抽出アルゴリズムが必要とされ,GrabCutがその答えになります. ユーザの観点で見るとどのようなアルゴリズムなのでしょうか? ユーザはまず初めに初期値として前景領域の周りに長方形を描きます
目的¶ このチュートリアルでは OpenCVを使って画像のフーリエ変換を計算する方法を学びます. NumpyのFFTを使う方法を学びます. フーリエ変換を使ったアプリケーションについて学びます. 以下の関数の使い方を学びます : cv2.dft(), cv2.idft() etc 理論¶ フーリエ変換は種々のフィルタの周波数特性を解析するために使われます.画像に対しては 2次元離散フーリエ変換 (DFT) を使って周波数領域に変換します.高速化されたアルゴリズムである 高速フーリエ変換 (FFT) はDFTの計算に使います.これらのアルゴリズムの詳細については信号処理や画像処理の教科書を参照してください. 補足資料 の章に幾つか参考文献を挙げています. 正弦波を と書きます.ここで は信号の周波数を表します.もしこの信号を周波数領域で観測すると,周波数 の点にspikeが見られます.離散信
OpenCVの公式ドキュメントに各フラグがどのよな処理をするか記載されているので,確認してください. cv2.threshold は二つの出力を返します.一つ目の出力 retval については後述します.二つ目の出力がしきい値処理された後の 二値画像 になります. コード : import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('gradient.png',0) ret,thresh1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY) ret,thresh2 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV) ret,thresh3 = cv2.threshold(img,127,2
Haar特徴ベースのCascade型分類器を使った顔検出の基礎を学びます. 同じ手法を目の検出などに拡張します. 基礎¶ Haar特徴ベースのCascade型分類器を使った物体検出はPaul ViolaとMichael Jonesが2001年に”Rapid Object Detection using a Boosted Cascade of Simple Features”という論文で発表した効率過的物体検出手法です.この手法は機械学習を基にした手法で,大量の正例,負例の画像から分類器であるcascade関数を学習します.この分類器は学習が終わると,入力画像に対して適用されます. ここでは顔検出にこの手法を使います.最初にこのアルゴリズムは識別機の学習を行うために大量の正例(顔画像)と負例(顔が写っていない画像)を必要とします.これらの画像から何かしらの特徴を抽出する必要があるわけですが
基礎¶ 背景差分はComputer Visionを基にしたアプリケーションにおけるよく使われる前処理の内の一つです.例えば,固定カメラによる来客者数・退室者数の測定,屋外カメラを使った交通流計測などが挙げられます.このようなアプリケーションを実現するために,まず初めに画像中に写る人や車のみを検出する必要があります.技術的には,静的背景から移動物体を検出する問題を解かなければいけません. 背景のみが写った画像が手に入れば簡単な問題です.移動物体が写っている画像から背景画像を引き算すれば十分です.しかし,ほとんどの場合,そのような背景画像を取得できないため,どのような画像が手元にあるにせよ,背景を抽出する必要があるわけです.車の影が写ると更に問題は複雑になります.なぜなら影もまた移動するため,単純な引き算では影も前景物体とみなされてしまうからです. このような目的のために,様々なアルゴリズムが
目的¶ このチュートリアルでは, 膨張処理,収縮処理といったモルフォロジー処理について学びます. 以下の関数の使い方を学びます : cv2.erode(), cv2.dilate(), cv2.morphologyEx() etc. 理論¶ モルフォロジー変換は主に二値画像を対象とし,画像上に写っている図形に対して作用するシンプルな処理を指します.モルフォロジー変換には入力画像と 処理の性質を決める 構造的要素 ( カーネル )の二つを入力とします.基本的なモルフォロジー処理として,収縮(Erosion)と膨張(Dilation)が挙げられます.他には,この二つの処理を組み合わせたオープニングとクロージングといった処理も挙げられます.このチュートリアルでは,これらの処理を一つ一つ紹介していきます. 1. 収縮(Erosion)¶ 収縮のアイディアは縮む珪藻から来ており,前景物体の境界が浸食
OpenCV-Python チュートリアル文書のページへようこそ!¶ このチュートリアルは OpenCV-Python-Tutorials を和訳したものです. 現在(2016/03/08),py_feature2d(特徴点検出,特徴量記述子)に関するチュートリアルの翻訳が終わっていません. 内容:
目的¶ このチュートリアルでは 二枚の画像の特徴点のマッチングについて学びます. OpenCVが提供する総当たりマッチングとFLANNを使ったマッチングの使い方を学びます. 総当たりマッチングの基礎¶ 総当たりマッチング(Brute-Force matcher)はシンプルです.最初の画像中のある特徴点の特徴量記述子を計算し,二枚目の画像中の全特徴点の特徴量と何かしらの距離計算に基づいてマッチングをします.最も距離が小さい特徴点が対応する特徴点がマッチング結果として返されます. 総当りマッチングでは,まず初めに cv2.BFMatcher() を使ってBFMatcher型のオブジェクトを生成します.この関数は2つのオプショナルパラメータがあります.1つ目のパラメータは normType です.このパラメータはマッチングコストの計算に使われる距離計算方法を指定します.デフォルトは cv2.NO
画像に対する基本的な処理を学びます.具体的には画素値の編集,幾何変換,コードの最適化(code optimization),数学関数などです.
領域(輪郭)の特徴である面積,周囲長,重心,外接矩形などについて学びます. 領域(輪郭)を対象とした様々な関数について学ぶことになります. 1. モーメント¶ 画像のモーメントは物体の重心,面積などを計算するのに役立ちます.詳細についてはWikipediaの 画像モーメント(英語) のページを参照してください. cv2.moments() 関数はあらゆるモーメントを計算します.: import cv2 import numpy as np img = cv2.imread('star.jpg',0) ret,thresh = cv2.threshold(img,127,255,0) imgEdge,contours,hierarchy = cv2.findContours(thresh, 1, 2) cnt = contours[0] M = cv2.moments(cnt) print
目的¶ このチュートリアルでは ハフ変換の概念を学びます. 画像中から直線検出をするためにハフ変換をどのように使うか学びます. 以下の関数の使い方を学びます: cv2.HoughLines(), cv2.HoughLinesP() 理論¶ ハフ変換は数式で表現できる形状を検出するための一般的な方法です.形状の一部が破損,劣化していたとしても検出できます.ここでは直線検出のためにどのようにハフ変換を使うかみていきます. 直線は もしくは と表せrます.ここで は原点から直線までの距離, は直線の法線と横軸の成す角を反時計回りに表します(この方向は座標系の表現次第で変わります.この表現はOpenCVで使われている者です).以下の画像を確認してください.: もしも直線が原点の下を通過するのであればrhoは正の値,角度は180度未満になります.原点の上を通過する場合は角度は180より大きい値になる
並進,回転,アフィン変換といった幾何変換を学びます. 以下の関数の使い方を学びます: cv2.getPerspectiveTransform 変換¶ OpenCVは2つの変換関数 cv2.warpAffine と cv2.warpPerspective を提供しています. cv2.warpAffine は2x3の変換行列を入力するのに対して cv2.warpPerspective は3x3の変換行列を入力とします. スケーリング(拡大・縮小)¶ スケーリングは画像のサイズ変更のみを行います.この変換のために cv2.resize() 関数が用意されています.変更後の画像サイズを指定する必要があります.補間方法は複数ありますが,縮小には cv2.INTER_AREA ,拡大には cv2.INTER_CUBIC (処理が遅い) や cv2.INTER_LINEAR が適しています.デフォルトの
理論¶ 画素値が特定の範囲に集中している画像を考えてみてください.例えば明るい画像は画素値が高い範囲に集中しています.しかし,良い画像は画素値が全範囲に万遍なく分布しているものです.良い画像を得るにはこのヒストグラムを両側に向けて伸ばす必要があり,これがまさにヒストグラム平坦化の処理になります.この処理によって画像のコントラストが改善されます. 詳細な説明に関しては,Wikipediaの ヒストグラム平坦化 に関する記事を読むことをお勧めします.例を示しながら詳しく説明しているため,十分な理解が得られるでしょう.代わりに,Numpyを使った実装を紹介し,次にOpenCVの関数を紹介します. import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('wiki.jpg',0) his
このページを最初にブックマークしてみませんか?
『labs.eecs.tottori-u.ac.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く