Ryuz's tech blog

FPGAなどの技術ブログ

ハイサンプリングレートのススメ

はじめに

当サイトはリアルタイムコンピューティングの為に、ハイフレームレート撮影などサンプリングレートを高めることでリアルタイム性を上げることをことあるごとに推奨しています。

それはどういうことかというのを少し説明したいと思います。

高速度撮影すると画質が落ちるという誤解

高速度撮影すると画質が落ちると思われがちです。

イメージセンサには光ショットノイズや暗電流ノイズなど様々なノイズが入り込みます。 ノイズはランダムですので、N倍の時間露光すれば S/N は √N 倍改善するのはその通りです。 逆に露光時間の短い高速度撮影ではノイズは大きくなります。

しかしながら、フレーム間の露光できない継ぎ目の時間を無視すれば、N枚の画像を単純に足し算すれば、S/N はN倍の時間露光したのと同じになり、しかもダイナミックレンジがN倍になるというメリットまで得られます。

そして、何より、リアルタイムコンピューティング的に次の図のようなことが成り立ちます。

高速度撮影の効果

10ms の露光撮影では、10ms 後の結果が得られるまで何もできません。

一方で、2ms 露光 の高速度撮影では、S/Nは悪く、認識精度は下がるものの 2ms から情報が得られ始め、10ms 後には 10ms 露光と同じ精度が得られます。

ロボットの制御などを考えてもらうとわかりやすいと思いますが、精度は悪くとも、その時点で最も尤もらしい方向に向かって予備動作を始めておけば、10ms のあいだ口を開けて待ってるだけの状態よりよい結果が得られる可能性が出てきます。

「露光と露光の間の不感時間は問題にならないのか?」というのも時々聞かれるのですが、「用途による」としか答えられない部分があります。一方で、あんまり気にならないケースが意外に多いと思っています。というか、撮影中の動きブラーや、ローリングシャッター歪みのような露光中に撮影対象が動くことで起こる課題に対して、長時間ロコ脳のまま挑む方が課題が多い気もしています。

映像出力の場合はどうなのか

筆者はOLEDディスプレイの高速駆動などを公開していますが、OLED に限らず、プラズマディスプレイ、プロジェクタ、天井のLED照明、など PWM 制御で人間に明暗を見せている機器は沢山あります。このブログの読者の皆様もLEDチカチカの延長で LED の輝度を変えたことがある人も多いのではないでしょうか?

これも人間の感度よりも高いサンプリングレートを利用している例です。

PWMを使った照度制御

同じ原理で S/N の悪い高サンプリングレートの画像の撮影を、S/N の悪いまま高いサンプリングレートで表示すると人間の目には長時間露光の映像と同じように見えて、かつ、遅延だけが減少するという事が起こります。例えば遠隔操縦などする場合、遅延は大敵ですのでこれだけでも高い効果が得られます。

そしてここにAIなどの認識を加える場合も同様で、仮に認識精度が悪く、本当は 50% の照度で表示すべきところ、誤った認識結果で 80% の照度で表示してしまったとしても、次のフレームの認識で誤りを正して 20% の輝度まで下げれば、人間には 50% の照度に見えてしまうのです。

ハイサンプリングレートで、早く認識する ということは、案外リカバリが効く為、ローサンプリングレートで 高精度だが遅い 認識より、時にロバストに機能します。後者は高精度ではあれ誤認識すると取り返しがつきにくいのです。

データ帯域が増える?

これは解像度そのままにフレームレートを上げればそうなのですが、そもそも動いているものを対象にする場合、動きブラーでボケボケの画像を高解像度で撮影するよりも、データ帯域そのままに解像度を下げてその分フレームレートに振る方が良いケースもあります。

画像サイズを縦横1/4にしても、サンプリングレートを上げて精度を上げることで 1/4 ピクセル精度まで計算できれば、縦横分で 16倍フレームレートを上げることができます。

計算量が増える?

これも必ずしもそうではありません。例えばこのスレッドで書いた話があります。

そもそも、1枚の画像の中で頑張るという発想ではなく、新しい情報が入ってくる度に情報をよりもっともらしいものにアップデートするという考え方のリアルタイムコンピューティングでは、アルゴリズムのオーダー自体がごっそり変わることも珍しくありません。

ここに頭を捻る価値がありますし、計算機アーキテクチャとセットでアルゴリズムを考える意義が出てきます。

おわりに

今回もリアルタイムコンピューティングのススメでした。

世の中のサンプリングレートは、人間の感度など、物理世界のダイナミクスに対して必要十分なところに設定されがちです。 一方で例えば 1bitΔΣ変調 のような、ダイナミクスより十分高いサンプリングレート を前提として、不連続なアルゴリズム進化を遂げる例もあります。

このような条件を加えていくと、画像処理アルゴリズムももっともっと考える余地や研究領域が増えてきて面白くなります。

そしてこのような世界でアルゴリズム探求をできるようにしてくれるのが FPGA という楽しいプロセッサなのです。 FPGAプログラマが少ない分、逆にこの分野はブルーオーシャンですので、 レッドオーシャンと化しているGPUでのAI分野で疲弊している方、RTL プログラミングを勉強する価値はこんなところにもありますよ。と、また無理やりFPGA推しして〆ておきます。