画像処理

CMOSカメラから画像を入力してディスプレイへ出力
(イー エスピー企画が出している画像ベースボード、デジタルCMOSカメラ、208ピンSpartan3E XC3S500+2M高速SRAM基板を使って、カメラで撮影した画像を白黒でディスプレイに出力する回路を作ることにした。CMOSカメラから出てきた YUV422フォーマットの画像データをY成分8ビットのみ抽出して、ディスプレイに表示する)
CMOSカメラから画像を入力してディスプレイへ出力2
(CMOS カメラの確認だが、基板は画像ベースボード(回路図の一部)とXC3S500E-VQ208(208 ピン)+ 2Mバイト高速SRAM 基板とシキノハイテックのCMOSカメラKBCR-M03VG。このCMOSカメラはCMOSイメージセンサにOmniVision社のOV7640を使 用している。タイミングチャートを書いてタイミングを説明)
CMOSカメラから画像を入力してディスプレイへ出力3
(VGAタイミング、トップモジュールのCamDispCntrl_SRAMの全体のブロック図を書いた)
CMOSカメラから画像を入力してディスプレイへ出力4
(SRAMの容量、クロックのブロック図について書いた)
CMOSカメラから画像を入力してディスプレイへ出力5
(CMOS カメラ・ディスプレイ・インターフェース回路(こう呼ぶことにします)のVHDLをいま一生懸命?書いているところです。現在のモジュール構成は、 CamDispCntrl_SRAM.vhd(これがトップです)、DCM_module_24MHz.vhd、synchronizer.vhd、 Camera_Controller.vhd、VGA_Display_Controller.vhd、SRAM_Controller.vhd、そして パッケージとしてdisp_timing_pack.vhdです。)
CMOSカメラから画像を入力してディスプレイへ出力6
(CMOS カメラ・ディスプレイ・インターフェース回路のVHDLソース全体が出来上がったので、ModelSim XE3 Starterで一度コンパイルして文法エラーを訂正することにした。unsigned からstd_logic_vector への方変換の方法)
CMOSカメラから画像を入力してディスプレイへ出力7
(ModelSimの文法エラーチェックが終わったので、ISE11.3でインプリメントをしてみることにした。ERROR:Place:1012 が起こった)
CMOSカメラから画像を入力してディスプレイへ出力8(シミュレーション途中)
(イ ンプリメントしてみたらとりあえず大丈夫そうだったので、シミュレーションをしてみることにした。シミュレーションをするには、CMOSカメラとSRAM の簡単なモデルを作る必要がある。そこで2つのモデルを適当に頑張りながら作った。そしてテストベンチも出来たので、昨日からModelSimでテストし ている。)
CMOSカメラから画像を入力してディスプレイへ出力9(モデルの説明)
(CMOSカメラ・ディスプレイ表示回路もだいぶシミュレーションが進んできた。今日は、モデルがどのように書いてあるかを書こうと思う。)
CMOSカメラから画像を入力してディスプレイへ出力10(シミュレーション1)
(”CMOSカメラから画像を入力してディスプレイへ出力9(モデルの説明)”でモデルのVHDLソースを掲載したが、シミュレーション波形を載せておくことにする。CMOSカメラのVSYNCが1になったすぐ後のHREFが1の時、(スタート時)の波形の説明)
CMOSカメラから画像を入力してディスプレイへ出力11(シミュレーション2)
(CamDispCntrl_SRAM.vhd の内部タイミングを忘れないように書いておく。synchronizer.vhd のソース。CamDispCntrl_SRAM.vhd のソース。35ms シミュレーションして全体を表示)
CMOSカメラから画像を入力してディスプレイへ出力12(実機でテスト、うまくいかない)
(前回でシミュレーションが大体終わったので、ISE11.3でインプリメントして、ボードにコンフィグして確かめてみた。そうしら、みごとにCMOSカメラの映像信号が出ない。いろいろトラブルシュートをしてみたが、とりあえず解決しない)
CMOSカメラから画像を入力してディスプレイへ出力13(もしかしたらRESETはアクティブハイ?)
(CMOSカメラからHREF、VSYNCが出てこないので、RESETをアクティブハイにしてみることにした)
CMOSカメラから画像を入力してディスプレイへ出力14(CMOSカメラの出力が出た!)
(CMOSカメラのRESETはアクティブハイのようなので、CMOSカメラのRESETを0固定にしてみた。そうすると、CMOSカメラから出力が出てきた。うれしかった!でも、まだ、ディスプレイ出力画像がおかしい)
CMOSカメラから画像を入力してディスプレイへ出力15(できた!!!)
(VGAのアドレスカウンタのバグを発見。これを修正後、画像が見えたが、なんかノイジーだ。ちょっと割り切れないところがあるが、一応完成!!!(初めから画像は白黒の予定です))
CMOSカメラから画像を入力してディスプレイへ出力16(VHDLソースを公開)
(”CMOSカメラから画像を入力してディスプレイへ出力15(できた!!!)”でCMOSカメラ・ディスプレイ回路が出来たので、ソースを公開します。)
画像のエッジ検出1
(CMOSカメラからの映像をディスプレイに映すことができたので、今度はそのデータを使って、ハードウェアでエッジの検出をしてみようと思う。)
画像のエッジ検出2(方式の検討)
(CMOSカメラからの画像データからエッジを検出してみようということになったので、方式を検討した。ブロック図あり)
画像のエッジ検出(横方向のみ)1
(”画像のエッジ検出2(方式の検討)”で縦横斜めのエッジを検出する予定だったのですが、思ったより手間取るようなので、shirouさんにコメントで教えていただいた横方向のエッジ検出だけを行ってみることにした。)
CMOSカメラから画像を入力してディスプレイへ出力のVHDLソース修正
(エッジ検出のVHDLソースを作りながら、前のVHDLソースをシミュレーションしていたら、波形が出なくなってしまった。ダウンロードファイルを作り直して再度アップした。ファイル名はCamDispCntrl_SRAMp091101.ZIPとした。)
画像のエッジ検出(横方向のみ)2(実機で試してみた)
(”画像のエッジ検出(横方向のみ)1”で作ったコードをインプリメントして実機で確かめてみた。スレッショルドを変えて確かめてみた)
画像のエッジ検出3(シミュレーション)
(縦横斜めエッジ検出のVHDLソースが出来上がったので、シミュレーションをしてみた)
画像のエッジ検出4(実機でテスト)
(”画像のエッジ検出3(シミュレーション)”でシミュレーションが終了したので、実機で試してみた。うまく行った)
画像のエッジ検出5(2X2の画素の演算でやってみた)
(”画像のエッジ検出4(実機でテスト)”の最後に書いた2X2の画素の演算でやってみた。
-------
| -1| -1|
-------
| -1| 3|
-------
上の演算でやってみるために、VHDLコードを書きなおした。後にうまく行った)
画像のエッジ検出6(3X3での方式の検討)
(3X3の画素の演算でエッジを検出する場合の方式の検討をした)
画像のエッジ検出7(3X3演算のシミュレーション)
(3X3演算のVHDLコードは昨日できたんだけど、もう朝食の時間になってしまったので、シミュレーションができなかった。今日はシミュレーションの結果を書いておこうと思う)
画像のエッジ検出8(3X3の演算(ラプラシアン・フィルタ))
(3X3演算のラプラシアン・フィルタをインプリメントして、ダウンロードして確かめてみた。大体、エッジを表示することができた)
画像のエッジ検出9(汎用の3x3演算)
(ラ プラシアン・フィルタはできたので、SobelフィルタやPrewittフィルタをやってみることにした。その際に、constant 値を変更することで、いろいろなフィルタになるように出来ないかということで、汎用の3x3演算回路を作ってみることにした。ラプラシアン・フィルタは問 題ないが、SobelフィルタやPrewittフィルタは飽和してしまった)
YUV-RGB変換1(方式の検討)
(YUV-RGB変換してカラーにしてみようと思う。YUV-RGB変換式の検討)
YUV-RGB変換2(画像ボードやタイミングの検討)
(方式は決まったので、画像ボードとタイミングの検討をしよう。
画 像ボードは”DWM誌の2007年8月号と2007年10月号の基板でカメラの画像を表示”のボードではSRAMの帯域が足りない。10nsの非同期 SRAMを10nsサイクルで使いたくないので、SRAMだったら倍のデータバス幅が欲しい。そこで、同じESP企画の画像ベースボード (Spartan3E XC3S1200+4M高速SRAM)【CQBB-IMG】とデジタルCMOSカメラ【KBCR-M04VG】の組み合わせで行くことにした)
YUV-RGB変換3(画像ボードやタイミングの再検討)
(” YUV-RGB変換2(画像ボードやタイミングの検討)”でタイミングを検討したが、どうやら、KBCR-M04VG(内蔵CMOS撮像素子、 OV7725)は前のKBCR-M03VG(内蔵CMOS撮像素子、OV7640)と違っているようだ。リセットは逆で0でリセットのようだし、デフォル トではYUYVとデータが出てくるようだ。KBCR-M04VGの全体のフレームのタイミングを下に示す)
YUV-RGB変換4(シミュレーション)
(YUV-RGB回路のコーディングが終了したのでシミュレーションをしてみた。
まずはストラテジーを説明すると、下のタイミングチャートを見るとわかる通りに、SRAMの帯域はYに対してUVは1/2を割り当ててある。つまりSRAMにWriteする部分ではYUV422をそのままWriteする)
YUV-RGB変換5(インプリメントして基板にコンフィグ)
(前 回、シミュレーションが終了したので、インプリメントするためにUCFに2つ目のSRAMのIOパッドを加えてインプリメントした。何回かやって成功し た。次は基板にコンフィグして動作するかどうか確かめる。うまく行けばYUV-RGB変換したあとのカラーの画像が見れるはず。。。だが、見られない。原 因を追求するとCMOSカメラに入ったクロックはPCLKに出てくる時に2倍になっているようだ)
YUV-RGB変換6(やったー、うまく行きました)
25MHz のクロックを半分にして、12.5MHzをCMOSカメラに供給するために、DCM_module_25MHz.vhd のDCM1/2の分周比を2から4に変更した。つまり50MHzの2分周を4分周の12.5MHzに変更した。このクロックをコネクタに出力して、オシロ で見てみた。カラー画像が出ました。やった~!)
YUV-RGB変換7(なんか不具合が。。。)
(前回、カラー画像が出て大丈夫と思ったのだが、エッジの部分が飽和して、真っ白になることが判明した)
SCCBインタフェース回路の実装1(タイミングチャート)
(SCCB (Serial Camera Control Bus) のインターフェース回路を実装することにした。タイミングチャートを書いて検討した)
SCCBインタフェース回路の実装2(ブロック図の作成)
(”SCCBインタフェース回路の実装1(タイミングチャート)”でタイミングチャートを作成した。今度は回路構成を考えてブロック図を書いてみることにした)
SCCBインタフェース回路の実装3(シミュレーション)
(”SCCBインタフェース回路の実装2(ブロック図の作成)”で書いたブロック図を元にVHDLでコーディングをした)
SCCBインタフェース回路の実装4(実機でテスト)
(”SCCBインタフェース回路の実装3(シミュレーション)”でシミュレーションが大丈夫そうだったので、インプリメントして試してみた。SCCBレジスタにうまく書き込めたようだ。やった~!!!)
SCCBインターフェース回路の説明1(SCCB_Reg_Controller.vhd)
(SCCBインターフェース回路が完成した。VHDLソースを全部公開するか、説明を書きながら一部分公開するかで迷ったが、説明を書きながら一部分公開しようと思う。最上位のトップ階層のSCCB_Reg_Controller.vhd を説明する)
SCCBインターフェース回路の説明2(freqdiv.vhd、SCCB_reg_values_ROM.vhd)
(freqdiv.vhd は25MHzから200KHzに分周する回路だ。SCCB_reg_values_ROM.vhd だ)
SCCBインターフェース回路の説明3(One_Transaction_SCCB.vhd)
(今 度はOne_Transaction_SCCB.vhdを説明する。これは、SCCB_Reg_Controller.vhd から渡されたアドレス(SCCB_address)とデータ(SCCB_data)を使って、渡されたアドレスのSCCBレジスタにデータを書き込むモ ジュールだ)
ESP企画の旧パージョンボードでのPCLK処理方法
(ESP 企画の旧パージョンボード(画像ベースボード、デジタルCMOSカメラ、208ピンSpartan3E XC3S500+2M高速SRAM基板)を使って、画像を出力していると、時々下の画像のようにちらちらしておかしくなる。PCLKは下の図のように DCMを通しているが、PCLKを直接クロックとして使用することにしたところ、直った)

 RGB―YCbCr変換の検討1(変換式)
RGBで表されたピクセルをADV7511に表示させるためにはYCbCrに返還する必要がある。その変換回路を実現するためにRGB-YCbCr変換回路を設計することにした。先ずは変換式を検討してみた。
 RGB―YCbCr変換の検討2(Verilog HDLで実装) 
前 回は変換式をVerilog HDLで記述できる形に変換した。今回は、実際にVerilog-HDLでRGB-YCbCr変換を記述した。RGB-YCbCr変換を行う conv_rgb2ycbcr.v 、conv_rgb2ycbcr.v をテストするテストベンチファイルconb_rgb2ycbcr.v を示した。
 RGB―YCbCr変換の検討3(切り捨てと0捨1入) 
RGB―YCbCr変換で最後に値を切り捨てるか、0捨1入するかの違いを検討した。

画像のフレームバッファ
画像のフレームバッファにシングルバッファを使う際の問題点と解決方法
画像のフレームバッファ2(ライフサイクルをシミュレーション)
画像のフレームバッファにトリプルバッファリングを使用した際のライフサイクルについてシミュレーションを行った。

inserted by FC2 system