4. 画像取得制御
画像取得の制御、画像取得のトリガ、画像取得率の制御について詳しく説明します。
2種の画像取得モード
カメラには、フリーランモード(ビデオモードとも呼ばれる)とトリガモードの2つの画像取得モードがあります。
フリーランモード
連続取得モード。このモードでは、ユーザーはカメラから連続的に画像を取得することができます。アプリケーションソフトウェアMicroStudio / Spectmanまたはdemocppは、デフォルトではすべてフリーランモードで動作します。
トリガモード
イベントが発生したときに特定のタイミングで画像が取得されます(外部機器からのトリガ信号を受信します)。トリガ信号には、ソフトウェアトリガとハードウェアトリガ(外部トリガとも呼ばれる)があります。本マニュアルでは、主にトリガモードの使い方を説明します。
MicroStudio / Spectmanでは、「ビデオモード」や「トリガモード」にチェックを入れるだけで、フリーランモードとトリガモードを切り替えることができます。
democppでは、”Trigger”メニューの”Enter Trigger Mode”をクリックすることで、フリーランモードとトリガモードを切り替えることができます。チェックマークはトリガモードが選択されていることを示し、それ以外の場合はフリーランモードとなります。
フリーランモードとトリガモードの切り替えのAPIコードは以下の通りです。
0 = video mode, 1 = software or simulated trigger mode, 2 = external trigger mode
Wraycam_put_Option(m_hCam, WRAYCAM_OPTION_TRIGGER, val);
4.1 グローバルシャッターとローリングシャッター
トリガモードでは、トリガ信号を受信した後、カメラは露光を開始し、画像データをフラッシュアウトします。トリガ機能の詳細を説明する前に、カメラがどのように露光を開始するのかを簡単に知っておく必要があります。カメラのセンサーには、グローバルシャッターとローリングシャッターの2種類の電子シャッタモードがあります。グローバルシャッターカメラとローリングシャッターカメラでは、露光開始のタイミングが異なります。
グローバルシャッター(WRAYMER-LEO310)
グローバルシャッタカメラの場合,露光時間は各行で同時に開始します.露光後は画像データが1行ずつ読み出されます.グローバルシャッタカメラの露光原理を以下に示します
グローバルシャッターの主な特徴は、フレーム取得毎に、センサ内の全ての画素が同時に露光を開始し、全ての画素が同時に露光を停止することです。そのため、取得した画像の全域で画像の明るさが均一になる傾向があり、動きのある被写体の画像を取得する際のトラブルを最小限に抑えることができます。
ローリングシャッター
ローリングシャッターカメラの場合、センサーの各ラインが順次露光を開始します。各行の露光時間と読み出し時間は一貫しています。しかし、各行の露光開始時間は不揃いです。ローリングシャッターの露光原理を以下に示します.
4.2 トリガの特徴
トリガモードに入ると、カメラは自動的にトリガ待ち状態になります。トリガ信号を受信した後、カメラは露光を開始し、画像データをフラッシュアウトします。トリガソースには、ソフトウェアトリガと外部トリガ(ハードウェアトリガ)の2種類があります。
カメラトリガ制御システムを簡単に説明すると、以下の図のようになります。
ソフトウェアトリガを使用する場合は、クライアントソフトウェアがUSB3.0を介してコマンドを送信し、カメラを起動させて画像の取得と送信を行います。
外部トリガを使用する場合、トリガ入力とトリガ出力の両方が利用可能です。トリガ入力では、露光時間の開始を外部イベントに同期させることができます。外部トリガ入力では、いくつかの画像取得方法が利用可能です。
- シングルフレームトリガ
- マルチフレームトリガ
- カウンタートリガ
- PWMトリガ
外部トリガ信号は、光絶縁入力 (line0)または汎用入力 (line2)から送ることができます(汎用I/Oを入力として設定)。
トリガソースの設定のAPIコードは以下の通りです。
Trigger Source: 0-> line0, 1-> line2, 2-> line3, 3-> Counter, 4-> PWM, 5-> Software
Wraycam_IoControl(m_hCam, 0, WRAYCAM_IOCONTROLTYPE_SET_TRIGGERSOURCE, val, NULL);
※
- 入力「line3」は将来のモデル用に準備しているものです。WRAYCAM-LEO310の場合は、入力「line0」と「line2」のみ利用可能です。
- トリガ入力”line0″または”line2″が直接トリガソースとして設定されている場合、カメラはシングル/マルチフレームトリガモードで動作していることを意味します。対応するトリガ入力からトリガ信号を受信した後、シングル/マルチフレームで撮影されます。
トリガ出力では、フラッシュやストロボなどをカメラに同期させるイメージセンサーの積算時間を示すします。4つの出力信号モードがあります。”
- フレームトリガ待ち(Frame Trigger Wait)
- 露出 アクティブ(Exposure Active)
- ストロボ(Strobe)
- ユーザー出力(User Output)
トリガ出力信号は、光絶縁出力(line1)または汎用出力GPIO (line2)から取得することができます(汎用I/Oを出力として設定)。
トリガ機能を、下図にまとめます。
4.3 ソフトウェアトリガ
ソフトウェアトリガを設定すると、アプリケーションソフトウェアがUSB3.0ポートを介してカメラにコマンドを送信し、画像を取得します。
サンプルプログラム”democpp”でソフトウェアトリガを使用する方法は、以下のとおりです。
ステップ1:”Trigger”のドロップダウンメニューから、「Enter Trigger Mode」をクリックしてチェックを入れます。
ステップ2:「Set Trigger Number…」に進み、トリガの数を入力します。
ステップ3: “Trigger”をクリックして画像取得を開始します。ステップ2で設定したトリガ数を受信した後、カメラは露光時間を開始し、画像を保存します。
“Loop Trigger”にチェックが入っている場合は、連続トリガモードで動作します。現在のトリガモードを終了するには、”Trigger”もしくは”Loop Trigger”を再度クリックします。
※あるタイミングでトリガーをPushするコードをプログラムすれば、任意のタイミングで画像取得することもできます。
4.4 外部トリガ入力
トリガソース入力は、光絶縁入力(line0)または汎用入力 (line2)のいずれかを選択することができます。シングルフレームモード、フレームバーストモード(マルチフレームモード)、カウンターモード、PWMモードでの画像取得が可能です。
サンプルプログラム”democpp”では、以下の手順で外部トリガの設定を行います。
ステップ1:”Trigger”のドロップダウンメニューから、「Enter Trigger Mode」をクリックしてチェックを入れます。
ステップ2:”IO Config”をクリックすると、I/O Controlが表示されます。トリガソース(Trigger source)を選択したり他の設定を行ったのち、「OK」をクリックして設定を確定します。設定後、デフォルトではトリガ信号の立ち上がりでカメラが動作します。
4.4.1 シングルフレームモード/フレームバーストモード(マルチフレームモード)
シングルフレームモード
サンプルプログラム democppでは、以下の手順でシングルモードに入ります。
ステップ1: I/O Controlのトリガソース(Trigger source)を “Isolated input “または “GPIO0 “に設定します。
ステップ2:トリガ信号をカメラが受信すると、カメラは露光を開始し、1枚の画像を取得します。
フレームバーストモード(マルチフレームモード)
フレームバーストモードは、1 つのトリガ信号を受信した後の画像の取得数が設定できるモードです。画像の取得数は1~1023まで設定可能です。バーストカウント=1の場合、1枚の画像を取得することになります。Burst Count = 1はSDKとdemocppでデフォルトで設定されています。Burst Count > 1 “の場合、1つのトリガ信号を受信した後に複数の画像を取得します。下図は、「Burst Count = 3」の場合のフレームバーストトリガのタイミングを示しています。
注:Burst Countの設定はサンプルプログラム democppには搭載されていません。
以下にフレームバースト設定のAPIコードを示します。
以下はフレームバースト設定のAPIコードです。
Wraycam_IoControl(m_hCam, 0, WRAYCAM_IOCONTROLTYPE_SET_BURSTCOUNTER, val, NULL);
4.4.2 カウンターモード
このモードでは、ユーザが設定した量のトリガ信号(カウンタ値)を受信した後に画像取得を開始します。例えば、カウンター値が3に設定されている場合、カメラは露光を開始する前に3回のトリガ信号を受信する必要があります。
カウンターモードでのタイミングの図を以下に示します。
サンプルプログラム democppでのカウンターモードの設定を以下に示します。
ステップ1:I/O Controlのトリガソース(Trigger source)を ” Counter “に設定します。
ステップ2:同じくI/O Controlの”Counter Source”で、トリガ信号の入力を選択します。
ステップ3:”Counter Value”でトリガ信号の数を設定します。例えば、”Counter Value”を3に設定した場合、3つのトリガ信号を受信した後、露出開始と画像保存がトリガされます。カウンタ値の範囲は1〜1023です。
“Counter Reset”の横にある”RESET”ボタンを押すと、既に受信済みのトリガ信号のカウントを消去して、再度カウントをやり直すことができます。例えば、”Counter Value”が3に設定されていて、既に2つのトリガ信号を受信しているとします。”RESET”ボタンをクリックすると、前の2つのトリガ信号を無視して、再度0からカウントを開始します。
カウンターモード設定のAPIコードは以下の通りです。
Wraycam_IoControl(m_hCam, 0, WRAYCAM_IOCONTROLTYPE_SET_TRIGGERSOURCE, 3, NULL);
Counter Source: 0-> line0, 1-> line2, 2-> line3
Wraycam_IoControl(m_hCam, 0, WRAYCAM_IOCONTROLTYPE_SET_COUNTERSOURCE, val, NULL);
Wraycam_IoControl(m_hCam, 0, WRAYCAM_IOCONTROLTYPE_SET_COUNTERVALUE, val, NULL);
4.4.3 PWMトリガ
PWM(Pulse Width Modulation、パルス幅変調)モードでは、トリガ信号によって露出時間を制御することができます。PWMトリガモードと他のトリガモードとの主な違いは、露出です。このモードでは、下の図のように、トリガのパルス幅によって各フレームの露出時間が決定されます。
注:ローリングシャッタのセンサを搭載したカメラはPWMトリガモードに対応していません。
サンプルプログラム democppでのPWMモードの設定を以下に示します。
ステップ1:I/O Controlのトリガソース(Trigger source)を ” PWM “に設定します。
ステップ2: 同じくI/O Controlの”PWM Source”で、トリガ信号の入力を設定します((Isolated input もしくは GPIO0)。
以下に PWM トリガの API コードを示します。
Wraycam_IoControl(m_hCam, 0, WRAYCAM_IOCONTROLTYPE_SET_TRIGGERSOURCE, 4, NULL);
Wraycam_IoControl(m_hCam, 0, WRAYCAM_IOCONTROLTYPE_SET_PWMSOURCE, val, NULL);
4.5 汎用I/O(GPIO)の設定
汎用I/Oは、ソフトウェアで入力・出力の設定を行うことができます。I/O configダイアログでは、以下のように設定します。
ステップ1: IO Controlで、”Line Select”のドロップダウンメニューで”GPIO0″を選択します。
ステップ2:”GPIO Mode”に進み、Input もしくは Outputを選択します。(Inputで入力、Outputで出力に設定されます)
注:“Line Select”で使用可能なGPIO1オプションは将来のモデル用です。
GPIOの入出力方向を設定するAPIコードは以下の通りです。
Wraycam_IoControl(m_hCam, index, WRAYCAM_IOCONTROLTYPE_SET_GPIODIR, val, NULL);
4.6 入力信号デバウンサ
外部トリガ入力信号にバリ(Burr)がある可能性があります.このような信号が直接カメラ内部ロジックに入ると、偽トリガが発生します。このような問題を避けるためには、入力信号をデバウンスする必要があります。
注:入力トリガ信号の有効パルス幅は、デバウンサ時間よりも大きくする必要があります。そうでないとトリガ信号は無視されます。信号デバウンサのタイミングを以下に示します。Trigger_in1 の有効パルス幅がデバウンサ時間より短い場合、このトリガ信号は無視されます。
デバウンサの設定はIO Controlで以下のように行います。
ステップ1: IO Controlで、”Line Select”のドロップダウンメニューで入力を選択します。
注:選択された入力は、トリガ信号入力に設定したと同じである必要があります。
ステップ2:”Debouncer Time”に、デバウンス時間を入力します。デバウンス時間の範囲は0〜20000マイクロ秒です。
デバウンサーの時間設定のAPIコードは以下の通りです。
Wraycam_IoControl(m_hCam, index, WRAYCAM_IOCONTROLTYPE_SET_DEBOUNCERTIME, val, NULL);
4.7 外部トリガ入力設定シーケンスの概要
4.8 トリガ出力
WRAYCAM-LEOシリーズカメラには4つのトリガ出力が用意されています。
- Frame Trigger Wait
- Exposure Active
- Strobe
- User Output
IO Controlでは、以下のように出力信号を設定することができます。
ステップ1: “Line Select”で出力を選択します。”Isolated Output”または”GPIO0″を出力として選択することができます。
ステップ2: “Output Mode”のドロップダウンメニューで出力信号のモードを選択します。
ステップ3:出力信号を反転させる必要がある場合は、”Output Inverter”のドロップダウンメニューで、”Yes”を選択します。
以下に出力信号モード設定用の API コードを示します。
Wraycam_IoControl(m_hCam, index, WRAYCAM_IOCONTROLTYPE_SET_OUTPUTMODE, val, NULL);
Output Mode: 0-> Frame Trigger Wait, 1-> Exposure Active, 2-> Strobe, 3-> User output
index: 0-> line0, 1-> line1, 2-> line2, 3-> line3
4.8.1 Frame Trigger Wait
Frame Trigger Waitは、トリガ待ち受け期間であることを示す信号です。露出時間の開始時にLowになり、最後のフレームの画像データを読み出すとHighになります。トリガ信号は、Frame Trigger Wait信号の有効期間中(Frame Trigger WaitがHighになっている期間)に入力してください。Frame Trigger Wait信号がLowの時にトリガ信号を入力した場合(露出中や画像データ読み出し中など)、入力されたトリガ信号は無視されます。以下のタイミング例は、バーストカウント=2の場合です。
4.8.2 Exposure Active
露出開始から終了までの期間です。カメラが露出中は、Exposure Active信号がHighになります。この出力信号は、ストロボのトリガ信号として、またはオペレーティングシステムなどでカメラまたは撮像対象物を移動させる際のインジケータとして使用することができます。例えば、試料の複数箇所をチェックするために、それぞれの箇所にカメラを移動させることの出来る可動アームにカメラを載せているような場合、露出中に可動アームが動作してカメラが移動してしまうのを防ぐために、インジケータとしてExposure Active信号を使用することができます。
4.8.3 Strobe
Strobeは、ストロボなどの外部機器の制御に使用することができます。Strobe信号の有効時間、遅延時間、プリディレイ時間(Pre Delay Time)を設定することができます。
IO Controlでは、Strobe信号を以下のように設定することができます。
ステップ1:”Line Select”でStrobe信号の出力を選択します。WRAYCAM-LEO310では、Isolated output もしくは GPIO0を選択することができます。
ステップ2:“Output Mode”で“Strobe”を選択します。
ステップ3:“Strobe Delay Mode”で“delay”か“pre-delay”を選択します。そして、“Strobe Delay Time”でディレイ時間を設定します。
ステップ4:“Strobe Duration”でStrobe信号の持続時間を設定します。Strobe信号の持続時間を露出時間と同じにする場合は、“Strobe Duration”はデフォルトである0のままにしておきます。
ステップ5:“OK”をクリックして設定を確定します。
Strobeの設定を行うためのAPIコードは以下の通りです。
Wraycam_IoControl(m_hCam, index, WRAYCAM_IOCONTROLTYPE_SET_OUTPUTMODE, 2, NULL);
Wraycam_IoControl(m_hCam, 0, WRAYCAM_IOCONTROLTYPE_SET_STROBEDURATION, val, NULL);
Wraycam_IoControl(m_hCam, 0, WRAYCAM_IOCONTROLTYPE_SET_STROBEDELAYMODE, val, NULL);
Wraycam_IoControl(m_hCam, 0, WRAYCAM_IOCONTROLTYPE_SET_STROBEDELAYTIME, val, NULL);
Strobe Duration
カメラが露出を開始すると、Strobe信号はハイレベルに引き上げられます。Strobe信号がアクティブ(ハイレベル)の時間は、IO Controlの”Strobe Duration”で設定します。
“Strobe Duration”を 0 に設定すると、ハイレベルのストロボ信号の継続時間が露出時間と等しくなります。
“Strobe Duration”が0に設定されていない場合は、ハイレベルのストロボ信号の継続時間は“Strobe Duration”の設定値になります。
“Strobe Delay Mode”で“delay”を選択した場合
“Strobe Delay Mode”で“delay”を選択し、“Strobe Delay Time”を0以外に設定した場合、カメラの露出開始時にはStrobe信号は発 生しません。“Strobe Delay Time”で設定した値に応じて遅延します。この機能は、特殊な用途にも有効です。Strobe信号の出力のタイミングは以下のようになります。
“Strobe Delay Mode”で“pre-delay”を選択した場合
“Strobe Delay Mode”で“pre-delay”を選択し、“Strobe Delay Time”を0以外に設定した場合、露出開始前にStrobe信号を出力することもできます。この機能は、例えば、スローレスポンスな外部ストロボを制御したい場合など、特殊なニーズがある場合に役立つでしょう。プリディレイ時のStrobe信号の出力のタイミングは以下のようになります。
4.8.4 User Output
User Outputでは、対応する出力ラインに 0 または 1 の信号を直接出力させることができます。IO Controlの”User Value”に値を入力して、対応する出力信号を設定することができます。有効な値は2進数で3ビット以下です。例えば、line1とline3を“User Output”に設定し、“User Value”を4(2進数で100)に設定した場合、line3はハイレベルの信号1を出力し、line1はローレベルの信号0を出力します(下図参照)。
User Outputを設定するAPIコードは以下の通りです。
Wraycam_IoControl(m_hCam, index, WRAYCAM_IOCONTROLTYPE_SET_OUTPUTMODE, 3, NULL);
Wraycam_IoControl(m_hCam, 0, WRAYCAM_IOCONTROLTYPE_SET_USERVALUE, val, NULL);
4.9 Output Modeのまとめ
Output Mode | 特徴 |
Frame Trigger Wait | カメラが露出中や画像データの読み出し中のときにLowになります。 |
最後のフレームデータが読み出された時にHighになります。 | |
注:この信号レベルが低い時に入力されたトリガ信号は無視されます。 | |
Exposure Active | 露出中はHighになります。 |
注)撮影時にカメラや試料を移動させるための信号やストロボ用のトリガとして使用できます。 | |
Strobe | ストロボの持続時間、遅延時間、プリディレイ時間の設定。ストロボや外部機器をタイミングよく同期させることを可能にします。 |
Strobe Delay Time=0:Strobe信号Highの継続時間=露光時間
Strobe Delay Time>0:Strobe信号Highの継続時間=ユーザーが設定したストロボ継続時間。 | |
遅延時間(Strobe信号出力の遅延時間)。Strobe信号出力は、露光時間が始まってもすぐには効果を発揮しません。Strobe Delay Timeの設定に応じて遅延します。 | |
プリディレイ時間。露出開始よりも早くStrobe信号が有効になります。
プリディレイ時間はStrobe Delay Timeで設定します。 注:この機能は、応答性の遅いストロボの場合に便利です。 | |
User Output | “User Output”に設定されている場合、”User Value”に直接値を入力することで、対応する出力に 0(ローレベル)または 1(ハイレベル)の信号を出力させることができます。 |