OpenCV

OpenCVの物体追跡

  目次 1. OpenCVの物体追跡の概要 1.1 物体追跡とは 1.2 OpenCV 2. 実験 2.1 環境の準備 2.2 コード 2.3 結果の動画   1. OpenCVの物体追跡の概要 1.1 物体追跡とは 物体追跡とは,与えられた動画から,指定した対象が各画像間でどのように移動したかを推定することです。動画の中を移動する物体の動きをトラッキング(追跡)することが出来れば、その物体の変位や速度、加速度といった物理量を計算することが出来ます。   1.2 OpenCVの物体追跡 OpenCVには物体追跡アルゴリズムがopencv-contrib-pythonとして提供されています。画像処理の方法がOpenCVに6つ実装されています。   MIL(Multiple Instance Learning) 考え方としてはBoostingにとても近いけど、分類対象の場所の近傍のサンプルについてもいくつか正の場所として扱うことが特徴です。 cv2.TrackerMIL_create()   KCF(Kernelized Correlation Filters) MILの近傍サンプルにはそれぞれ同士でオーバーラップする部分があって、その領域を加味することで性能を上げたらしいです。 cv2.TrackerKCF_create()   TLD(Tracking, learning and detection) 性質上、似たような他のものとの入れ替わりには引っ張られたりすることがあります。ただ、長い間遮られたりするものやスケールが大幅に変わるものには適しているらしいです。 cv2.TrackerTLD_create()   MedianFlow オブジェクトを時間的に順方向および逆方向の両方で追跡して、これらの軌跡間の差異を測定します。 cv2.TrackerMedianFlow_create()   GOTURN 深層学習を使ったトラッキング手法なため、向いているハードウェアに搭載すればとても早いらしいです。 cv2.TrackerGOTURN_create()   MOSSE …

OpenCVの物体追跡 Read More »

物体検出における学習モデル評価方法IoU, Precision, Recall

  目次 1. IoUとは 2. PrecisionとRecall 3. 実験 _3.1 データロード _3.2 IoUの関数 _3.3 Iouの可視化 _3.4 Precisionの関数 _3.5 Precisionの可視化 _3.6 Recallの関数 _3.7 Recallの可視化   前回の記事は「画像分類・物体検出・セグメンテーションの比較」を説明しました。また、 今回の記事は物体検出における学習モデル評価方法Iouについて説明したいです。   1. IoUとは IoUとは、Intersection over Unionの英語略称で、画像認識物の体検出精度のひとつのメリットです。画像中の検出したい物体を、作成したモデルがどの程度正しく検出できるかを評価する指標です。IoU は、以下の式で定義されます。つまり、領域の共通部分の割り算します。 予測が完全に正しい場合、IoU は1です。正解領域と予測領域の重なりが大きいほど IoU の値は大きくなります。 2. PrecisionとRecall Precision を確認 予測したデータのうち,実際に当たっているものです。予測データのうち必要な所を制限です。 Recallは予測データのうち必要な所を実際に合わします。 3. 実験 環境:Google Colab データセット:車画像 モデル評価:IoU, Precision, Recall 3.1 データロード ライブラリインポート from google.colab …

物体検出における学習モデル評価方法IoU, Precision, Recall Read More »

OpenCVのWatershedで画像の領域分割

  目次 1. Watershed画像分割とは 2. OpenCVのWatershed 3. 実験 _3.1 データロード _3.2 画像加工 _3.3 輪郭検(findContours) _3.4 画像分割(watershed) 前回の記事は「OpenCV-Pythonでの図形検出、図形数える」を説明しました。Contoursのモジュールは、領域輪郭の図形検出ができますが、画像の領域分割はできません。画像分割の場合は、OpenCVのWatershedアルゴリズムを利用します。Watershedアルゴリズムとは、くっついているものを分離する事もできる古典的領域分割アルゴリズムです。日本語だと分水嶺アルゴリズムと言われています。画像の輝度勾配を山嶺とみなし、山の高い(= 輝度値の高い)位置から流れ込む水の作る領域をひとつの領域とする分割を行います。そのため輝度がはっきりと異なる場合は、弱いアルゴリズムです。 1. Watershed画像分割とは Watershedは、得られた画像を意味のある領域に分割する事は重要な技術です。Watershedアルゴリズムは画像ピラミッドによる画像のセグメント化・平均値シフト法による画像のセグメント化します。 2. OpenCVのWatershed cv.watershed(image, markers) image : 入力画像 markers:  画像のマーカー(画像と同じサイズ) https://docs.opencv.org/master/d7/d1b/group__imgproc__misc.html#ga3267243e4d3f95165d55a618c65ac6e1 3. 実験 環境:Google Colab データセット:硬貨の画像 ライブラリ:OpenCV 分析:画像分割(watershed) 3.1 データロード ライブラリインポート import cv2 import numpy as np import imutils from IPython.display import Image 画像のファイルを表示します。 img_file = “coin02.png” Image(img_file) 3.2 画像加工 pyrMeanShiftFilteringで同様の色分布で色を中和します。 image = cv2.imread(img_file) shifted = cv2.pyrMeanShiftFiltering(image, 21, 51) …

OpenCVのWatershedで画像の領域分割 Read More »

OpenCVで画像のInpaintingの解説

目次 1.画像のInpaintingの概要 __1.1 画像のInpaintingとは __1.2 OpenCVのInpainting __1.3 Navier-Stokesのアルゴリズム vs Fast Marching のアルゴリズム 2. 実験 __2.1 実験1: 兎画像に墨痕の削除 __2.2 実験2: 人の画像にウォーターマークの削除 1.画像のInpaintingの概要 1.1 画像のInpaintingとは Inpaint は日本語では修復するという意味です。引っかき傷や,画像の上に書かれた文字などがナチュラルに復元される方法です。今回はOpenCVでのinpaintを説明と実験したいと思います。 1.2 OpenCVのInpainting cv2.inpaint(image, mask, radius, method) –image:修復作業を行う損傷した写真への道 –mask:写真の損傷部分に対応するマスクへのパス –radius:デフォルトの修復半径は3ピクセルに設定されています。 この値を調整して、画像復元の範囲を大きくします。 –method:「telea」または「ns」アルゴリズムの選択ができます。アルゴリズムは、以下のようになっています。 Navier-Stokesのアルゴリズム(INPAINT_NS) 流体力学の理論を適用して、コンピュータービジョンの問題を解決します。下の画像の目的は、黒い領域を塗りつぶして、右のような画像を取得する事です。領域内の画像強度を上記の制約で更新する偏微分方程式(partial differential equation - PDE)を用いて補完をおこなっていきます。画像の滑らかさの情報は、画像のラプラシアンによって推定され、等輝度線(強度が等しい輪郭)に沿って伝播されます。 等輝度線は、90度回転した画像勾配によって推定されます。 Fast Marching のアルゴリズム(INPAINT_TELEA) Fast Marching のアルゴリズムは、異なる手法を使用して補完をしていきます。 滑らかさの推定量として画像ラプラシアンを使用する代わりに、ピクセルの既知の画像近傍の加重平均を使用して修復します。 及び既知の近傍ピクセルと勾配を使用して、修復されるピクセルの色を推定します。逐次的なアルゴリズムであり、ピクセルが修復されると、境界を更新していきます。 長所と短所 理論と論文によれば、Navier-Stokesベースのインペインティングは遅い傾向があり、Fast Marchingベースの方法よりもぼやけた結果を生成する傾向があります。INPAINT_NSはテストでより良い結果を生成し、速度もINPAINT_TELEAよりわずかに優れていました。しかし以下で実験したところそうとは限らないことがわかりました。 アルゴリズムの論文: cv2.INPAINT_TELEA: An …

OpenCVで画像のInpaintingの解説 Read More »

OpenCVでのモルフォロジー変換(Morphological Transformations)の解説

目次 モルフォロジー変換の概要 1. 収縮(Erosion) 2. 膨張(Dilation) 3. オープニング(Opening) 4. クロージング(Closing) 5. モルフォロジー勾配 6. トップハット変換 7. ブラックハット変換 モルフォロジー変換とは(Morphological Transformations) モルフォロジー変換は、2値画像に関して,「膨張」や「収縮」などのシンプルな画像処理のことです。モルフォロジー変換には入力画像と と構造的要素(Kernel)の二つを入力として与えます。基本的なモルフォロジー処理として,収縮(Erosion)と膨張(Dilation)が挙げられます.他には,この二つの処理を組み合わせたオープニングとクロージングといった処理も挙げられます。 ライブラリのインポート import cv2 from google.colab.patches import cv2_imshow 1. 収縮(Erosion) 収縮処理は、収縮処理が施された画像中のオブジェクトは細くなる処理です。オブジェクトの境界付近の情報が消えやすくなることです。下記の図は収縮処理です。 # 画像を読み込む img = cv2.imread(‘input_image01.jpg’, 0) kernel = np.ones((5,5), np.uint8) # 処理 img_erosion1 = cv2.erode(img,kernel,iterations = 1) img_erosion2 = cv2.erode(img,kernel,iterations = 2) # 結果表示 cv2_imshow(img) …

OpenCVでのモルフォロジー変換(Morphological Transformations)の解説 Read More »

Python-OpenCVでのRGBからHSVに変換

画像解析一覧 画像解析では、画像の色空間を変換することは一般的な操作になります。OpenCVは150種類以上の色空間の変換を用意しているが,その中で最も広く使われている変換方法は、BGR からGrayに変換とBGRから HSVに変換であります。今回の記事はBGRから HSVに変換する方法を解説します。 目次 1. 色空間とは 1.1 RGB色空間モデル 1.2 HSV色空間モデル 2. RGBからHSVに変換の換算式 3. PythonのOpenCVコード:RGBからHSVに変換 3.1データロード 3.2 RGBの画像を可視化 3.3 HSVに変換 3.4 HSVの画像を可視化 1. 色空間とは 色空間(カラースペース)とは色を定量的に表現方法です。代表的な色空間にはRGBがあるが、これは、赤(Red)、緑(Green)、青(Blue)の光の3原色を利用した色空間であり、コンピュータのモニタへの出力や、アプリケーション上の色設定などでよく用いられます。他には、テレビで用いられているYCbCr/YPbPr、印刷分野で主流であるCMYKやDICなどがあります。 1.1 RGB色空間モデル コンピュータやテレビの映像表示に使われるディスプレイでは、色を区別する方法として RGB モデル(RGB model)が広く使われています。それに合わせて、Webサイトを制作する際に色を指定する場合にも RGB にもとづく色表記が使われます。赤(red)、緑(green)、青(blue)の 3 つであり、これらを総称して原色(primary colors)と呼びます。それぞれの要素の明度を最小の 0 から最大の 255 の間に置きます。すべての原色が混ざると白(white)になります。他方で、すべての原色が欠けると黒(black)になります。 1.2 HSV色空間モデル HSV モデル(HSV model)とは、色相(hue)・明度(lightness)・彩度(saturation)の 3 つの基準から色を分類するモデルです。HSV モデルにおいて使われる 3 つの基準を総称して色の三属性(three attributes of color)と呼びます。HSV モデルは人間が色を知覚する方法と似ていることからデザイナーの間で広く使われています。 …

Python-OpenCVでのRGBからHSVに変換 Read More »

OpenCV + Pythonでの色認識・色検出

前回の記事は OpenCVで画像の図形検出と直線検出について説明しました。 「OpenCV + Pythonでの図形検出、図形数える」 「OpenCV + Pythonでの直線検出」 今回の記事は画像解析についてOpenCVで画像から色認識し、色検出を説明します。 OpenCVライブラリのInRangeはビデオ、画像の色範囲を認識する機能です。下界と上界を設定すれば、対象の色を検出ができます。InRangeのクラスは下記に説明します。 InRange InRange(src, lower, upper, dst) パラメタ: src (CvArr) – 入力画像 lower (CvArr) – 下界(その値を含む)を表す配列 upper (CvArr) – 上界(その値は含まない)を表す配列 dst (CvArr) – 出力画像 (引数経由で受け取る場合) この関数は,入力配列の要素毎に範囲チェックを行います。