実践コンピュータビジョン 3章 画像間の写像

14,407 views

Published on

静岡Developes勉強会 コンピュータビジョンvol3用の資料となります。

Published in: Technology

実践コンピュータビジョン 3章 画像間の写像

  1. 1. 実践コンピュータビジョン 3章 画像間の写像
  2. 2. はじめに  本資料は静岡Developers勉強会「コンピュー タビジョン vol.3」のための資料です。  オライリー社の実践コンピュータビジョン www.oreilly.co.jp/books/9784873116075/ を教科書として使います。
  3. 3. 自己紹介  やじゅ@静岡・・・漢字名は「八寿」 平口 八寿人(https://www.facebook.com/yasuhito.hiraguchi) アラフォーエンジニア、元MSMVP(Visual Basic) 静岡県島田市のSL(大井川鉄道)が走っている所に在住 Twitter:yaju はてなID:Yaju3D http://blogs.wankuma.com/yaju/ http://yaju3d.hatenablog.jp/ (数学と物理を基礎からやり直す)
  4. 4. 開発環境  共通開発環境 python 2.7 (3.x系では本書に沿わないのでNG) 環境変数 Path 「C:¥Python27;C:¥Python27¥Scripts;」を追加  私の開発環境 OS Windows 8.1 IDE pyCharm 3.0.2 (Community Edition FREE) http://www.jetbrains.com/pycharm/download/
  5. 5. 事前準備 その1  サンプルソースコード 実践コンピュータビジョンのWebサイトの関連ファイ ルタブからダウンロードしてください。  画像データ 原著者のサイトから pcv_data.zip をダウンロード してください。
  6. 6. 事前準備 その2  NumPy、Matplotlib、SciPy、 PILインストール(Windows) NumPy、Matplotlib、 SciPyのインストール http://qiita.com/mojaie/items/995661f7467ffdb40331 PIL インストール Python2.7用 http://www.pythonware.com/products/pil/index.htm  easy_installのインストール(Windows) https://pypi.python.org/pypi/setuptools/1.1.5#installing-and-using-setuptools setuptools-1.1.5.tar.gzを解凍し、ez_setup.pyをダブルクリック C:¥Python27¥Scripts内にeasy_install関連のファイルが入る。  pipのインストール(Windows) http://www.lifewithpython.com/2012/11/Python-package-setuptools-pip.html easy_install pip をコマンドプロンプト上で入力する。
  7. 7. 事前準備 その3  サンプルソースコードと画像データを展開 PycharmProjects (私の場合のフォルダ構成) ├─pcv_data (画像データ pca_data.zipを展開) ├─chap1 ├─chap2 ├─chap3 (サンプルソース pcv_j.zipを展開) └─jkfaces2008_small └─aligned
  8. 8. 事前準備 その4 pca_data.zipから、empire.jpg、Univ1.jpg~Univ5.jpgを展開して カレントディレクトリ(chap3)に置きます。 以下の画像を、それぞれFlickrからダウンロードしてください。 http://www.oreilly.co.jp/pub/9784873116075/ billboard_for_rent.jpg 660x1024 21671910_45066ab068_b.jpg blank_billboard.jpg 1024x576 http://p.twipple.jp/qPHQ3 cat.jpg 640x428 560380352_5353d7b089_z.jpg turningtorso1.jpg 2336x3504 8186379972_34bfb45b72_o.jpg sunset_tree.jpg 480x640 344929385_d4dda18574_z.jpg
  9. 9. 基礎知識  アフィン変換  射影変換(ホモグラフィ)  分割アフィンワーピング  データの標準化  データの次元の縮約  回帰分析  主成分分析
  10. 10. アフィン変換 平行移動と線形変換(拡大縮小、剪断、回転)を組み 合わせた変換のこと 線形変換とは変換の前に直線だった場所は、変換後 も直線のまま保たれる変換のこと ※直線が変換によって 曲がったりしない
  11. 11. アフィン変換  行列式 回転行列、拡大縮小行列、平行移動行列 イメージングソリューション 回転行列を理解してみる デモ:http://abicky.net/swf_study/2/
  12. 12. 射影変換(ホモグラフィ) アフィン変換を拡張したもの 射影変換=透視変換=投影変換 射影と投影は projective/projection の訳語
  13. 13. 分割アフィンワーピング アフィン変換では台形には変換できないですが 三角形に分割して組み合わせることで台形に することが出来る ※どんな多角形も 三角形に分割可能
  14. 14. データの標準化 例えば、ネジの長さのデータを分析し比較する際、ミリとインチ のように単位がばらばらだと比較ができない。 標準化することで、単位の違いを無視することができる。 その方法は平均値が0、標準偏差が1になるように正規化する。 参考:標準化した値は、平均値がゼロ、分散(と標準偏差)が1になる
  15. 15. データの次元の縮約 次元と書くと難しい用語のようだが、複数の属性項目のことで ある。何らかの式を用いることでデータを減らすことが出来る。  国語、数学、英語、理科、社会の総合点 ⇒5次元データから1次元データへの縮約  体形評価 : BMI (Body Mass Index) 判定 肥満度の判定方法の1つで、次の式で得られる。 ⇒ 2次元データを1次元データに縮約
  16. 16. 回帰分析 例えば身長と体重のような、相互依存の関係にある2変量があ る場合、一方の数値が与えられたとき、他方の組を予測するこ とができます。 その場合、複数の変数間の関係を一次方程式(y=ax+b)の形で 表現します。回帰式で用いられるのが最小二乗法となります。 点群からSの値を最小にするような 直線 y=ax+b を求めます。
  17. 17. 主成分分析 例えば、「身長」と「体重」という 2つのデータから人間の体つきについて分析したとす る。ばらつきを身長方向や体重方向で考えるのではなく、右図に示したA-BとC-D の方向で考えた場合、 Aの向きは身長・体重がともに大きいことからA-B方向は、 いわば「体格」を示す。 Cの向きは身長が高い割に体重が軽い(やせ型)ことから、直 行するC-D方向は「体型」を示すといえる。 方向からデータの持つ情報を効率的に記述し、理解することができる。 このような軸を見つける分析手法が、主成分分析(PCA)である。
  18. 18. 主成分分析  画像処理への応用 主成分分析には、方向からデータの持つ情報の意味を解析す るデータ分析に使う方法の他に、多次元データのもつ情報を できるだけ損わずに低次元空間に情報を縮約することから、 下記の画像処理の応用などに使われたりします。 ・低解像度画像の補完 ・正しい直線領域の傾き ・画像圧縮(次元の縮約) ・パターン認識
  19. 19. 主成分分析  低解像度画像の補完 低解像度のデジカメ画像のいくつかの周辺色情報から拡大した隙間の部分 の色調を決定して、ギザギザを防ぎ自然な画像にします。  正しい直線領域の傾き (a)回帰分析(最小二乗法)はy軸方向の 誤差が少なくなるように軸が算出されます。 (b)主成分分析はx,y軸方向の誤差が 最小になるように軸が算出されます。 画像の棒に対して赤直線を見ると 主成分分析(b)が正しく直線領域の 傾きを表している。
  20. 20. 主成分分析  画像圧縮(次元の縮約) 画像であれば100×100ピクセルのグレースケールの画像であ れば、10000個のデータを持っています。 10×10のブロックに分けて100次元のベクトルが100個ある、な どと考えて処理します。そして次元を例えば70次元などに落と す事で圧縮することができます。 このような考え方が、K-L(Karhunen-Loeve)展開といって、ベク トルの分布を最も良く近似する部分空間を求める方法です。
  21. 21. 主成分分析 次元の縮約の考え方 下図左の3つの赤い点を確実に通るY軸(下図中央)を考えると、まったくデー タを損なわずに2次元から1次元に落とす事ができます。しかし、下図右のよ うに赤い点から外れた場合には、データは損なわれますが、元の特徴は残 っていると 考えて採用します。参照:KL展開、例4 画像圧縮 考え方としては、画像を圧縮する際、近似色を同色にすると画像サイズをよ り小さくすることができますよね、そんな感じです。
  22. 22. 主成分分析  パターン認識 画像そのものをパターンとして扱った場合には、パターンの次 元が膨大になってしまう。主成分分析によりパターンを情報圧 縮(次元の縮約)し、データ量を減らしてからマッチングを行う。 主成分分析は特徴量(性質を特徴づけるような量)によって、 マッチングを行うため、例えば顔認識で表情の変化があった場 合でも、曖昧さを許容したマッチングが出来る。 参照:主成分分析による顔分析、タコ国未知物体の正体は何か
  23. 23. 第3章の目次  3.1 ホモグラフィ 3.1.1 DLTアルゴリズム 3.1.2 アフィン変換  3.2 画像の変形 3.2.1 画像の中の画像 3.2.2 分割アフィンワーピング 3.2.3 画像の位置合わせ  3.3 パノラマ 3.3.1 RANSAC 3.3.2 ロバストなホモグラフィー推定 3.3.3 画像をつなぎ合わせる
  24. 24. 実行ファイル説明  3.0.crop.tt.py turningtorso1.jpgを切り取る  3.0.ginput_jkfaces.py jkfaces.xmlを作成する。すでにあるので不要  3.0.ginput_tt.py 画像をマウスクリックすると赤十字のマークが付く  3.2.warping.py 画像の変形 empire.jpgを使用  3.2.1.warping.py ビルの看板に猫を貼る  3.2.1.warping_tri.py ビルボードに猫を貼る  3.2.2.delaunay.py ドロネー分割  3.2.2.piecewise.py turningtorso1_points.txtを使って分割アフィンワーピング  3.2.3.imreg.py jkfaces2008_small¥alignedに画像保存  3.2.3.average.py 平均顔の生成と比較  3.2.3.pca.py 主成分分析した9成分の顔  3.3.1.ransac_test.py RANSACの図3-10  3.3.2.sift.py SIFT特徴量を用いて見つけた対応点  3.3.3.ransac_pano.py パノラマ作成 5分くらいかかる
  25. 25. 3.1 ホモグラフィー ホモグラフィーとは、ある平面から別の平面へ写像する2Dの射影変換 自分のブログ「射影変換(ホモグラフィ)について理解してみる」でやってきていたのは、 下図左のように、始点と終点の間には他の点が無いものであった。 しかし、本書では下図右のように始点と終点の間には他の点が複数存在するものである。 本書では、ホモグラフィー行列をH(h1~h9)を求める方法としてDLTアルゴリズム (Direct Linear Transform)を使っています。
  26. 26. 3.1.1 DLTアルゴリズム DLT(Direct Linear Transform:直接線形変換)法は、4つ以上の点の対応を 使ってHを計算するアルゴリズムです。 参照: Direct Linear Transform アルゴリズムを使って、投影変換の行列Hを計算する。 点数の2倍の行を持つ下記の行列式(2nx9)に展開します。 右図のように8つの点に対応した場合、n=8となり2x8 x9の行列となる。 「homography.py」のH_from_point(fp.tp)の下記コメント部分で、点数分を式に展開している。 # 線形法のための行列を作る。対応ごとに2つの行になる。 ちなみに、三次元映像解析でのDLT法は行列式(2nx11)となります。
  27. 27. 3.1.1 DLTアルゴリズム  特異値分解 特異値分解(Singular Value Decomposition:SVD)とは何か? 中学の時に因数分解を習ったと思います。覚えてますか? 数学の世界では数理的なモデル(数式)を見通しを良くするために「分解」し ます。 特異値分解は、「行列」の世界における「分解」なのです。 参照:文系のための「特異値分解」(1)、文系のための「特異値分解」(2)
  28. 28. 3.1.1 DLTアルゴリズム  特異値分解 ある行列を特異値分解すると次のように分解されます。 Uは、「左特異ベクトル」と呼ばれる行列 Dは、「特異値行列」と呼ばれる対角行列 V'は、「右特異ベクトル」と呼ばれる行列 「homography.py」のH_from_points(fp.tp)にある下記部分のソース U,S,V = linalg.svd(A) # 特異値分解 H = V[8].reshape((3,3)) # ホモグラフィパラメータ 最小二乗法の解は、特異値分解した行列の最後の行に求まっています。 その為、V[8]としているのです。参照: ホモグラフィ(特異値分解)
  29. 29. 3.1.1 DLTアルゴリズム  座標指定 H_from_pointsの呼び出し処理 fp = array([[0,120,120,0],[0,0,160,160],[1,1,1,1]]) tp = array([[20,120,120,0],[20,0,160,140],[1,1,1,1]]) H = homography.H_from_points(fp,tp) 左上から反時計回りに([[Y1,Y2,Y3,Y4],[X1,X2,X3,X4],[1,1,1,1]]) と値を指定します。 ※座標指定が(Y,X)の順なのは、行列の行成分がY座標で列成 分がX座標となり行→列の順で表すからでしょうかね。
  30. 30. 3.1.1 DLTアルゴリズム  点の調整 # 点を調整する(数値計算上重要) # 開始点 点群を平均値が0、標準偏差が1になるように正規化する m = mean(fp[:2], axis=1) #平均 maxstd = max(std(fp[:2], axis=1)) + 1e-9 #標準偏差 C1 = diag([1/maxstd, 1/maxstd, 1]) #対角項 C1[0][2] = -m[0]/maxstd C1[1][2] = -m[1]/maxstd fp = dot(C1,fp) #内積 アフィン変換の拡大縮小(sx,sy)と移動(tx,ty)した行列を生成 参照: ホモグラフィ(点の調整)、文系のための「内積」(2)
  31. 31. 3.1.1 DLTアルゴリズム # 対応点 m = mean(tp[:2], axis=1) #平均 maxstd = max(std(fp[:2], axis=1)) + 1e-9 #標準偏差 C2 = diag([1/maxstd, 1/maxstd, 1]) #対角項 C2[0][2] = -m[0]/maxstd C2[1][2] = -m[1]/maxstd tp = dot(C2,tp) #内積 # 線形法のための行列を作る。対応ごとに2つの行になる。 [[ 0.75 1. -1. 0. 0. 0. 0.47729708 0.6363961 -0.6363961 ] [ 0. 0. 0. 0.75 1. -1. 0.6363961 0.84852814 -0.84852814] [-0.75 1. -1. 0. 0. 0. 0.58336309 -0.77781746 0.77781746] [ 0. 0. 0. -0.75 1. -1. -0.84852814 1.13137085 -1.13137085] [-0.75 -1. -1. 0. 0. 0. 0.58336309 0.77781746 0.77781746] [ 0. 0. 0. -0.75 -1. -1. 0.84852814 1.13137085 1.13137085] [ 0.75 -1. -1. 0. 0. 0. 0.68942911 -0.91923882 -0.91923882] [ 0. 0. 0. 0.75 -1. -1. -0.6363961 0.84852814 0.84852814]]
  32. 32. 3.1.1 DLTアルゴリズム #特異値分解 U,S,V = linalg.svd(A) H = V[8].reshape((3,3)) [[ 0.58620495 -0.04611386 -0.05921439] [-0.01117912 0.55336629 -0.05869036] [-0.10869141 -0.05928622 0.57062988]] # 調整を元に戻す H = dot(linalg.inv(C2),dot(H,C1)) [[ 4.29825103e-01 -8.89293317e-02 1.42286931e+01] [ -1.18572442e-01 4.29825103e-01 1.42286931e+01] [ -1.35864257e-03 -7.41077764e-04 7.11434654e-01]] # 正規化して返す H[2,2]を1.0にするため、値を調整する return H / H[2,2] [[ 6.04166667e-01 -1.25000000e-01 2.00000000e+01] [ -1.66666667e-01 6.04166667e-01 2.00000000e+01] [ -1.90972222e-03 -1.04166667e-03 1.00000000e+00]]
  33. 33. 3.1.2 アフィン変換  アフィン変換 アフィン変換には6つの自由度があり、Hを推定するには3組の点の対応が 必要です。これもDLT法を使用して求めています。 「homography.py」のHaffine_from_points(fp.tp) ホモグラフィーで説明したので省きます。 アフィン変換 参照: HTML5 Canvas で学ぶアフィン変換 デモ: http://abicky.net/swf_study/2/ デモ:テクスチャマッピング入門 デモ:テクスチャマッピング入門 射影変換(ホモグラフィ)
  34. 34. 3.2 画像の変形  画像の変形 「3.2.warping.py」を実行する 先にpcv_dataのempire.jpgを入れる H = array([[1.4,0.05,-100],[0.05,1.5,-100],[0,0,1]]) ndimage.affine_transform(im,H[:2,:2],(H[0,2],H[1,2])) 線形変換行列A = H[:2,:2] [1.4 , 0.05] [0.05, 1.5 ] 平行移動ベクトルb = (H[0,2],H[1,2]) (-100, 100) ※ndimage.affine_transformでは線形変換行列と平行移動は分けて指定します。
  35. 35. 3.2.1 画像の中の画像  ビルの看板に猫画像を貼る 「3.2.1.warping.py」を実行する # 点を設定する 左上から反時計回り([[Y1,Y2,Y3,Y4],[X1,X2,X3,X4],[1,1,1,1]]) tp = array([[264,538,540,264],[40,36,605,605],[1,1,1,1]]) #tp = array([[675,826,826,677],[55,52,281,277],[1,1,1,1]])
  36. 36. 3.2.1 画像の中の画像  ビルボードに猫画像を貼る 「3.2.1.warping_tri.py」を実行する http://p.twpl.jp/show/orig/qPHQ3 の画像をblank_billboard.jpgで保存する 左図:1つのアフィン変換 右図:2つの三角形のアフィン変換
  37. 37. 3.2.2 分割アフィンワーピング  ドロネー三角形分割 「3.2.2.delaunay.py」を実行する 1.外部三角形を作り、その頂点の1つを開始点とする(これにより、必ず外側の点から開始されることになる) 2.内部の点を追加し、すべての三角形の外接円を探索し、追加した点を含むような三角分割を削除する 3.今削除した三角分割の外接円の内部にある、新しい点も含めて、グラフを三角分割し直す。 4.追加する点がなくなるまで、ステップ 2 に戻って繰り返す。 詳細な説明は下記サイトを参照 ProcessingでDelaunay分割(解説篇) ドロネー三角形分割 - SlideShare
  38. 38. 3.2.2 分割アフィンワーピング  分割アフィンワーピング 「3.0.crop.tt.py」 で画像を切取り後、「3.2.2.piecewise.py」を 実行する。 turningtorso1_points.txtに座標が格納されている。 「3.0.ginput_tt.py」を実行すると画像が表示され、画像をマウスクリックすると赤十字のマークが付く、30回で turningtorso1_points.txtに保存されるが、変更すると表示が乱れるので今回はそのまま使う
  39. 39. 3.2.3 画像の位置合わせ  主成分分析した9成分の顔 「3.2.3.imreg.py」でjkfaces2008_small¥alignedに画像保存する。 先にpcv_dataのjkfaces.zipをjkfaces2008_smallに展開しておく。 「3.2.3.average.py」で平均顔の生成と比較
  40. 40. 3.2.3 画像の位置合わせ  主成分分析の各成分顔 「3.2.3.pca.py」を実行する 参照:主成分分析の顔分析 位置合わせなし/ありでソースのコメントを切り替える imlist = imtools.get_imlist(‘jkfaces2008_small’) draw.ellipse((90,100,230,286),fill=1) #imlist = imtools.get_imlist(‘jkfaces2008_small/aligned’) #draw.ellipse((40,82,180,268),fill=1) #位置合わせ済み画像用
  41. 41. 3.2.3 画像の位置合わせ  主成分分析の成分について 主成分分析の各成分顔は、複数画像を重ねても変化が少ない順である。 主成分分析ではもっとも大きい固有値に対応する固有ベクトルのことを、第1主成分 と呼び、n番目に大きい固有値に対応する固有ベクトルを第n主成分と呼ぶ。 固有ベクトルは、向きが変わらないけど、大きさは変わった。この倍率を、「固有値」と 呼ぶ。参照:固有ベクトル・固有値 右図のようにベクトルを変換した場合、下記のことが言える。 ・青い矢印(ベクトル(1,1))は向きが変わって いないで長さが2倍になっている。 ・ピンクの矢印(ベクトル(1,-1))は向きが変わって いない。長さも変わっていない(1倍)。 ・それ以外の赤い矢印は、向きが変わっている。 向きが変わらないベクトル(青とピンク)が固有ベクトルである。
  42. 42. 3.3 パノラマ  パノラマの説明 同じ場所から撮影された2つ以上の画像は(つまり、画像のカメラ 位置が同じなら)、ホモグラフィー的に関係づけられます。 スウェーデンのルンド大学の画像(Univ1.jpg ~ Univ5.jpg)
  43. 43. 3.3.1 RANSAC  RANSACの説明 RANSAC(RANdom SAmple Consensus)は、外れ値を含むデータにモデルを 当てはめる反復法です。参照:特徴点の対応づけ「RANSACアルゴリズム」 最小二乗法はデータに「外れ値(outiler)」が含まれていると、その外れ値の影響が大 きくでてしまう弱点がある。特にパノラマ画像での各画像から抽出してきた局所特徴 量は、他の画像に対応点が存在していない「外れ値」が多く含まれているため、単純 な最小二乗法では対応関係が作れません。
  44. 44. 3.3.1 RANSAC  RANSACのアルゴリズム RANSACにより、外れ値に強いレジストレーションを行います。 参照: RANSACを調べてみました 1.総データ個数がU個あるデータから、ランダムでn個のデータを取り出します。 2.取り出したn個のデータから、パラメータを求めます。 (取り出すデータの個数ですが、これは求めるべきパラメータの数に比例するようです) 3.求めたパラメータを、総データ点数から取り出したn個のデータを除いたものに式を当てはめ、 観測されたデータと2.で求めたパラメータの誤差を計算します。 4.誤差が許容範囲内であれば、パラメータに対して投票を行います。 5.1~4を繰り返し、投票数が一番多かったパラメータをひとまず採用します。 (これを仮パラメータとします) 6.仮パラメータを使ってすべてのデータに再度式を適用し、誤差が許容範囲内 のものを抽出します。(この時点で雑音データがほぼ取り除かれます) 7.抽出したデータを元に、再度パラメータを求めます。 8.求まったパラメータがこのデータのもっともらしいパラメータとなります。
  45. 45. 3.3.1 RANSAC  RANSACのテスト 「3.3.1.ransac_test.py」を作成し実行する 毎回結果が違う、数回目に図3-10と同じになる。 中身 import ransac ransac.test()
  46. 46. 3.3.2 ロバストなホモグラフィー推定  SIFT特徴量を用いて見つけた対応点 第2章 画像の局所記述子の応用 「3.3.2.sift.py 」を実行 VLFeat.org(http://www.vlfeat.org/download.html)から VLFeat binary packgeをダウンロードし、sift.exeとvl.dllをchap3に入れる。 pcv_dataからUniv1~5.jpgの画像をchap3に入れる。 2つの画像をSIFT特徴量の線で結んだ4つの画像が作成される。
  47. 47. 3.3.3 画像をつなぎ合わせる  パノラマの作成 「3.3.3.ransac_pano.py」を実行、作成には5分以上かかる。 processed tmp.pgm to Univ1.sift processed tmp.pgm to Univ2.sift processed tmp.pgm to Univ3.sift processed tmp.pgm to Univ4.sift processed tmp.pgm to Univ5.sift warp - right warp - right warp - left warp - left
  48. 48. 3.4 アイドルの平均顔を作成してみよう  アイドルの平均顔データを作成 「3.2.3.imreg.py」と「3.2.3.average.py」を使用 jkfaces.xmlを変更 フォルダ名「idolfaces」を追加 <face file=“20080101.jpg" xf="144" xm="170" xs="205" yf="181" ym="257" ys="184"/> xf,yfが画像の左の目(この人の右目)の座標、xs , ys が右側の目の座標、 xm,ymが口の座標です。各中心座標をセットします。 美しい人類の平均顔まとめ【AKB48の平均顔】
  49. 49. 3.4 演習問題  1. 正方形もしくは長方形の物体(例えば、本やポスター、2次元バーコード)の画 像の座標をとり、正規化された座標系で正面から見た長方形に変形する関数を 作成してください。点は、ginput()やHarrisコーナーの最大のものを使って指定しま す。  2. 図3-1のような変形をするときに、正しい透明度マップを作成する関数を作って ください。  3. 顔の例やエッフェル塔などの有名な被写体を使って、3つの共通な基準点を含 むデータセットを見つけてください。基準点が同じ座標になるように画像の位置合 わせをしてください。平均画像と中央値画像を計算し表示してください。  4. 図3-12のようなエッジを目立たなくするために、パノラマ画像合成で輝度の正 規化を実装し、画像の合成方法を改良してください。  5. 360度のパノラマ画像は、中央の画像に対して左右に広げていくだけでなく、両 端をつなげて円筒状することもできます。図3-12の例を使って試してください。
  50. 50. 3.4 演習問題  6. RANSACを使って、ホモグラフィーに当てはまる集合(インライア)を複 数見つけてください。簡単な方法は、まずRANSACを実行し、ホモグラフィ ー行列と最も当てはまるインライア集合を取得し、対応点からインライア を除去し、もう一度RANSACを実行して大きな集合を取得します。これを 繰り返します。  7. ホモグラフィーのRANSAC推定を、3点対応を用いたアフィン変換を推 定するように改造してください。これを用いて、インライアの数を数えるな どして、2枚の画像が1つの平面を共有するかどうか判別してください。平 面であればアフィン変換に当てはまる点の数が多くなります。  8. Flickrなどの画像集から局所特徴点を対応づけ最小二乗法の剛体レ ジストレーション(回転と平行移動)を使って、パノグラフ( http://en.wikipedia.org/wiki/Panography)を作成してください。
  51. 51. 終了 ご清聴ありがとうございました!

×