マシンビジョン

Snap、Grabとは?リングバッファとは?

工業用のカメラを用いた画像の撮影方法に SnapGrab という言葉があります。

簡単に言ってしまえば、Snap静止画撮影で、Grab動画撮影となります。

SnapとGrabの厳密な定義は、各種画像入力ボードのメーカーやカメラメーカーにより異なってくるかとは思いますが、簡単に説明したいと思います。

Snap

Snapでは画像の取込を開始してから、実際に画像の撮影(画像データのメモリの転送)を行い、画像の取込を停止します。

この一連の処理をSnapと言います。

Snap、Grabとは?リングバッファとは?

ただし、Snapでもスマホのように連射をすることはできますが、画像取込と画像取込の間に画像の取込開始/停止の処理が入っているため最速のフレームレートを出せない事に注意してください。

Snap、Grabとは?リングバッファとは?

Snapでのメリットは、次の画像取込を行うまで、撮影した画像データが上書きされる事がないので、プログラム的に簡単になります。

Grab

Snapでは画像の取込開始/停止を繰り返していましたが、Grabでは画像の取込を開始し、次に画像の取込を停止するまで画像の取込を繰り返し行います。

画像取込と画像取込の間に余計な処理が入らないため、動画のように連続的に画像を取り込む場合は、Grabで撮影を行います。

Snap、Grabとは?リングバッファとは?

Grabの場合、動画の撮影中に撮影した画像データに対して画像処理などを行う事が多いのですが、この処理はSnapと比べて、より複雑です。

実際の画像取込は、カメラのセンサが露光時間分露光し、撮影された画像データがPCのメモリへ配置されるまでの処理となります。

そのため、撮影された画像データへアクセスするには、画像データがメモリへの配置が完了するのを待ってから、画像データをコピーするなり、直接画像処理をする必要があります。

さらには、ある程度の時間、Grabで撮影する場合、すべての画像データをメモリ格納しておく事は、メモリ容量的に無理な場合が多いので、一般的にはリングバッファ(循環バッファ)と呼ばれるメモリ形式で画像データを上書きしながらメモリに格納します。

リングバッファ

リングバッファとは、有限数のメモリ領域を上書きしながら、メモリへデータを格納する方法です。

リングバッファ

画像データの場合は、例えば

1枚目の画像データを画像メモリ[0]へ格納
2枚目の画像データを画像メモリ[1]へ格納
3枚目の画像データを画像メモリ[2]へ格納
4枚目の画像データを画像メモリ[3]へ格納
5枚目の画像データを画像メモリ[0]へ格納 ← これ以降、メモリの上書きが発生している
6枚目の画像データを画像メモリ[1]へ格納
        :

のようにメモリを上書きしながら画像データを格納していきます。

このリングバッファで良い事は、画像を撮影しながら画像処理などを行った場合、1枚1枚の画像処理時間は、通常、バラついてしまうため、画像処理時間が、画像が格納されてから、次の画像が格納されるまでの時間を時々超えてしまう場合でも、リングバッファの面数(上図の例では4面)が多いと画像処理中に、次の画像データに上書きされにくくなります。

まとめ

画像の撮影方法にはSnapとGrabという撮影方法があります。

それぞれの特徴は以下の通りです。

長所 短所
Snap プログラムが簡単 高速フレームレートで撮影できない
Grab 高速フレームレートで撮影できる プログラムが複雑になる

 

コメント

タイトルとURLをコピーしました