2011-12-16[n年前へ]
■「”1画素・1フレームのみ”からの動き検出!?」のナゾを解く
画像中の「動き」のようすを「オプティカルフロー」という言葉で表します。そして、「道路をビデオカメラで撮影し、画像中の(各画素の)動き=オプティカルフローから、車の速度を検出する」といったような用途に使われたりします。ちなみに、オプティカルフローを表す方程式は、(そのまんまですが)オプティカルフロー偏微分方程式と呼ばれます。
先日、「画像中の動き=オプティカルフロー」を「単一フレームのみで知ることができる」という技術展示を見て、ん?と首をかしげました。”動き”というのは、時間を経て画像がどう変化(移動)したかということですから、もしも、時間方向に関する何らかの手がかりがなかったとしたら、「動き」というものは知りようがない情報であるからです。
今回展示するシステムは、時間相関イメージセンサを用いることで始めて可能になったもので、1画素、1フレームだけでオプティカルフローを検出できます。フレーム間の移動量の制限はありません。アルゴリズムは数学的に厳密な解を少数回の代数計算だけで生成します。
技術報告パネルに書かれた数式を眺め、動作をイメージしてみて、その疑問を解決する「答」がわかりました。ここで言う「単一フレーム」は、「ある瞬間の画像」を意味する「(いわゆる)フレーム」ではなかったのです。私が首をかしげた技術、「時間相関イメージセンサ(複素正弦波変調撮像)によるオプティカルフロー検出」を(私と同じように)疑問に感じた人もいらっしゃるかもしれませんので、この「単一フレームのヒミツ・トリック」に関するメモを、下に書いておきます。
まず、時間相関イメージセンサ(複素正弦並変調撮像)は、(たとえば1/30秒毎に映像を出力するのであれば)1/30秒の間ずっと各画素への光量を「三角波を掛け合わせた上で」積分し続けます。そのように三角波を掛け続けつつ積分し続けた結果を、1/30秒の後に出力します。これが「1フレーム」です(図中の①「式をイメージしてみる」という部分です)。…勘が鋭い人なら、この時点でもうおわかりでしょうが、この技術報告中での「1フレーム」は「時間を止めた”ある瞬間”の画像」ではない、というところがミソであり、「んっ?」と感じる疑問・謎を解くカギです。
もっと「わかりやすく」するために、三角波を矩形波に変え・1フレーム内の”時々刻々”を”2つ”だけ考えてみることにしましょう。つまり、「本来は1フレーム内で連続的に三角波と画素値を掛け合わせつつ・積分する」という処理を、「1フレーム内の前後2瞬間に矩形波と画素値を掛け合わせて、さらに足す」と単純化してみることにします(図中の②「わかりやすさのために、Sin波を矩形波にしてみる」という部分です)。
すると、話が単純明快に見えてきます。なぜなら、(たとえば)1フレーム内の前半で矩形波の値がマイナス1・後半がプラス1とすると、「1フレーム内の前後2瞬間に矩形波と画素値を掛け合わせて、さらに足す」ということは、「1フレーム内の後半画像から前半画像を引く」という、まさに異なる時間の映像間で「差分画像」を計算する、という処理になっているからです。…それは、まさに普通にオプティカルフローを求める(よくある)手順そのまま、です。
というわけで、「時間相関イメージセンサ(複素正弦波変調撮像)によるオプティカルフロー検出」を「わかりやすく」してみました。
しかし、このカメラの「発想」は意外で面白く感じます。普通のカメラは1フレームの間光を単純に積算し続けていたりするわけですが、このカメラでは単純な積算でなく時間方向に「演算」を行います。他の用途にも色々応用ができそうですね。