OV7670のカラー表示
OV7670から取り込んだデータを、カラー表示させることにしました。
OV7670は、RGB444、RGB565、RGB555、YUV、ベイヤ・・・などいろいろなフォーマットで画像を出力できます。
いろんなフォーマットがありますが、ベイヤパターンで出力させることにしました。
なぜベイヤを選択したかというと、それ以外のフォーマットはみな画像としての情報量が減ってしまうからです。
それにベイヤなら、RGB565やYUVと比べてデータ量は半分で済みますから、転送速度が2倍です。VGAなら毎秒120フレームの画像を取り込めます。(OV7670はそんなフレームレートは出ませんが)
取り込んだ絵は、かなり綺麗になりました。
このCMOSイメージセンサは、感度がよすぎるのか、卓上の蛍光灯を点けると色が白っぽくなって絵が汚くなります。卓上ライトを点けずに、部屋の明るさ程度がちょうどよいようです。
また、このイメージセンサには、AGCやAEB、AECなどをコントロールするレジスタがあるので、それらをコントロールできるようにしてみました。
思う存分、カメラレジスタをいじってみたところ、AEC(自動露出調整)をOFFにして手動で適当なところに調整し、AGCを自動にすると、とても綺麗な絵になるようでした。
しかし、露出時間を長くするというのは、シャッター時間を長くすることなので、動いているものを写すとボケます。露出を短くすると動いているものでもはっきりと映りますが、光量が少なくなるので、それをカバーしようとAGCが働くようで、画像は汚くなります。
露出の設定値は0~65535まで変化させられるようですが、256くらいを境目に、急激に絵の雰囲気が変わります。おそらく露出時間が1フレーム時間を超える境目があって、それ以上の露出を行うと絵は綺麗になるのでしょう。(ただし動いているものはボケる)
そういうわけで、絵を綺麗にしたまま、動いているものもはっきりと撮ることはまだできていません。
残った謎は、私のところにあるこのイメージセンサは、画像の左端が12ドットほど欠けているということです。画像出力開始地点をずらしてみてもこれは解決しませんし、FPGA内蔵ロジアナで見ても確かに黒い画像が出ているので、データキャプチャのミスではありません。
それにしても、カメラって、本当に面白いですね。
今回のサンプルプログラムとFPGAのデザインなど、OV7670で遊ぶために必要な設計データ一式は、近日中に無償で公開します。バグが取れ次第の公開となります。ご期待ください。
■おまけ
カメラのパラメータをいじっているところを動画にしました。
カラーとモノクロを切り替えたり、AEC、AWB、AGCの操作、左右反転や上下反転、カラーバーの表示などを行っています。
最後のシーンは、オンボードの64MBytes SDRAM中に蓄えられた約220枚のVGA画像を、順番に見ているところです。SDRAMの読み出し開始番地をスクロールバーで設定できるようにしているので、パラパラ漫画みたいに切り替わります。
■追記
今回のハードウェアは、特電Spartan-6評価ボードのLX16版を使っています。XC6SLX16でも、まだ30%くらいしか使っていません。
OV7670は、aitendoさんのモジュールを万能基板に乗せて使っています。
モジュールの信号をFPGAボードのI/Oポートに直結しているだけで、非常にシンプルな構成です。
| 固定リンク
コメント