ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

Paradigms of Artificial Intelligence Programming のKindle版は買ってはいけない

 LL/ML Advent Calendar 6日目の記事です。

12/6日には完成していましたが、あなたが今記事を見ようとした瞬間に記事が文字になり、にインターネットにデータが送られました。遅延評価素晴らしいです。

以前twitterにはつぶやいたのですが、大事な話なのでまとめてみます。タイトルが全てを語っていますが、 Paradigms of Artificial Intelligence Programming の話です。paradimgs of artificiaL inteLligence prograMming kindLe版、LL/ML見つかりましたね。

Paradigms of Artificial Intelligence Programming とは

通称PAIP、日本語版は何故か実用Common Lispです。Amazonで日本語版のレビューが全くないし、身近な人で日本語版買ったって人も聞かないのですが、売れているのでしょうか。ちょっと心配です。

内容は人工知能の入り口を紹介しながらCommon Lispで実装し、アルゴリズムとCommon Lispの技が勉強できる素晴らしい本です。章ごとに実装するAIが変わっていて、各章とも小さいながらも動くプログラムができて、写経しているだけでもとても楽しい本です。英語はそんなに難しくないです。

技術書としては重い部類に入るので、毎日持ち歩くのが大変です。そこでKindleですね!

Kindle 版 PAIPを買ってみた

早速、今読んでいる所の関数を探してみましょう。あれ、索引にしか見つからないな。しょうがないので、ページをたぐってみると・・・ 

f:id:natsutan:20121211091459p:plain

コードは全て画像ファイルになっていて、検索の対象外orz。

まあ、索引で引っかかるなら、ワンアクション増えるけどそこから飛べばOK。

そこから・・・

f:id:natsutan:20121211091518p:plain

クリックしても飛べないorz

それどころか、元の本にあったページ番号も削除されてる。これで、目的の関数探すの無理だろ。電子書籍になるとページの概念が変わるから、そのまま元の書籍のページ番号が無意味なのはわかる。でも、わかるが納得行かない。

 というわけで、Kindle 版PAIPは買っちゃ駄目です。電子書籍なのに、検索性が紙の書籍以下です。紙の本買いましょう。

 

デジタル写真計測の話

Computer Vision Advent Calendar 2012の11日目という事で、私が仕事で関わっている業界について書いてみました。

デジタル写真計測とは

 デジタル写真計測とは、デジタル画像を使用した測量の事です。あまり聞きなれない言葉ですが、デジタルカメラを利用して対象物の長さを測ったり、それらを元に正確な地図を作成したりするような技術です。身近なところではGoogle Earthがわかりやすい例です。Softcopy Photogrammetryや、digital photogrammetryとも呼ばれます。

 画像を並べてみるとイメージがわくでしょう。digital photogrammetryの画像検索

なぜデジタル写真測量なのか

 デジタル測量に対して従来の測量方法をアナログ測量と呼ぶこともできますが、既存の測量方法がすべてデジタルによる処理におきかわるわけではありません。まだまだ人間の目で確認した方が速く正確なところも存在します。データの撮影自体はデジタルで行われていますが、その後の撮影データの処理は完全にデジタル化されておらず、その処理部分にComputer Visionの技術が使われています。デジタル化のメリットは、データの加工が楽、複雑な計算を自動的に行ってくれる等、いくつもありますが、2000年頃から本格的にデジタル測量の技術が開発されてきました。その背景にはこのような事情があります。

デジタルカメラの性能向上

 画素数が増えたことで、アナログのフィルムに負けない精度が出せるようになりました。また専用のカメラをつかわずとも、民生用の安価なカメラで十分な精度がだせるようになりました。

GPS技術との結合

 GPS(Global Pointing System)とIMU(Inertial Mesurement Unit))が簡単に使用できるようになり、撮影時の場所が簡単に取得できるようになりました。これにより航空写真が非常に扱いやすい物になりました。IMUの方はあまり聞き慣れない言葉ですが、日本語で慣性計測装置と呼ばれ加速度と各速度をリアルタイムに取得できます。IMUから取得されたデータと、速度、高度、移動方向から、飛行機と測定対象物の相対的な位置関係が正確に計算できます。GPSとIMUが組み合わされるまでは、複数の画像(アナログの場合はフィルム)データから、同じと思われる点の組を6〜10点選び出し、画像間の相対的な位置を計算していました。

コンピュータの性能向上

 測量でで使うような大きな画像に対して、従来では計算に時間がかかっていたものがすぐに結果がでるようになりました。理論上はできるが計算時間がかかりすぎるようなアルゴリズムも、コンピュータの性能向上が計算速度の問題を解決しました。合わせてストレージの値段も下がり続けています。OpenCVのようなComputer Visonそのものを扱うライブラリや、Google Ceresのような重要な計算部分のエンジンが公開されていて、さらにデータが扱いやすくなっています。

デジタル測量の欠点

 デジタル測量にもいくつかの問題があります。
 一番の難しさは「認識」という点において、まだまだ自動化が難しいという点です。複数の画像から同じ点を抜き出すだけでなく、画像によっては対応する点が無いという判断はまだまだコンピュータには難しい計算です。処理の結果が妥当な値になっているかの判断も、人間であれば一目でわかる事でも評価関数を定めないといけません。その評価関数も、どの状況に対しても万能に使える物は存在しません。この問題はまだまだ研究段階で、完全に自動化するにはいくつかのブレークスルーが必要です。

 もう一つが法整備の問題です。例えば国内の公式な位置情報はGSPから得た値ではなく、国土交通省が定める基準点(永久標識)を元に行われます。311の大災害では、基準点そのものが移動してしまったため、まず新しい基準点を定めないと復興計画が進まないという問題がありました。この場合、途中の作業はGPSを用いた測量で行われるとしても、最終的には基準点を定める必要がでてきます。また、デジタル測量技術を用いて建設物の調査をした時に、それが国土交通省の定める保守に相当するのかどうかがはっきりと決まっていません。順番としては、目視頼みの点検をデジタル測量に置き換える事が技術的に可能になった時点で、はじめて法改正の動きがでてきます。こちらについては、技術と時間が解決してくれるでしょう。

応用事例

この分野の応用事例については、デジタル写真測量の理論と実践に、いくつかの事例が紹介されています。

というわけで、Computer Visionの応用分野の一つ、デジタル測量技術の紹介でした。

Conic

Multiple View Geometry in Computer Vision Second Edition2章から。
Conicとは面の中で2次式で記述できる曲線を表す。ユークリッド空間では、hyperbola, ellipse, parabola の3種類に分類できる。

Googleで画像検索するのがわかりやすい。
http://www.google.co.jp/search?q=Conic&hl=ja&tbo=d&source=lnms&tbm=isch&sa=X&ei=UN-9UL22C4qWmQXe0YCYDw&ved=0CAcQ_AUoAA&biw=1536&bih=725

Conicの表現方法

非同次座標系の場合
 ax^{2}+ bxy+ cy^{2}+ dx+ ey+ f=0
同次座標系の場合、xをx1/x3、yをx2/x3におきかえる
 ax_{1}^{2}+ bx_{1}x_{2}+ cx_{2}^{2}+dx_{1}x_{3}+ex_{2}x_{3}+fx_{3}^{2}=0


行列表現
 x^{T}Cx=0
 C=\begin{pmatrix} a & \frac{b}{2} & \frac{d}{2} \\ \frac{b}{2} & c & \frac{e}{2} \\ \frac{d}{2} & \frac{e}{2} & f \end{pmatrix}
係数はa〜fの6つだが、定数倍に対して等価なので自由度は5である。

既知の5点からCを求める方法。

係数を並べた行列
 c=(abcdef)^{T}
に対して制約条件を
 (x_{i}^{2}x_{i}y_{i}y_{i}^{2}x_{i}y_{i}1)c=0
とすると、関係式はこのように記述できる。
 \begin{pmatrix} x_{1}^{2} & x_{1}y_{1} & y_{1}^{2} & x_{1} & y_{1} & 1 \\ x_{2}^{2} & x_{2}y_{2} & y_{2}^{2} & x_{2} & y_{2} & 1 \\ _{3}^{2} & x_{3}y_{3} & y_{3}^{2} & x_{3} & y_{3} & 1 \\ x_{4}^{2} & x_{4}y_{4} & y_{4}^{2} & x_{4} & y_{4} & 1 \\ x_{5}^{2} & x_{5}y_{5} & y_{5}^{2} & x_{5} & y_{5} & 1 \end{pmatrix} c=0

あとは、Direct Linear Transform アルゴリズムを使って、投影変換の行列Hを計算すると同じようにDLTアルゴリズムでCとa〜fの係数を求めることができる。

Radical distortion モデル

Multiple View Geometry in Computer Vision Second Edition7章から。

カメラが理想的なピンホールカメラモデルの時と違い、実際の撮影ではレンズによるゆがみが入るときがある。

Radical distortion モデル の定義


この2つの画像の対応式はこのように表現される。
 \begin{pmatrix} x_{d} \\ y_{d} \end{pmatrix} =L(\tilde{r} )\begin{pmatrix} \tilde{x}  \\ \tilde{y} \end{pmatrix}
 \tilde{r} =\sqrt{\tilde{x} ^{2}+\tilde{y} ^{2}}\,

  • チルダ付きのx, y は、線形投射に従う理想的な画像空間上の点を表す
  • Xd, Yd は実際の画像上の点を表す
  • チルダ付きr は中心からの距離を表す。
  • L は distortion factor

Distortion の修正

ピクセル座標は以下の式で変換できる。

 \hat{x} =x_{c}+L(r)(x-x_{c})
 \hat{y} =y_{c}+L(r)(y-y_{c})

ここでXc, Ycはカメラ中心の座標

Distortion 関数の求め方

Distortion 関数Lは、カメラ中心r≧0のみに依存する関数である。
L(0) = 1
とし、テーラー展開を行う。
 L(r)=1+\kappa _{1}r+\kappa _{2}r^{2}+\kappa _{3}r^{3}+

κを求める方法

  • カメラキャリブレーションと同様にグリッドパターンを撮影し誤差を最小にするκの組を求める
  • 実際の直線と画像上のゆがみからκを計算する。

Distortion の確認

実際の画像で distortion の効果を確認するには、GIMPを使い フィルター→レンズ補正 でレンズの補正や、その逆の操作が行えます。

Projective カメラモデル

Multiple View Geometry in Computer Vision Second Edition6章から。

Projective カメラモデルは、x=PXの関係を使って、ワールド座標系の点Xを画像内のxに投影する。Pは投影変換行列なので3x4の行列で表現できる。

最初の3x3

pの最初の3列からなる3x3行列をMとすると、Mが正則行列の時はinfiniteカメラを表し、非正則行列の時はfiniteカメラを表す。

Column vector

 \bold{P\/}=\begin{pmatrix} \bold{p\/}_{1} & \bold{p\/}_{2} & \bold{p\/}_{3} & \bold{p\/}_{4} \end{pmatrix}

としたとき、p1,p2,p3はそれぞれワールド座標系におけるX軸、Y軸、Z軸のvanish pointを表す。
p4はワールド座標系の原点を表す。

Row vector

 \bold{P\/}=\begin{pmatrix} \bold{p\/}^{1T} \\ \bold{p\/}^{2T} \\ \bol{p\/}^{3T} \end{pmatrix}

と表現したとき、P3はPrincipal planeを示し、P1, P2はカメラの原点とimage planeの原点を通る面を示す。

P2、P3がが三角形になるのは、投影される範囲がこの三角形内に限られるからです。

CCD カメラモデル

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センサー

一般的なピンホールカメラモデルの投影行列

CCDセンサーの縦方向と横方向の解像度が違う場合、通常の投影行列ではなく、
縦横の比を表した対角行列(mx, my, 1)と、αx=fmx, αy=fmyを使用してこのように記述できる。
 P=\begin{pmatrix} \alpha _{x} & 0 & 0 & 0 \\ 0 & \alpha _{y} & 0 & 0 \\ 0 & 0 & 1 & 0 \end{pmatrix}
縦横の解像度が違う投影行列の場合、自由度(dof)は一つ増える。

回転角と回転速度

回転は、3次元ベクトルr=[r1,r2,r3]^Tによって、表現することもできる。ベクトルの方向が回転軸を、ベクトルの大きさが回転量を表す。

3次元回転ベクトル

Mを3x3の行列とすると、次の式が成り立つ。

 e^{M}=I+\frac{1}{1!}M+\frac{1}{2!}M^{2}+  ... +\frac{1}{n!}M^{n}

任意の3x1ベクトルrに対して、行列[r]xを以下のように定義する。

 \left[r_{x} \right] = \begin{pmatrix} 0 & -r_{3} & r_{2} \\ r_{3} & 0 & -r_{1} \\ -r_{2} & r_{1} & 0 \end{pmatrix}
さらに
 R=e^{\left[r_{x}\right]
を使用し、さらに
 \overline{r}=\frac{r}{\theta}
を使用すると式はこのようになる。
 R=e^{\left[r_{x}\right]} =I+ \frac{\sin \theta }{\theta }{\left[r_{x}\right]}+ \frac{1-\cos\theta }{\theta ^{2}}{\left[r_{x}\right]^{2}= I+ \sin \theta \left[\overline{r}_{x}\right]+(1-\cos \theta ){\left[\overline{r}_{x}\right]^{2}

θを求める

Rの回転トレースを求めると、そこからθが求まる。
 \theta =\cos ^{-1}\frac{trace(R)-1}{2}

回転軸を求める

r×r=0から
 R\overline{r}=\overline{r}
これは回転軸rに対して、回転Rをかけても元のままであることを意味している。また、この式は固有方程式にもなっている。この解として以下の式を得る。回転角の範囲を非負とすることで、一つだけの解を得る。
 \overline{r}=\frac{a}{||a||}
ただし
 a=\begin{pmatrix} r_{32}-r_{23} \\ r_{13}-r_{31} \\ r_{21}-r_{12} \end{pmatrix}