mengineer's blog

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

JAISDK Pixel値の取得

過去記事はこちらから。

前回のネタで、12bit Bayer GR PackedのみRとGのデータがおかしかったので、
今回は平均値では無くて、J_Image_GetPixelを使ってPixel値を取得してみます。

ちなみにJAISDK.NET Wrapperのマニュアルを見ると、下記4つの関数が有ります。 f:id:mengineer:20170816114551p:plain

前回までは、一番下のJ_Image_GetAverageでエリアの平均値を取得しましたが、
今回はJ_Image_GetPixelに変えてみます、正しい値が取得出来るでしょうか?

HandleImageの変更

16行目 Pixel値を取得する座標の指定、今回はX:100、Y:100にしています。
17行目 Pixel値の取得、同様にAverage構造体にデータが入ってきます。

19~36行目 PixelFormatに合わせてデータ加工しています、前回との違いは
8bit時にBGR48では無くて、RGB24を参照するように変えているところです。

マニュアルに、どのPixelFormat時、どこにデータが入るかの対応表が有りました、
これによると、8bit時はRGB24になります。

f:id:mengineer:20170816121233p:plain

実行結果

残念ながら、今回も12bit Bayer GR Packedのみデータがおかしかったです、
GreenはOKになりましたが、Redは前回同様、下位4bitが欠落している感じ。

f:id:mengineer:20170816122212p:plain

そもそもPackedとは?

今更ですが、12bit Bayer GRと12bit Bayer GR Packedとの違いについて。

今回使ったSP-5000C-USBというカメラのマニュアルに説明が有りました。 f:id:mengineer:20170816122737p:plain

12bit Bayer GR → GVSP_PIX_BAYERBG12
12bit Bayer GR Packed → GVSP_PIX_BAYERBG12PACKED

GRとBGが違うのが気になりますが、データ並びとしては上記になります。

要はPackedで無い場合は、16bit内に12bitが入り4bit余るのに対し、
Packedではデータを詰めて、48bitで4画素分のデータを送っています、
Packしないと16×4=64bit必要なので、2Byte分節約出来る訳です。

ですが実際は、こういうデータの並び順などは意識する必要は無くて、
Jai_FactoryWrapper.PixelValueの中にデータが入ってきます。
SDK側でデータをバラして並び替えてくれてるようです、便利)

先ほどの対応表に、GVSP_PIX_BAYERBG12PACKEDが無いのが気になりますね….、
カメラからの生データは参照出来ないのか?、次の機会に調べてみたいと思います。