工業用のカメラを用いた画像の撮影方法に Snap と Grab という言葉があります。
簡単に言ってしまえば、Snapは静止画撮影で、Grabは動画撮影となります。
SnapとGrabの厳密な定義は、各種画像入力ボードのメーカーやカメラメーカーにより異なってくるかとは思いますが、簡単に説明したいと思います。
Snap
Snapでは画像の取込を開始してから、実際に画像の撮影(画像データのメモリの転送)を行い、画像の取込を停止します。
この一連の処理をSnapと言います。
ただし、Snapでもスマホのように連射をすることはできますが、画像取込と画像取込の間に画像の取込開始/停止の処理が入っているため最速のフレームレートを出せない事に注意してください。
Snapでのメリットは、次の画像取込を行うまで、撮影した画像データが上書きされる事がないので、プログラム的に簡単になります。
Grab
Snapでは画像の取込開始/停止を繰り返していましたが、Grabでは画像の取込を開始し、次に画像の取込を停止するまで画像の取込を繰り返し行います。
画像取込と画像取込の間に余計な処理が入らないため、動画のように連続的に画像を取り込む場合は、Grabで撮影を行います。
Grabの場合、動画の撮影中に撮影した画像データに対して画像処理などを行う事が多いのですが、この処理はSnapと比べて、より複雑です。
実際の画像取込は、カメラのセンサが露光時間分露光し、撮影された画像データがPCのメモリへ配置されるまでの処理となります。
そのため、撮影された画像データへアクセスするには、画像データがメモリへの配置が完了するのを待ってから、画像データをコピーするなり、直接画像処理をする必要があります。
さらには、ある程度の時間、Grabで撮影する場合、すべての画像データをメモリ格納しておく事は、メモリ容量的に無理な場合が多いので、一般的にはリングバッファ(循環バッファ)と呼ばれるメモリ形式で画像データを上書きしながらメモリに格納します。
リングバッファ
リングバッファとは、有限数のメモリ領域を上書きしながら、メモリへデータを格納する方法です。
画像データの場合は、例えば
1枚目の画像データを画像メモリ[0]へ格納
2枚目の画像データを画像メモリ[1]へ格納
3枚目の画像データを画像メモリ[2]へ格納
4枚目の画像データを画像メモリ[3]へ格納
5枚目の画像データを画像メモリ[0]へ格納 ← これ以降、メモリの上書きが発生している
6枚目の画像データを画像メモリ[1]へ格納
:
のようにメモリを上書きしながら画像データを格納していきます。
このリングバッファで良い事は、画像を撮影しながら画像処理などを行った場合、1枚1枚の画像処理時間は、通常、バラついてしまうため、画像処理時間が、画像が格納されてから、次の画像が格納されるまでの時間を時々超えてしまう場合でも、リングバッファの面数(上図の例では4面)が多いと画像処理中に、次の画像データに上書きされにくくなります。
まとめ
画像の撮影方法にはSnapとGrabという撮影方法があります。
それぞれの特徴は以下の通りです。
長所 | 短所 | |
Snap | プログラムが簡単 | 高速フレームレートで撮影できない |
Grab | 高速フレームレートで撮影できる | プログラムが複雑になる |
コメント