mengineer's blog

ニッチなネタばかりですが。

CameraLink RGB10bitの謎に挑む

最近、本業やら何やら忙しくて、久しぶりの更新です。

何やら大げさなタイトルですが、CameraLinkの画像データの取扱いで、
RGB10bit(計30bit)の場合の内訳が判らずに苦労した、というお話。

今回、初めてAVALDATAという会社のボードを使いました。 www.avaldata.co.jp

APX-3323というCameraLinkボードです。
http://www.avaldata.co.jp/products/z2_imaging/apx3323/apx3323.html

SDKは"SDK-Acaplib2" というやつで、下記よりダウンロード可能。
http://www.avaldata.co.jp/download/download/dlmrc.php?shurui=software#image

RGB 10bit用の設定ファイルを作る

Acaplib2をインストールすると、インストールフォルダ下位の"IniFile"フォルダ内に
各カメラメーカー毎に設定ファイル(iniファイル)もインストールされます。

今回使いたいカメラのファイルも有ったのですが、RGB8bit用だったので、
それを10bit用に変更します、下記の”AIPTool”を使用しました。

【画像製品】アバールデータ製品ボード評価ツール

”Camera Data"で、カメラの出力bit数を変更します。

f:id:mengineer:20160625222258p:plain

ここが元のRGB8bit用では24だったので、30(RGB10bit)に変更します、
すると”Capture Data”の項目も、自動的に24→32に更新されます。

CaptureDataはボードから出力されるデータのbit数で、Camera Dataを変更すると、
それに合わせて最適な出力bit数を、Toolの方で設定してくれるようです。

ちなみに”shift”はデータの右シフト量(bit数)で、例えば2に設定した場合、
RGB各10bitの上位8bit分だけを出力する(CaptureDataも24のままで済む)
と言った芸当が出来るようですが、今回は使用しないので0のままにしました。

RGBのデータ並びはどうなっている?

カメラ出力24bit(RGB8bit)は、ボード出力もそのまま24bitで簡単なのですが、
カメラ出力30bit(RGB10bit)は、ボード出力が32bitとなります。

この32bitに、どうRGB各10bitが割り振られて出力されるのか?で悩みました、
ボードやSDKのマニュアルなど調べたけど載っていない、うーん困った。
(私が調べ切れていないだけで、どこかに情報有ったのかもしれませんが)

結局、カメラをテストパターン出力状態にして、内作ソフトのBuffer内を
デバッガで確認したところ、どうやら下記の並びになっているようです。

f:id:mengineer:20160625233647p:plain

右詰めで下位からBGRの順番に各10bitずつ(最上位の2bitは未使用)
ということで、無事にRGB各データを取り込むことが出来ました。

別のボードメーカーでは、こういうパターンも有るようです。
f:id:mengineer:20160625235509p:plain

RGBの並び順が違うのはさておき、まずRGB10bitの各上位8bitが並び、
残りの下位2bitずつ計6bitを、4Byte目に入れています。

これは実データが10bitの場合でも、パソコン画面用には下位の3Byte分だけ読めば
簡単に表示出来ますよ、ということらしいです、さっきのshiftと同様の手法ですね。

ちなみにDalsaのSaperaLTというSDKでは、マニュアルに下記の説明が有ります。

f:id:mengineer:20160625232049p:plain

結果的にですが、今回のAVALDATAもDalsaと同じ並びだったことが判りました。

PFNCみたいなことは出来ないのか?

以前GenICamネタでPFNCという規格が出てきました、この規格書を見ていくと、
上記と同じようなデータ並びの説明が出てきます。(以下PFNC規格書から抜粋)

f:id:mengineer:20160626165555p:plain

"RGB10p32" というPixelFormat、先ほどのDalsaやAVALDATAと比べると、
RとBの位置が逆ですが、データの並びは同じになっています。

f:id:mengineer:20160626171420p:plain

"RGB10g32"、何とこれは、先ほどの二つ目と全く同じでした!

PFNCはカメラのPixelFormatの規格なので、正確には意味合いが違うのですが、
CameraLinkのデータ形式でも、こういう統一した名称みたいなものが有れば、
もっと簡単に色々なボードを利用出来るのになあ、と感じた次第です。