NVIDIAが提供するコンピューティングモジュール(SBC)「Jetson」向けに提供されているSDK「JetPack」には、画像処理用のライブラリ「VPI (Vision Programming Interface)」が同梱されています。
このVPIを用いることで、OpenCVのような画像処理をJetsonモジュールに搭載されたCUDAやNVENC、VICなどのハードウェアアクセラレーション機構を用いて高速に計算することができます。
さて、そのVPIにはベイヤー画像データに関する関数がいくつかすでに用意されています。
現行のJetPack 4.6に同梱されているVPI 1.1でも、それらの関数をプログラムから呼び出すことが可能です。
MIPI CSI-2 ポートに接続したカメラモジュールの画像データを処理する際、しばしばRAWデータ(ベイヤーデータ)として画像データが転送されてくるケースがあります。
その際、VPIでベイヤーから一般的なRGBなどの画像データにフォーマット変換できれば、後段の画像処理に応用できます。
というわけで、VPIを使ってRAWデータからRGB画像データにディベイヤしよう!・・・と思ったのですが、実際にやろうとすると「サポートしていない」旨のエラーが出力されます。

結局のところ、NVIDIA Developer Forumでの上記リンク先のモデレーターの投稿にあるように、現行のVPI 1.1ではディベイヤに関する関数こそ用意しているものの、実際の動作は未実装のようです。
次のJetPack 4.6.1 ではVPI 1.2へのアップデートが予定されています。このタイミングで機能が実装されるとうれしいですね。
なお、現時点でディベイヤする場合には、OpenCVまたはNPP (NVIDIA 2D Image And Signal Performance Primitives)を用いる方法があります。
OpenCVの場合、Jetson上でCUDAを用いてフォーマット変換するにはまずOpenCVをCUDA対応の形でビルドする必要があり、非常に時間がかかります。
NPPはJetPackにも含まれており、このライブラリを用いることでCUDAを用いた高速画像処理を手軽に実現することができます。
PVAやVICなどのハードウェアアクセレーターでディベイヤができるのかは分かりませんが、もしそれらによる高速計算を望むなら、VPIが将来対応することに期待するしかないでしょう。


コメント