28
2013/11/16 1 OpenCV4Androidで画像処理アプリのススメ 今度はちょっとアカデミックに~

続Open cv4android

Embed Size (px)

Citation preview

Page 1: 続Open cv4android

2013/11/16 1

続OpenCV4Androidで画像処理アプリのススメ

~今度はちょっとアカデミックに~

Page 2: 続Open cv4android

2013/11/16 2

自己紹介• 名前:大槻 正樹

• TwitterID:@nekomeshi312 こんなアイコンです→

• 仕事:某メーカ研究部門所属

・・・毎日製品にならないような変な物作って遊んでいます。

・・・仕事はAndroidとは特に関係のないSunday Programmerです。

・・・こんなアプリ作ってます

Page 3: 続Open cv4android

2013/11/16 3

OpenCVって?

Page 4: 続Open cv4android

2013/11/16 4

OpenCVって?

• OpenCV ・・・ Open Source Computer Visionの略

画像認識に関する500以上の画像処理のライブラリ

• Linux、Windows、Android、iOS等をサポート

• 元はC言語 ・・今ではC++, Java, Pythonなどもサポート

• BSDライセンス

• 2013/11/16 現在のバージョン– 2.4.7

企業や大学での研究でも広く使われている画像処理ライブラリ

今でも新しく開発された画像処理アルゴリズムが頻繁に追加&VerUpされている。

Page 5: 続Open cv4android

2013/11/16 5

どんなことができる?

領域分割

機械学習 /画像認識

物体追跡

3次元復元

などなど・・・・

画像変換

特徴点検出

Page 6: 続Open cv4android

2013/11/16 6

という話を前回やりました

Page 7: 続Open cv4android

2013/11/16 7

前回はこんなこと話しました

• カメラ入力の色変換– 行数にしてたった13行

• オブジェクト認識– 約100行– 大事な点は三箇所のみ

Page 8: 続Open cv4android

2013/11/16 8

前回の資料はこちら

• http://slidesha.re/1dSP1kJ• OpenCVの歴史や導入方法についても説明しています

Page 9: 続Open cv4android

2013/11/16 9

あらかじめお断り

今回はまえがきが異常に長いです。

ご辛抱くださいませ

Page 10: 続Open cv4android

2013/11/16 10

コンピュータビジョンって?

• ンピュータビジョン(computer vision)は大雑把に言って、「ロボットの目」を作る研究分野である。

• この分野はコンピュータが実世界の情報を取得する全ての過程を扱うため、画像センシングのためのハードウェアから情報を認識するための人工知能的理論まで幅広く研究されている。また、近年ではコンピュータグラフィックスとコンピュータ・ビジョンの融合が注目を集めている。 wikipedia

Page 11: 続Open cv4android

2013/11/16 11

たとえば身近なところでは・・・

顔認識とか

人検出とか

三次元ステレオ計測とか

Page 12: 続Open cv4android

2013/11/16 12

International Conference●世界中の研究者・開発者が自分の開発した画像処理を発表してドヤ顔する場

●当然審査があるので全員が発表できるわけではない

大体平均20~30%。難しいセッションだと 2~3%というところもある。

ComputerVision & Pattern Recognition(CVPR) 2013/6 Portland

International Conference on Computer Vision(ICCV) 2013/12 Sydney

Special Interest Group on Computer GRAPHics(SIGGRAPH) 2013/8 LA

International Symposium on Mixed and Augmented Reality (ISMAR)2013/10 Adelaide

European Conference on Computer Vision (ECCV) 2012/10 Firenze

Asian Conference on Computer Vision(ACCV) 2012/11 Daejeon

Page 13: 続Open cv4android

2013/11/16 13

雰囲気はこんな感じ

注:これは2012年のCVPRの様子です。出典 http://www.slideshare.net/ttamaki/20120629prmu-cvpr2012

Page 14: 続Open cv4android

2013/11/16 14

モバイル機器を使ったWorkshopもありますWorkshop:特定のジャンルに絞って研究発表する会

Page 15: 続Open cv4android

2013/11/16 15

International Workshop on Mobile Vision• Poorな端末でいかに実用的な速度で動かすか、というところがメイン

例えば・・・

ステレオカメラをつけたスマホで周りの形とカメラの位置を計りつつ、リアルタイムでCGを重ねて表示する、とか

ゴツく見えるけどCortex A9 800MHz Dual Coreに

Android2.4.3で動かしている。

Page 16: 続Open cv4android

2013/11/16 16

International Workshop on Mobile Vision• 中には「なんでこんなのがいまさら発表できるの?」というのもあったりし

ます。

例えば・・・

スマホのカメラに望遠鏡を付けて拡大表示。

当然ぶれて見づらいので電子手ぶれ補正。

やっていることは20年前のビデオカメラと同じ・・・

ちなみに発表はHarvard大の人。(Medical Schoolだけど・・)

実際の処理もとても簡単だったので・・・・・

Page 17: 続Open cv4android

2013/11/16 17

作ってみました

入手はこちら:https://play.google.com/store/apps/details?id=com.nekomeshi312.stabcam

● ブレずに拡大

Page 18: 続Open cv4android

2013/11/16 18

基本原理

• Optical Flowオプティカルフローとは、視覚表現(通常、時間的に連続するデジタル画像)

の中で物体の動きをベクトルで表したものである。 wikipedia(?_?)こんなのです。

連続した2枚の画像から、画像に写った物体がどこに移動したかを計算するテクニック

画像が動いた分逆に動かしてやれば手ブレが補正できる。

Page 19: 続Open cv4android

2013/11/16 19

LK法(Lucas Kanade法)• LucasKanade法は1981年にLucas氏と金出氏によって発表された、物体

のエッジや模様などの特徴的な点を抽出し物体を追跡する基本的なアルゴリズム

http://www.youtube.com/watch?v=ysGM3CfBVpU

Page 20: 続Open cv4android

2013/11/16 20

LK法(Lucas Kanade法)

http://en.wikipedia.org/wiki/Lucas%E2%80%93Kanade_Optical_Flow_Method

t-1フレーム目 tフレーム目

(Vx, Vy)

X方向の画素差分

Y方向の画素差分 時間方向の画素差分周囲の画素で足し算

? ?ナンノコッチャ

求めたいOptical Flow

Page 21: 続Open cv4android

2013/11/16 21

LK法(Lucas Kanade法)間違いを恐れず超単純化して説明すると・・・・

(x, y)

位置xでの画素値 位置x+1での画素値

こんな輝度勾配が続いていると仮定

もし1フレーム前の画素値がこれだったら

ここから移動してきたってことでしょ

1画素で計算しても正しい答えは出ないので、周囲の画素を使って最小二乗法で解きます。

x

輝度

Page 22: 続Open cv4android

2013/11/16 22

とはいうものの

原理がわかったところで

一から自分でコーディングするのは大変・・・・・

Page 23: 続Open cv4android

2013/11/16 23

でもOpenCVを使うと

この1行でやってくれます。ヽ(=´▽`=)ノ

cv::calcOpticalFlowPyrLK();

これを言いたいがために長々と説明しました (f^^)

Page 24: 続Open cv4android

2013/11/16 24

実際の処理

if(prevPoints.size() > FEATURE_RECALC_NUMBER){cv::calcOpticalFlowPyrLK(引数いろいろ);//画像を移動させる処理

}else{

std::vector<cv::KeyPoint> prevKeypoints;cv::GoodFeaturesToTrackDetector detector(引数いろいろ);detector.detect(gGrayCur, prevKeypoints);//色々初期化

} (1)フロー計算に適した特徴点を見つけます。

(2)特徴点が十分たくさんある場合は・・(3)オプティカルフローを計

算します

このテクニックを Lucas Kanade Tomasi トラッカ と言います

カメラでキャプチャするたびに呼ばれます

Page 25: 続Open cv4android

2013/11/16 25

で、結果がこれ

入手はこちら:https://play.google.com/store/apps/details?id=com.nekomeshi312.stabcam

● ブレずに拡大

大事なことなので2度出しました。

Page 26: 続Open cv4android

2013/11/16 26

まとめ

• OpenCV4Android と言うよりは OpenCVについてちょっとアカデミックに紹介してみました。

• 正直、中のアルゴリズム知らなくても、APIだけ知っていれば結構なことができます。– 当然アルゴリズム知っている方が、使いこなしがうまくなります

• なんか画像処理やってみたいんだけど難しいことわからない、という方は、試しに使ってみるといいかもしれません。

• 参考資料や参考図書などは、前回の資料を参照してください。– http://slidesha.re/1dSP1kJ

Page 27: 続Open cv4android

2013/11/16 27

ソースコードはこちらから

https://github.com/Nekomeshi/StabCam.git

NDKを使っていますが、多分Javaで書いてもそんなに速度変わらないと思います。

Page 28: 続Open cv4android

2013/11/16 28

FIN