CMOSカメラのOV7670を使って、RAW画像を取得し、PCで現像してみた。 電源の3.3V化改造を行ったArduino MEGA(1280)にビデオFIFO付きOV7670モジュールをとりつけて画像取得の実験をしている。 製造時期により、若干設計が違う製品がAliexpressでは入り乱れている。 トラ技のOV7670特集より以前に買っていたので、リビジョンが一つ古く、回路図が変更されていることに気づかず結構時間を取られた。 (古いモジュールはFIFOのWRSTが引き出されていて、VSYNCと繋がっていない) 画像データ自体はビデオFIFO(AL422B)によって、カメラ側のクロックを気にせず好きなタイミングで読み出し可能だ。なので、あとはどういった解像度やフォーマットを選ぶかとなる。目的によって様々なサイズやフォーマットを使い分けることになるが、今回はVGAサイズの静止画を撮ることだけを考えてみたい。 ということで、CMOSセンサの出力フォーマットの生の値である、BayerRAWで撮ってみた。 このFIFOつきカメラモジュールでVGA解像度を取得するなら、これが一番簡単だ。 OV7670の主な画像出力形式は次に示すものとなる。 ・YUV : 16bit/pixcek(4:2:2) ビデオ機器の色空間 ・RGB : 16bit/pixcel(565) ビットマップ ・RAW : 8bit/pixcel センサの画素の生出力。 YUVとRGBはOV7670の内蔵DSPがエンコードした色空間フォーマットで、本来1画素1色しか表現できない一般的な撮像素子で、隣接する画素から色情報を補完したもの。 対してRAWは、画素毎のアナログ処理を経た生データ。 受け取った側では、画素上のベイヤーパターン(カラーフィルタの配列)と、縦横解像度の情報を元に色情報を補完(現像)する必要がある。 単純にデータサイズで見れば、RAWで出力するとデータ量は1バイト/Pixcelで済むため半分になり、384kBのFIFO付きモジュールでVGAサイズ1枚の画像を取得することができる。 (YUV、RGBでもウインドウ機能を使って、FIFOの容量に収まるウインドウ...
kent`s prototyping memorandum