2015年01月06日

1080P-60fps表示のためのホストPCノウハウ

あけましておめでとうございます、本年も当ブログをよろしくお願いいたします。

前回の記事で1080P、60fps、RAW10bitの画像をRAW現像IPを通して、フルレート表示することに成功しましたという内容を投稿させていただきました。

今回は、フルレート表示するためのノウハウを記事にさせていただきます。

構成は前回と同様で下図のとおりです。1080P、60fps、RAW10bit、FullHD画像をMIPI出力するイメージセンサーを弊社SVI-MIPIボードと接続し、SVI-MIPIボード内FPGAでMIPIシリアルから32bit幅パラレルに変換し、SVI-06ボードに入力させて、SVI-06ボード内FPGAのFPGAプラグイン機能でRAW現像を行い、FX3でホストPCへ転送し表示します。

20140829-1.png

フルレート表示するためには、やはりPC性能が大変重要です。弊社で最高速のPCのスペックを以下に列挙します。

CPU:Intel Core i7 4770 3.4GHz
メモリー:32GB
GPU:NVIDIA GeForceGTX650
OS:Windows7 64bit
PCタイプ:デスクトップ
メーカー:マウスコンピューターさん
USB3.0チップ:Intel

GPUについては現在もっと高スペックなものもありますが、一応上記スペックでフルレート表示できました。
CPUがクワッドコアで高周波数なものが一番です。他にグラフィックチップを別に搭載している方がCPUの負荷を減らし、表示を高速にできます。後、モニターも高周波数なものがおすすめです。ゲーム用のモニターなどは120Hzに対応していますので追従が素晴らしいです。

ノートPCの場合は、ゲーム用ノートPCがおすすめです。ノートPCゆえCPUが低電圧版でバッテリー長持ちとかありますが、高フレームレート表示のためには通常版でないとスペックがでません。Core i7でも低電圧版ですとスペックは出ないのを確認済みです。
CPUが高性能、GPUが外付けを選んでください。

フルレート保存するためには、高速なSSDが必要です。最近はM.2インターフェースに対応したSSDが販売されていますので、これに対応したSSDであれば最大転送速度が500MB/secを超えますので、かなり余裕があります。

USB3.0は高速なので、ホストPC環境も高速、高性能を必要になってきます。

ということで今回はここまで。次回は2ch構成による2ch表示を記事にしようかと思っていますのでご期待を。
posted by デベマネ at 10:19| Comment(0) | SVシリーズ

2014年08月29日

RAW現像IPで1080P-60fps表示

久し振りの投稿となりました、遊んでいたわけではありません。。。
最近開発ものが多くて手をつけられませんでした。やっぱり景気良くなっているのかな。

ということで、過去の記事でSVI-06の高速版を使用して380MBpsを達成したとかありましたが、その環境に最近開発したRAW現像IPを入れて実験してみました。
結果は記事タイトルのとおり1080P、60fps、RAW10bit、FullHD画像をフレート表示することに成功いたしました〜〜。
フルレート表示ができるということはフルレート保存もできるわけです、ハイッ!

構成は下図のとおりで、1080P、60fps、RAW10bit、FullHD画像をMIPI出力するイメージセンサーを弊社SVI-MIPIボードと接続し、SVI-MIPIボード内FPGAでMIPIシリアルから32bit幅パラレルに変換し、SVI-06ボードに入力させて、SVI-06ボード内FPGAのFPGAプラグイン機能でRAW現像を行い、FX3でホストPCへ転送し表示します。
説明が長くてすみません。。。

20140829-1.png

弊社では、今までPCのソフト(SVIsam)でRAW現像を実現していましたが、これだとソフトでデモザイク処理、ゲイン補正、ガンマ補正を行っているので、画像サイズやフレームレートによっては、フルレート表示ができないことがあります。よほど高速なパソコンを用意してもVGA-30fps位がいっぱいでした。

今回SVI-06のFPGAプラグイン機構を利用して、前処理ブロック部分にRAW現像IPとしてデモザイク処理、ゲイン補正、ガンマ補正を入れました。FPGAリソースとしてロジック部分10%、ブロックRAM部分で30%程度の使用で済んでいます。
入力するRAWデータはベイヤーRGBで色の順番も4種類から選択でき、ゲイン補正、ガンマ補正では、20、30段階の係数変更を行えます。
デモザイク処理は3ライン単位で変換しますで、3ライン分のブロックRAMを使用します。またガンマ補正用テーブルにもブロックRAMを使用しています。このテーブルへの値の代入はソフト起動時にPCより転送してもらっています。

下図はRAW現像IP組込み前処理ブロックの構成図ともう少し詳しい説明です。
前処理ブロックの枠組みでRAW現像IPとして"RAW to RGB Development Block"(RAW現像ブロック)を組み込んでいます。RAW現像ブロックでは、RAWベイヤー配列での1ピクセルを1クロック・サイクル毎に入力し、出力としてパラメータ指定により8bitの色深度でRGBの3色成分を含んだピクセルを1クロック・サイクル毎に出力します。

20140829-2.png

一方、高速版SVI-06では高速画像取込みに対応するため、イメージセンサーからのRAW10でのピクセル入力を32bitデータ幅に2ピクセルを割当てることで、1クロック・サイクルあたり2ピクセルでの転送レートで取込み、フレーム・メモリへ画像データを転送しています。このため、RAW現像ブロックに入力する際に、入力クロックの2倍のクロックを生成し、2[pixel/clock]から1[pixel/clock]に変換する必要があるので、"Pixel Clock x2 and 2pxl/clk to 1pxl/clk Conversion"で変換処理をしています。逆に、RAW現像ブロック後段での出力では、RAW10で2[pixel/clock]での転送レートと合うように、1[pixel/clock]から2[pixel/clock]へ変換し、出力クロック/データ・レートと入力クロック/データ・レートで等しいタイミングで出力されるように、"Pixel Clock /2 and 1pxl/clk to 2pxl/clk Conversion"で変換処理をして、RAW現像処理後の画像を出力しています。上図で示すように出力直前のセレクタにより、RAW現像処理をせずにバイパスして出力することで、RAW10での入力画像データをそのまま取り込んで、ホストPCなどで評価が可能な構成となっています。RAW現像処理後のピクセル・フォーマットとして、RGB565で出力することにより、32bitデータ幅で2[pixel/clock]での転送に適合させています。この構成により、RAW現像処理を行った場合と行わずにバイパスさせた場合とで、画像フレームのサイズ、転送レートは常に等しくなるようにしています。

RAW現像については一般的なアルゴリズムを使用していますが、FullHD-60fpsを実現するためのSVIに合ったいろいろなテクニックを使用しています。他にホワイトバランス、ノイズ除去など絵を奇麗にする手段はありますが、弊社ではある程度の色がついて、お客様である程度の色補正ができてることを目的にしていますので、この程度に留めています。
デジタルカメラ用のISPを作る場合はもっといろいろ処理をいれなきゃいけないので、それは専門の方にお願いしたいと思います。

ということで今回はここまで。次回はホストPC側の処理も記事にしようかと思っていますのでご期待を。
posted by デベマネ at 17:10| Comment(0) | SVシリーズ

2014年06月03日

FPGAプラグイン機能を実際につかってみた〜シンセシス編〜

この開発部ブログにてSVI-06の機能のひとつとして「FPGA動的再配置ってどんなもの?〜FPGAにもプラグイン機能を〜」を紹介しました。SVI-06のFPGAにプラグインのようにお客様の開発した機能を実装することができるものでした。

そこで今回はこのプラグイン機能の実践編として、株式会社シンセシス様に実際に使用していただき、適応的輝度補正IPを実装していただきましたのでその時の感想などを中心に報告します。

簡単にFPGA版プラグイン機能とはどのようなものか説明します。
SVI-06に搭載された機能のひとつで、SVI-06が持つコア機能にプラスしてお客様のロジックを追加・開発ができるFPGA版プラグイン機構を備えています。実際には、FPGA内にある「動的再配置領域」というところにプラグインの機能を実装することができます。


ロジック追加イメージ.jpg


協力をいただきましたシンセシス様は大阪にあり、産学共同研究によるIP開発などを強みとしています。デジタルテレビ関連IPや、マルチメディア系のIPなど多くのIPを開発しています。
今回は、すでにある適応的輝度補正IPをプラグインとして入れ込んでいただいたきましたが、この適応的輝度補正IPには次のような特徴があります。
・人間の目の網膜と皮質のモデル(Retinex理論)にもとづいた、輝度補正アルゴリズムを採用
・ゲート規模換算で5万ゲートくらいのもの
・低遅延でフルHD(1080p 60fps)、4K動画像のリアルタイム処理に対応
・少ない内部メモリで動作(解像度1280×1024で約80Kbit、1920×1080で約120Kbit)

この輝度補正IPを弊社でも実際に使用してみましたが、明るいところはそれほど明るくせずに、暗いところを明るくするという適応的な動作をしていました。たとえば下記の図(シンセシス様のサイトから転載)のように暗いところにあるぬいぐるみが、補正をかけるとよく見えるようになったりします。また、明るさ補正の強さが設定できるので微調整をしながらの補正も可能でした。


適応的輝度補正IPの効果.jpg


シンセシス様にSVI-06のプラグインとして適応的輝度補正IPを組み込んでいただいたのですが、実際に作業をされた方は次のような経験を持っています。
・FPGA開発は10年くらい行っている。
・得意なFPGAはアルテラ社製。ただし、ザイリンクス社製のFPGAも使用する(SVI-06のFPGAはザイリンクス社製です。)
・SVI-06のプラグインを作ることは今回が初めて

SVI-06のプラグインとして、適応的輝度補正IPを入れ込んでいただきましたが、「FPGA版プラグイン機能としてすんなり入れることができた」との感想をいただきました。その時の具体的な作業工程としては下記のものです。

・作業時間は3〜4日程度(1週間はかかっていない)
△FPGAプラグイン環境の理解(サンプルのコンパイル〜動作):1日
△カメラの設定:0.5日
△適応的輝度補正IPの入れ込み:1.5〜2.5日

とのことで、それほどつまずくこともなく、説明のドキュメントを中心に作業をしていただけました。FPGA開発の中級者以上であれば作業を行っていただけると思います。また、組み込んでいただいたものは、ビックサイトで行われた組込みシステム開発技術展(ESEC)にて展示を行っています。


ESEC展示の様子.jpg


展示会でもいろいろな方に見ていただきましたが、適応的輝度補正IPをかけていても遅延が気になることはありませんでした。また、見ていただいた方からも遅延を気にするコメントはなく、「確かに違和感なく明るさ補正されていますね」といった評価をいただきました。

最後に、今回実際に作業していただいて次のようなコメントをいただくことができましたので紹介します。

「評価ボードを購入して、このような作業を行うとすると、まず初めにI2Cなどのインターフェイスを作りこむ必要がありますが、SVI-06は必要なインターフェイスがすでにそろっているので簡単に適応的輝度補正IPを組み込むことができました。」

FPGA版プラグイン機能を活用していただければ、カメラからの映像に対してアルゴリズムを作りこむ場合の評価ボードとしても活用していただけると考えています。
ぜひ、興味ありましたらお気軽に弊社までお問い合わせください。
posted by デベマネ at 18:08| Comment(0) | SVシリーズ