SIFTを用いたトラッキングにおける精度向上を目的としたDBSCANの使用
- 魚く斎
- 2017年2月7日
- 読了時間: 2分
卒業研究の際にステレオカメラを用いた対象のトラッキングが必要になった。
画像認識の技術の中にSIFTと呼ばれる、画像のある点(特徴点)の勾配情報を定量化し、特徴量とするアルゴリズムがある。アルゴリズムに関しては
http://www.vision.cs.chubu.ac.jp/sift/PDF/sift_tutorial.pdf
に詳細な説明がある。
SIFTを用い、近い特徴量を持つ特徴点同士を結び合わせることで、図1のように画像内の魚の頭の座標を得ることができる。

図1
図1は三枚の画像から成る画像であるが、図1の一番左の画像(図2)はステレオカメラ左から撮影した動画をフレームごとに分けたうちの一枚で、図1の中央の画像(図3)はステレオカメラ右から得たものである。図1の右画像(図4)は教師画像(教師データ?)である。私は撮影フレーム内の魚の頭座標を自動取得したかったので、あらかじめ魚の頭の画像である図4を用意し、撮影フレームである図2、図3を図4と結びつけた。
これによって撮影している魚の頭が、フレーム内の何処にあるかわかるのである。
(細かくいうと図2や図3の撮影フレームは、探索範囲を狭めるために自動で切りとられたものである)

図2

図3

図4
しかし、ここで図1を見るとわかる通り、ステレオカメラ右の撮影フレーム(図3)において、魚のしっぽを頭と結び付けているポイントが出現することが分かった。
これは、SIFTの特性上、特徴点をいくつ考慮するかによって出現する度合が変わってくるのだが、やはりこういった誤認識は避けたい。
出力される各フレームごとの結果を確認するうちに、SIFT特徴点は先ほどのしっぽのような誤認識の点(ここではノイズと呼ぶ)を除いて密に出ることが分かった。つまりこの密な特徴点のみを取り出し、ノイズを捨てることが出来れば、精度を向上することができるのではないかと考えた。
密になっているデータの取得にはDBSCANを用いた。DBSCANはあるデータからの距離εの中にMinpts個あれば密になっているデータを一つのクラスとして結合していくものである。ε中にMinpts個未満のデータしかなければ、ノイズとして検出される。(図5)

図5
これを用いて実装した結果、

以上のようになった。しっぽの誤認識がなくなっているのが分かる。
(線を結び付けていないのはプログラミングの簡易化のため。)
最新記事
すべて表示概要: このpythonコードは、前回実行時の両想いフォローIDと現在の片想いフォローIDを取得&比較し、本題のような処理を可能にするものです。(前回両想いだったのに片想いになってしまったユーザーを取得します) コード内のxxxxxには自身のものを使用してください。...
Pythonのインストール(参考) http://www.habe-lab.org/public_wiki/doku.php/python:install Tweepyのインストール(参考) http://qiita.com/laco0416/items/f2a8928ef...
Comments