Article:

忘却という恐怖

去年からAzureKinnectを利用したプロジェクトを多々手掛けているわけですが、これらの画像処理で切っても切れない関係にあるのが「レンズ歪みの補正」です。

今週末は「カメラから取得した画像上の点がリアルな空間ではどの位置にプロットされるのか」を計算するためにこの数式と格闘していました。

で、この計算の途中で「ヤコビ行列」が最初に出てきて、「え!?!?これって何だっけ!!!」とびっくりしたもののこれはまだ序の口、なんなら「あ!商の微分とかあったな!!!」というレベルまで落ち、「今の数学力高校生以下だな…」とかなり凹みました。

だって、高校生のときはそんなの当たり前じゃんってくらい毎日商の微分なんて使っていたわけで、これをこんなにもさっぱり忘れることができるというのは恐怖です。

いくら使わないからとは言え、いくら毎日情報系の新しい情報を学んでるとはいえ、高校レベルの数学を忘れちゃうのはちょっと個人的にあまり納得がいくものではありません。

それはそれとして、例えば線形代数なんかは3DCGをやる上で必須技能ですから、一旦腰を据えて復習したいですね。復習メイトを募集てますと言いたいところではあるのですが、自分でも「え!こんなのも忘れちゃったの!?」っていうのがいっぱいあるので恥ずかしいな…。

成果

でもしっかり格闘したお陰でわかりやすい成果が出ました。こちらです。

AzureKinectで撮影した点群をVR空間で表示できました!がんばった~~~。

これで現実のきぐるみとVRとで一緒に写真撮りたいな~~~。点群ショート動画とかも撮っちゃったり…。

冒頭の数式しかり、Blender用のスクリプトを書いたりUnityのComputeShaderで加工したりと作業ポイントも多いし、それだけ困難ポイントが無数にありましたが、なんとか3連休のうちに成果としてまとまってよかった!!

とはいえ3連休終わってしまった… おかしい… 体感高校生の休み1日分くらいしかなかったな…。

学び

レンズの歪みはラジアル歪みと接線歪みの2つでモデル化できるようです。

ラジアル歪みが掛け算の歪みで、得られたピクセル座標に掛け合わせる形で歪みを加えます。一方接線歪みは足し算の歪みで、得られたピクセル座標に足し算で歪みを加えます。

これ自体は多少複雑とはいえ、手を動かせば計算できます。これで難しいのは、これの逆関数を計算することです。

AzureKinnectのSensorSDKを読み漁ってみると、この補正の変換テーブルをニュートン法で計算しているようでした。

Category:
Tags:

Share: