cv
http://www.amazon.co.jp/dp/4864723338理系の大学院生がちょっとしたトラブルを解決するお話です。ミステリーなのであまり詳しくはかけないですが、理系の人だと結構ありそうなネタがふんだんにあります。作者がComputer Visionの研究をしているだけあって…
写真から作る3次元CG 3.5から 直交行列 行列Mが を満たすとき、Mは直交行列である。 回転行列Rも を満たすので直交行列である。 確認作業 回転行列が直交行列であることを、手を動かして確認してみる。任意の回転は、3つの軸に対する回転の合成で表すことが…
コンピュータビジョンの勉強をしていると、ふとprojectiveは投影なのか射影なのか自分でも良くわからなくなることがありました。ふと見たコンピュータビジョンの訳者まえがきに、この本での使い分けが書いてありました。自分へのメモとして残しておきます。 …
半年以上かかりましたが、Multiple View Geometry in Computer Visionを当初予定していた14章まで読みました。本の雰囲気などは、こちらの方にも書いてあります。http://natu.txt-nifty.com/natsutan/2012/12/multiple-view-g.html 本の内容 この本の内容を…
Computer Vision Advent Calendar 2012の11日目という事で、私が仕事で関わっている業界について書いてみました。 デジタル写真計測とは デジタル写真計測とは、デジタル画像を使用した測量の事です。あまり聞きなれない言葉ですが、デジタルカメラを利用し…
Multiple View Geometry in Computer Vision Second Edition2章から。 Conicとは面の中で2次式で記述できる曲線を表す。ユークリッド空間では、hyperbola, ellipse, parabola の3種類に分類できる。Googleで画像検索するのがわかりやすい。 http://www.googl…
Multiple View Geometry in Computer Vision Second Edition7章から。カメラが理想的なピンホールカメラモデルの時と違い、実際の撮影ではレンズによるゆがみが入るときがある。 Radical distortion モデル の定義 この2つの画像の対応式はこのように表現さ…
Multiple View Geometry in Computer Vision Second Edition6章から。Projective カメラモデルは、x=PXの関係を使って、ワールド座標系の点Xを画像内のxに投影する。Pは投影変換行列なので3x4の行列で表現できる。 最初の3x3 pの最初の3列からなる3x3行列をM…
Multiple View Geometry in Computer Vision Second Edition6章から。ピンホールカメラモデル http://d.hatena.ne.jp/natsutan/20120915/1347690881 投射行列 http://d.hatena.ne.jp/natsutan/20120916/1347780396 の続きです。 CCDセンサー 一般的なピンホ…
回転は、3次元ベクトルr=[r1,r2,r3]^Tによって、表現することもできる。ベクトルの方向が回転軸を、ベクトルの大きさが回転量を表す。 3次元回転ベクトル Mを3x3の行列とすると、次の式が成り立つ。任意の3x1ベクトルrに対して、行列[r]xを以下のように定義…
Z軸まわりの回転φ(ロール)、新しいY軸まわりの回転θ(ピッチ)、新しいX軸まわりの回転ψ(ヨー)の3段階の回転で実現できる。写真から作る3次元CGでは、最後の回転がZになっています。これだとオイラー角と同じなので、最後はXが正しい。
写真から作る3次元CGから任意の回転運動は、Z軸まわりの回転α、新しいY軸まわりの回転β、新しいZ軸まわりの回転γの3段階の回転で実現できる。 このα、β、γをオイラー角といい、回転行列Rは次のように表される。回転のオイラー角による表現は唯一では無いが、…
Multiple View Geometry in Computer Vision Second Edition4章から。 直接線形方程式を解くDLTアルゴリズムに比べた、イテレーティブに最小値を求める方法の特徴。 遅い イテレーションをはじめる前に初期値が必要 収束しない可能性と、最小値でなくローカ…
Multiple View Geometry in Computer Vision Second Edition4章から。 対応する4つの点を使って、投影変換を表す行列Hの計算します。Direct Linear Transform (DLT) とたいそうな名前がついていますが、点同士の制約から最小二乗法を用いて行列を求めるアル…
投影変換Hを求めるのに必要な条件の続き。 つまり4つの点の対応が分かれば、投影変換を表す行列Hは計算できます。 この図のような変換を使って実験してみます。(変換は青→黄) 座標の対応はこのようになります。 xi x'i (5,5) (20,15) (15,5) (25,20) (15,1…
Multiple View Geometry in Computer Vision Second Edition4章から 投影変換Hは3x3の行列だが、定数倍に関して等価なので、自由度(dof)は8 点 xi -> x'iへの対応一つにつき、2次元空間で(x, y) -> (x', y')の対応が取れるので、制約が2つつく 最低限4点の対…
写真から作る3次元CGの2章練習問題。 問題1 D^-1を求めよ。D^-1はDの逆運動である。答 Dは剛体変換(rigid transformation)で、回転行列Rと並進行列tを使って以下のように表現できる。Dの定義は投射行列、もしくは2次元変換の階層のClass I Isometries transf…
写真から作る3次元CGから。 中心投影の近似の方法 弱中心投影(weak perspective projection) 疑似中心投影(paraperspective projectionb) 平行投影(orthographic projection)は、弱中心投影の特殊なケース アフィン変換は、これらの線形化射影の一般化したも…
写真から作る3次元CGから。 カメラモデル カメラモデルを考える時の問題点 光学軸がどこにあるか不明 画像の両座標軸のスケールが異なる可能性がある 実際の画像の両座標軸は必ずしも直角をなさない 座標系(c,x,y)とデジタル画像座標系(o,u,v)を考える。 x軸…
写真から作る3次元CGから。 投射行列 この式は、同次座標を用いて以下の行列で表せる。 ≃はスケールを除いて等しいことを示す。この時の のPを中心投影行列と呼ぶ。 三次元空間上の座標M=(X Y Z 1)^Tと、仮想画像平面上の座標m=(x y 1)^Tの関係は、m = PM で…
ピンボールカメラモデル 測定対象物Mは、焦点面Fのレンズ中心Cを通って、画像平面I上のmに投影される。焦点面Fと画像平面の距離をfとする。 焦点面があるXYZをカメラ座標系と呼ぶ。画像平面上の座標(x,y)と3次元座標系の座標(X,Y)との関係は、以下の関係が成…
写真から作る3次元CG Computer Visionの本は行列式ばかりでてくるような本か、ライブラリの使い方が中心の本しか無く、アルゴリズムが分かるちょうど良い本を探していたらこの本を見つけました。ちょうど良い難易度なので、ゆっくり読んでいきます。1章から…
Multiple View Geometry in Computer Vision 2.4から。2次元の画像変換における階層構造のまとめ。座標は全て同次座標(homogeneous coordinate)。 Class I Isometries transformations 対象物の移動、再配置。 行列表現 ベクトル表現 特徴 εは±1の値を取る。…
Sobelフィルターは簡単に輪郭を抽出できますが、フィルターの効果が画像の解像度に依存するという欠点があります。その欠点を解消したのが derivative Gaussian フィルターです。Sobelフィルターの代わりに、Gaussian フィルターの一次微分を使います。ガウ…
Gauche-CVでSobelフィルターを使う方法です。簡単に輪郭の検出ができます。 PythonでSobelフィルター Pythonでは、filter.sobelで簡単にフィルターをかけられます。 # -*- coding: utf-8 -*- # Sobelフィルター __author__ = 'Natsutani' from PIL import Im…
Gauche-CVで簡単な行列計算をする方法です。当たり前ですがnumpyと同じ結果になります。 Python numpy で行列計算 Pythonではnumpyを使えば、簡単に行列の計算ができます。 # -*- coding: utf-8 -*- __author__ = 'Natsutani' import numpy as np a = np.arr…
Gauche-CVを使って画像にぼかしをいれる方法です。 元ネタはProgramming Computer Vision With Pythonから。 Gauche-CVはaharisuのごみ箱で公開されています。 Python PILでガウシアンフィルター scipy の filters.gaussian_filter を使って、色空間毎にフィ…
Gauche-CLを使って画像に円や線を書く方法です。 元ネタはProgramming Computer Vision With Pythonから。 Gauche-CVはaharisuのごみ箱で公開されています。 Python PIL, pylab で画像に描画する pylabと合わせれば、簡単にプロットできます。 # -*- coding:…
Gauche-CLを使って画像の一部をコピーアンドペーストする方法です。 元ネタはProgramming Computer Vision With Pythonから。 Gauche-CVはaharisuのごみ箱で公開されています。 Python PIL でコピーアンドペースト 画像の真ん中で切り取るとちょうど首の所が…
Gauche-CLを使って画像のサムネイルを作る方法です。元ネタはProgramming Computer Vision With Pythonから。 Gauche-CVはaharisuのごみ箱で公開されています。 Python PILでサムネイルを作る thumbnail()を使います。画像を小さくするアルゴリズムを変更す…