GigE Visionデバイスのプロパティ一覧
使用できるSDK・ドライバ・デバイス
| SDK | IC Imaging Control 4 SDK |
|---|---|
| ドライバ | GenTL Producer for GigE Vision Cameras |
| デバイス | 33Gシリーズ、38Gシリーズ、43Gシリーズ、47Gシリーズ、DFKZシリーズ |
| SFNC feature | Namespace | IC4 設定項目 |
主な機能 | 説明 | 詳細 |
|---|
-
IC4詳細・解説
Image Format Controlは、カメラから出力される映像の「見え方」や「使うピクセルの範囲」を決めるカテゴリです。ここでは解像度の設定、ROI(Region of Interest:関心領域)の指定、ビニングやスキッピングによる画素処理、画像の上下・左右反転といった調整を行うことができます。ROIを使えば撮影範囲の一部だけを切り出して効率的に処理でき、ビニングやスキッピングは画素を間引くことでフレームレート向上や感度改善を実現します。また、反転機能を用いると光学系の取り付け方向やミラー反射の影響を補正できます。
// センサー1画素の物理サイズ(単位:µm) double SensorPixelWidth = grabber.DevicePropertyMap.GetValueDouble("SensorPixelWidth"); double SensorPixelHeight = grabber.DevicePropertyMap.GetValueDouble("SensorPixelHeight"); // センサー全体の物理サイズ(単位:mm) double SensorWidth = grabber.DevicePropertyMap.GetValueDouble("SensorWidth"); double SensorHeight = grabber.DevicePropertyMap.GetValueDouble("SensorHeight"); // カメラが対応可能な最大解像度 double WidthMax = grabber.DevicePropertyMap.GetValueDouble("WidthMax"); double HeightMax = grabber.DevicePropertyMap.GetValueDouble("HeightMax"); //// 画像の横幅(解像度)を設定・取得 grabber.DevicePropertyMap.SetValue("Width", 640); double Width = grabber.DevicePropertyMap.GetValueDouble("Width"); //// 画像の高さ(解像度)を設定・取得 grabber.DevicePropertyMap.SetValue("Height", 1080); double Height = grabber.DevicePropertyMap.GetValueDouble("Height"); // 画像の切り出し開始位置(左上からのオフセット)を設定・取得 grabber.DevicePropertyMap.SetValue("OffsetX", 0); double OffsetX = grabber.DevicePropertyMap.GetValueDouble("OffsetX"); grabber.DevicePropertyMap.SetValue("OffsetY", 0); double OffsetY = grabber.DevicePropertyMap.GetValueDouble("OffsetY"); // 切り出しの基準位置を中央にするかどうか("Off" = 左上基準) grabber.DevicePropertyMap.SetValue("OffsetAutoCenter", "Off"); string OffsetAutoCenter = grabber.DevicePropertyMap.GetValueString("OffsetAutoCenter"); // カラーフォーマットの設定(例:"Mono8" はモノクロ8bit) // 利用可能なフォーマットはカメラにより異なるため、IC Capture等で事前確認が必要 grabber.DevicePropertyMap.SetValue("PixelFormat", "Mono8"); string pixelformat = grabber.DevicePropertyMap.GetValueString("PixelFormat"); // 水平方向のビニング(ここでは無効=1倍) grabber.DevicePropertyMap.SetValue("BinningHorizontal", 1); double BinningHorizontal = grabber.DevicePropertyMap.GetValueDouble("BinningHorizontal"); // 垂直方向のビニング(ここでは無効=1倍) grabber.DevicePropertyMap.SetValue("BinningVertical", 1); double BinningVertical = grabber.DevicePropertyMap.GetValueDouble("BinningVertical"); // 水平方向のデシメーション(画素間引き処理)(ここでは無効=1倍) grabber.DevicePropertyMap.SetValue("DecimationHorizontal", 1); double DecimationHorizontal = grabber.DevicePropertyMap.GetValueDouble("DecimationHorizontal"); // 垂直方向のデシメーション(ここでは無効=1倍) grabber.DevicePropertyMap.SetValue("DecimationVertical", 1); double DecimationVertical = grabber.DevicePropertyMap.GetValueDouble("DecimationVertical"); // 水平方向の画像反転設定(false = 反転なし) grabber.DevicePropertyMap.SetValue("ReverseX", false); bool ReverseX = grabber.DevicePropertyMap.GetValueBool("ReverseX"); // 垂直方向の画像反転設定(true = 上下反転あり) grabber.DevicePropertyMap.SetValue("ReverseY", true); bool ReverseY = grabber.DevicePropertyMap.GetValueBool("ReverseY");[Image Format Control]の詳細を閉じる▲ -
IC4詳細・解説
Acquisition Control はカメラの撮像動作を直接制御するためのカテゴリであり、撮影開始や停止、モード切替、露光やフレームレートの設定、さらにはトリガー制御まで幅広く扱います。例えば、AcquisitionStartやAcquisitionStopを使うことで画像ストリーミングを開始・停止でき、AcquisitionFrameRateによってフレームレートを、ExposureTimeによって露光時間をマイクロ秒単位で設定することが可能です。自動露光を利用する場合には ExposureAutoをContinuousに設定し、基準輝度や露光時間の上下限を細かく調整できます。さらに、外部信号やソフトウェアによるトリガー撮影にも対応しており、TriggerSourceをLine1(ハードウェアトリガー)やSoftware(ソフトウェアトリガー) に設定し、TriggerActivation でRisingEdge(立ち上がり時の撮影)や FallingEdge(立ち下がり時の撮影) を指定することで柔軟な制御が可能です。さらにTriggerDelayや TriggerDebouncerを利用すれば遅延やノイズ対策を行うことができ、AcquisitionBurstFrameCountやAcquisitionBurstIntervalを設定すればバースト撮影も設定可能です。
// 撮像開始 grabber.DevicePropertyMap.ExecuteCommand("AcquisitionStart"); // 撮像停止 grabber.DevicePropertyMap.ExecuteCommand("AcquisitionStop"); // 撮像モード(例:Continuous, SingleFrame, MultiFrame) grabber.DevicePropertyMap.SetValue("AcquisitionMode", "Continuous"); string AcquisitionMode = grabber.DevicePropertyMap.GetValueString("AcquisitionMode"); // 撮像フレームレートの設定 grabber.DevicePropertyMap.SetValue("AcquisitionFrameRate", 30.0); double AcquisitionFrameRate = grabber.DevicePropertyMap.GetValueDouble("AcquisitionFrameRate"); // 露光時間(単位:マイクロ秒) grabber.DevicePropertyMap.SetValue("ExposureTime", 10000.0); double ExposureTime = grabber.DevicePropertyMap.GetValueDouble("ExposureTime"); // 自動露光のON/OFF("Off", "Once", "Continuous") grabber.DevicePropertyMap.SetValue("ExposureAuto", "Off"); string ExposureAuto = grabber.DevicePropertyMap.GetValueString("ExposureAuto"); // 自動露光の基準輝度(通常128) grabber.DevicePropertyMap.SetValue("ExposureAutoReference", 128); double ExposureAutoReference = grabber.DevicePropertyMap.GetValueDouble("ExposureAutoReference"); // 自動露光の下限(μs) grabber.DevicePropertyMap.SetValue("ExposureAutoLowerLimit", 1000.0); double ExposureAutoLowerLimit = grabber.DevicePropertyMap.GetValueDouble("ExposureAutoLowerLimit"); // 自動露光の上限(μs) grabber.DevicePropertyMap.SetValue("ExposureAutoUpperLimit", 50000.0); double ExposureAutoUpperLimit = grabber.DevicePropertyMap.GetValueDouble("ExposureAutoUpperLimit"); // 自動露光の上限を自動で決定(ON/OFF) grabber.DevicePropertyMap.SetValue("ExposureAutoUpperLimitAuto", true); bool ExposureAutoUpperLimitAuto = grabber.DevicePropertyMap.GetValueBool("ExposureAutoUpperLimitAuto"); // ハイライト低減の有効化(白とび軽減) grabber.DevicePropertyMap.SetValue("ExposureAutoHighlightReduction", true); bool ExposureAutoHighlightReduction = grabber.DevicePropertyMap.GetValueBool("ExposureAutoHighlightReduction"); // トリガーセレクター(基本的に"FrameStart"のみ) grabber.DevicePropertyMap.SetValue("TriggerSelector", "FrameStart"); string TriggerSelector = grabber.DevicePropertyMap.GetValueString("TriggerSelector"); // トリガーモード("On"/"Off") grabber.DevicePropertyMap.SetValue("TriggerMode", "Off"); string TriggerMode = grabber.DevicePropertyMap.GetValueString("TriggerMode"); // トリガーソース(Line1, Software, Action0, Any) grabber.DevicePropertyMap.SetValue("TriggerSource", "Software"); string TriggerSource = grabber.DevicePropertyMap.GetValueString("TriggerSource"); // トリガー条件("RisingEdge", "FallingEdge" など) grabber.DevicePropertyMap.SetValue("TriggerActivation", "RisingEdge"); string TriggerActivation = grabber.DevicePropertyMap.GetValueString("TriggerActivation"); // ソフトウェアトリガーを発行 grabber.DevicePropertyMap.ExecuteCommand("TriggerSoftware"); // トリガー遅延(単位:μs) grabber.DevicePropertyMap.SetValue("TriggerDelay", 0.0); double TriggerDelay = grabber.DevicePropertyMap.GetValueDouble("TriggerDelay"); // デバウンス時間(ノイズ除去用のフィルタ) grabber.DevicePropertyMap.SetValue("TriggerDebouncer", 0.0); double TriggerDebouncer = grabber.DevicePropertyMap.GetValueDouble("TriggerDebouncer"); // トリガーマスク grabber.DevicePropertyMap.SetValue("TriggerMask", 0); int TriggerMask = (int)grabber.DevicePropertyMap.GetValueDouble("TriggerMask"); // トリガーデノイズ設定 grabber.DevicePropertyMap.SetValue("TriggerDenoise", 0); int TriggerDenoise = (int)grabber.DevicePropertyMap.GetValueDouble("TriggerDenoise"); // トリガーオーバーラップ設定("ReadOut"など) string TriggerOverlap = grabber.DevicePropertyMap.GetValueString("TriggerOverlap"); // 連写枚数の設定(MultiFrameやBurst用) grabber.DevicePropertyMap.SetValue("AcquisitionBurstFrameCount", 1); double AcquisitionBurstFrameCount = grabber.DevicePropertyMap.GetValueDouble("AcquisitionBurstFrameCount"); // 連写の間隔(Burst撮像時、μs単位) grabber.DevicePropertyMap.SetValue("AcquisitionBurstInterval", 200); double AcquisitionBurstInterval = grabber.DevicePropertyMap.GetValueDouble("AcquisitionBurstInterval");[Acquisition Control]の詳細を閉じる▲ -
IC4詳細・解説
カメラが出力する1フレームあたりのデータサイズ(バイト数)を示すのが PayloadSizeです。この値は画像の幅・高さ・カラーフォーマット(モノクロ8bit、RGB、Bayer など)によって決まり、必要な通信帯域や PC側の処理負荷を見積もる際の基準となります。例えば解像度が 1920×1200 で、各ピクセルを 3Byte(BGR8 フォーマット)のカメラの場合、理論値は 1920×1200×3 = 6,912,000 Byte となります。実際の PayloadSize にはヘッダ情報などが加算されるため、実測値として 6,912,024 Byte となります。
// PayloadSize(ペイロードサイズ)を取得する double PayloadSize = grabber.DevicePropertyMap.GetValueDouble("PayloadSize");[Transport Layer Control]の詳細を閉じる▲ -
IC4詳細・解説
GigE Visionの転送制御では、ネットワーク上での画像データのやり取りを効率的かつ安定させるために下記の設定項目が用意されています。
GevSCPSPacketSize 送信パケットの大きさをバイト単位で指定する機能で、通常は1500バイトですが、ジャンボフレーム対応のスイッチや NICカードを使用する場合は9000バイトに設定することで一度に送れるデータ量が増え、転送効率が向上します。 GevSCPSFireTestPacket テストパケットを送信する機能で、画像を撮らなくてもネットワーク経路が正しく構成されているか確認できるため、ジャンボフレーム環境の疎通確認などに役立ちます。 GevSCPSDoNotFragment IPヘッダ内の「分割禁止」ビットを設定するもので、パケットが途中で分割されるのを防ぎ、途切れのない安定した転送を保証します。ジャンボフレーム対応の環境で、効率と安定性を重視する場合にはTrue、ジャンボパケット非対応機材を含むネットワーク環境で互換性を優先する場合にはFalseを設定してください。 GevGVSPExtendedIDMode GevGVSPExtendedIDModeをON にすると、GVSPパケット内のヘッダに含まれるID情報が拡張され、より大きな範囲の番号を扱えるようになります。これにより、多数のカメラを同時に使用する環境でも、パケットやフレームを正確に識別でき、安定した動作が可能になります。パケットヘッダに追加されるバイト数はわずかで、画像データ全体の転送量にはほとんど影響しません。なお、受信側のソフトウェアやフレームグラバーが拡張IDに対応していない場合、正しく認識されない可能性があります。 // GevSCPSPacketSize:パケットサイズ(JumboFrame使用時9000など) grabber.DevicePropertyMap.SetValue("GevSCPSPacketSize", 9000); double GevSCPSPacketSize = grabber.DevicePropertyMap.GetValueDouble("GevSCPSPacketSize"); // GevSCPSFireTestPacket:テストパケットを送信してネットワークの接続状況を確認 // trueに設定することで送信テストが行われる grabber.DevicePropertyMap.SetValue("GevSCPSFireTestPacket", true); // GevSCPSDoNotFragment:StreamChannelのパケット分割禁止フラグを設定します grabber.DevicePropertyMap.SetValue("GevSCPSDoNotFragment", false); bool GevSCPSDoNotFragment = grabber.DevicePropertyMap.GetValueBool("GevSCPSDoNotFragment"); // GevGVSPExtendedIDMode:GigE Visionストリーミング用の拡張IDモード grabber.DevicePropertyMap.SetValue("GevGVSPExtendedIDMode", false); bool GevGVSPExtendedIDMode = grabber.DevicePropertyMap.GetValueBool("GevGVSPExtendedIDMode");[GigEVision]の詳細を閉じる▲ -
IC4詳細・解説
PTP(Precision Time Protocol)は、ネットワーク上の複数機器の時刻を正確に合わせるための機能です。カメラで PtpEnable を有効にすると、各フレームに付与されるタイムスタンプが共通の基準で管理され、複数台のカメラから取得した画像の時刻が同期された状態になります。PtpClockAccuracy は、そのカメラが基準クロック(グランドマスター)になったときにどの程度の精度で時刻を維持できるかを示し、例えば「Within100us」であれば100マイクロ秒以内の誤差に収まることを表します。さらに PtpStatusでは、現在のPTP動作状態を確認でき、Masterの場合はそのカメラが基準クロックを提供しており、Slaveの場合は他の機器に同期して動作しています。
// PtpEnable:PTP(Precision Time Protocol)を有効化(IEEE 1588) grabber.DevicePropertyMap.SetValue("PtpEnable", true); bool PtpEnable = grabber.DevicePropertyMap.GetValueBool("PtpEnable"); // PtpClockAccuracy:クロック精度を示す(ReadOnly) string PtpClockAccuracy = grabber.DevicePropertyMap.GetValueString("PtpClockAccuracy"); // PtpStatus:PTP同期状態を示す文字列(ReadOnly) // 例:Initializing, Faulty, Disabled, Listening, PreMaster, Master, Passive, Uncalibrated, Slave string PtpStatus = grabber.DevicePropertyMap.GetValueString("PtpStatus");[PtpControl]の詳細を閉じる▲ -
IC4詳細・解説
Device Control は、カメラを使用する際に欠かせない基本カテゴリの一つであり、デバイス全体の管理や制御を担います。このカテゴリでは、カメラの接続や認識状態を確認し、必要に応じて初期化やリセットを行うことが可能です。撮影を始める前に、ホスト PC とのリンク状態や通信の安定性を確認するのもこの機能の役割です。さらに、接続されたカメラのハードウェア情報やネットワーク設定、ストリームチャネルの構成といったシステムに関わる情報を取得できます。加えて、タイムスタンプの監視や内部温度の把握など、運用中の監視機能も含まれています。USB カメラの場合は、下記のようにデバイスリセットを直接行えるため、異常時に素早く復旧できる利点があります。
USBカメラの監視と再接続処理
IC Imaging Control Ver4.0(C#/VB.NET) サンプルプログラム// デバイスの種類(例:"Camera" など) string DeviceType = grabber.DevicePropertyMap.GetValueString("DeviceType"); // スキャン方式("AreaScan" または "LineScan" など) string DeviceScanType = grabber.DevicePropertyMap.GetValueString("DeviceScanType"); // ベンダー名(製造会社名) string DeviceVendorName = grabber.DevicePropertyMap.GetValueString("DeviceVendorName"); // モデル名(使用しているカメラの機種名) string DeviceModelName = grabber.DevicePropertyMap.GetValueString("DeviceModelName"); // デバイスのファームウェアバージョン string DeviceVersion = grabber.DevicePropertyMap.GetValueString("DeviceVersion"); // シリアル番号(個体識別用) string DeviceSerialNumber = grabber.DevicePropertyMap.GetValueString("DeviceSerialNumber"); // ユーザー定義のカメラ名(後から設定可能) string DeviceUserID = grabber.DevicePropertyMap.GetValueString("DeviceUserID"); grabber.DevicePropertyMap.SetValue("DeviceUserID", "MyCamera01"); // GenICam準拠のバージョン情報(カメラ機能仕様のバージョン) double DeviceSFNCVersionMajor = grabber.DevicePropertyMap.GetValueDouble("DeviceSFNCVersionMajor"); double DeviceSFNCVersionMinor = grabber.DevicePropertyMap.GetValueDouble("DeviceSFNCVersionMinor"); double DeviceSFNCVersionSubMinor = grabber.DevicePropertyMap.GetValueDouble("DeviceSFNCVersionSubMinor"); // 使用中の通信方式(Transport Layer)例:"GEV"(GigE)や "U3V"(USB3 Vision) string DeviceTLType = grabber.DevicePropertyMap.GetValueString("DeviceTLType"); double DeviceTLVersionMajor = grabber.DevicePropertyMap.GetValueDouble("DeviceTLVersionMajor"); double DeviceTLVersionMinor = grabber.DevicePropertyMap.GetValueDouble("DeviceTLVersionMinor"); double DeviceTLVersionSubMinor = grabber.DevicePropertyMap.GetValueDouble("DeviceTLVersionSubMinor"); // 帯域幅の制限を有効にする(true:制限する、false:無制限) grabber.DevicePropertyMap.SetValue("DeviceLinkThroughputLimitMode", true); bool DeviceLinkThroughputLimitMode = grabber.DevicePropertyMap.GetValueBool("DeviceLinkThroughputLimitMode"); // 最大スループット(単位:bps、例:125MB/s = 125000000) grabber.DevicePropertyMap.SetValue("DeviceLinkThroughputLimit", 125000000); double DeviceLinkThroughputLimit = grabber.DevicePropertyMap.GetValueDouble("DeviceLinkThroughputLimit"); // どのリンクを操作するかの選択(通常は 0) double DeviceLinkSelector = grabber.DevicePropertyMap.GetValueDouble("DeviceLinkSelector"); // ハートビートタイムアウト(通信が切れたと判断するまでの時間、単位:ms) grabber.DevicePropertyMap.SetValue("DeviceLinkHeartbeatTimeout", 500000); double DeviceLinkHeartbeatTimeout = grabber.DevicePropertyMap.GetValueDouble("DeviceLinkHeartbeatTimeout"); // ストリームチャネルの数(通常は1。マルチストリーム時に使用) double DeviceStreamChannelCount = grabber.DevicePropertyMap.GetValueDouble("DeviceStreamChannelCount"); double DeviceStreamChannelSelector = grabber.DevicePropertyMap.GetValueDouble("DeviceStreamChannelSelector"); string DeviceStreamChannelType = grabber.DevicePropertyMap.GetValueString("DeviceStreamChannelType"); double DeviceStreamChannelLink = grabber.DevicePropertyMap.GetValueDouble("DeviceStreamChannelLink"); string DeviceStreamChannelEndianness = grabber.DevicePropertyMap.GetValueString("DeviceStreamChannelEndianness"); // ストリームのパケットサイズ(GigE Visionなどで通信サイズを調整) grabber.DevicePropertyMap.SetValue("DeviceStreamChannelPacketSize", 9000); double DeviceStreamChannelPacketSize = grabber.DevicePropertyMap.GetValueDouble("DeviceStreamChannelPacketSize"); // イベントチャネルの数(イベント処理が可能なチャネル数) double DeviceEventChannelCount = grabber.DevicePropertyMap.GetValueDouble("DeviceEventChannelCount"); // タイムスタンプを初期化(値をリセット) grabber.DevicePropertyMap.ExecuteCommand("TimestampReset"); // 現在のタイムスタンプ値を保存 grabber.DevicePropertyMap.SetValue("TimestampLatch", true); // 保持されたタイムスタンプの数値形式 double TimestampLatchValue = grabber.DevicePropertyMap.GetValueDouble("TimestampLatchValue"); // 保持されたタイムスタンプの文字列形式 string TimestampLatchString = grabber.DevicePropertyMap.GetValueString("TimestampLatchString"); // 温度モニタリング( Sensor, Mainboard など選択可能) grabber.DevicePropertyMap.SetValue("DeviceTemperatureSelector", "Sensor"); string DeviceTemperatureSelector = grabber.DevicePropertyMap.GetValueString("DeviceTemperatureSelector"); // 温度モニタリングで選択した部位の現在温度 double DeviceTemperature = grabber.DevicePropertyMap.GetValueDouble("DeviceTemperature");[Device Control]の詳細を閉じる▲ -
IC4詳細・解説
Action Controlは、GigEカメラを複数台で同時に制御するための仕組みで、ネットワーク経由で一斉にコマンドを送れるのが特徴です。通常、外部トリガーやソフトウェアトリガーを使うとカメラごとに命令を与える必要がありますが、この機能を利用すれば、1つのアクションコマンドを発行するだけで複数のカメラが同時に反応し、露光開始のタイミングを同期することができます。これにより、外部トリガーのような配線の手間や外部制御装置への依存を減らし、ネットワークベースで柔軟に同期撮影を構築することが可能です。また、Actioin Controlにはカメラをグループごとに制御できる機能があるため「すべてのカメラを一斉に動作させる」だけでなく「特定のグループに属するカメラだけを反応させる」といった細やかな運用も実現できます。例えば、下図のように「ActionGroupKey」「ActionGroupMask」を「0x1」と指定しActionCommnadを実行することで「0x1」だけを撮影することができます。
// アクションコマンドの識別用キー(カメラごとに一意の値を指定可能) grabber.DevicePropertyMap.SetValue("ActionDeviceKey", 1); //double ActionDeviceKey = grabber.DevicePropertyMap.GetValueDouble("ActionDeviceKey"); // 使用するアクションを選択(通常は "0") grabber.DevicePropertyMap.SetValue("ActionSelector", 0); double ActionSelector = grabber.DevicePropertyMap.GetValueDouble("ActionSelector"); // アクションのグループキー(複数台のカメラに同時に信号を送るときの識別番号) grabber.DevicePropertyMap.SetValue("ActionGroupKey", 1); double ActionGroupKey = grabber.DevicePropertyMap.GetValueDouble("ActionGroupKey"); // アクショングループのマスク設定(特定のビットを使用してグループ分けを制御) grabber.DevicePropertyMap.SetValue("ActionGroupMask", 1); double ActionGroupMask = grabber.DevicePropertyMap.GetValueDouble("ActionGroupMask"); // アクションコマンドを受け付けるキューの最大数(バッファサイズのようなもの) ReadOnly double ActionQueueSize = grabber.DevicePropertyMap.GetValueDouble("ActionQueueSize");
[Action Control]の詳細を閉じる▲ -
IC4詳細・解説
ActionSchedulerは、カメラに対して「いつアクションを実行するか」をあらかじめ予約できる機能で、複数台のカメラを高精度に同期させたい場合や、定期的な撮影を自動化したい場合に有効です。通常のトリガーではコマンドや信号を送った瞬間に撮影が開始されますが、ActionSchedulerを使うとカメラ内部のクロックを基準に、将来の特定の時刻にアクションを発動するよう設定できます。例えば ActionSchedulerTimeに1,000,000,000nsを指定すれば「1秒後に実行」となり、ActionSchedulerInterval(μs)に値を設定すればその間隔で繰り返し実行されます。これにより、30fpsの周期撮影や複数カメラの完全なタイミング合わせが可能になります。また、設定を反映させるには ActionSchedulerCommitを実行し、不要になった場合は ActionSchedulerCancelによってActionSchedulerを解除できます。さらに ActionSchedulerStatusを確認すれば、現在のActionSchedulerの状態(Idle、Scheduled など)が取得でき、正しくスケジュールされているかを監視できます。
// ActionSchedulerTimeで指定された時間に実行されるアクションをスケジューリングします。 // オプションで、ActionSchedulerIntervalの間隔で繰り返されます。 grabber.DevicePropertyMap.ExecuteCommand("ActionSchedulerCommit"); // アクションスケジューラで予約実行する時刻を設定(単位:ナノ秒) // ここでは 1 秒後(1,000,000,000ns)にアクションが実行されるように指定 grabber.DevicePropertyMap.SetValue("ActionSchedulerTime", 1000000000); double ActionSchedulerTime = grabber.DevicePropertyMap.GetValueDouble("ActionSchedulerTime"); // アクションスケジューラの繰り返し間隔を指定(0で単発実行) // ここでは 1ns(最小値)としているが、周期撮影の場合は例えば33,333,333ns(30fps)など grabber.DevicePropertyMap.SetValue("ActionSchedulerInterval", 1); double ActionSchedulerInterval = grabber.DevicePropertyMap.GetValueDouble("ActionSchedulerInterval"); // スケジューラをキャンセルする(予約中のトリガーを無効化) grabber.DevicePropertyMap.ExecuteCommand("ActionSchedulerCancel"); // 現在のスケジューラの状態を取得(ActionSchedulerStatus_Idle, ActionSchedulerStatus_Scheduledなどの文字列が返る) string ActionSchedulerStatus = grabber.DevicePropertyMap.GetValueString("ActionSchedulerStatus");[ActionScheduler]の詳細を閉じる▲ -
IC4詳細・解説
FileAccessControlは、カメラ内部に格納できるユーザーファイルやカスタムデータを操作するための仕組みで、撮影パラメータだけでなくキャリブレーション情報や補正テーブルなどの独自データを自由に保存・読み込みできます。使用するにはまずFileSelectorで対象のファイル(例:UserFile0)を指定し、FileOperationSelectorで処理内容(Open、Read、Write、Deleteなど)を決め、FileOperationExecuteを実行します。読み出しや書き込みの結果はFileAccessBufferというプロパティを通じてやり取りされます。たとえばReadを実行するとカメラ内部のデータがFileAccessBufferに転送され、アプリケーション側でこのバッファを取得してPCのメモリやファイルに書き出すことで利用できるようになります。Writeの場合はアプリケーションがFileAccessBufferにデータを書き込み、それをカメラに送るという手順です。これによりカメラ本体に任意のデータを保持できます。
// FileSelector:操作対象のファイルを選択 // 例:UserFile0, UserFile1, UserFile2 など(カメラに依存) string FileSelector = grabber.DevicePropertyMap.GetValueString("FileSelector"); grabber.DevicePropertyMap.SetValue("FileSelector", "UserFile0"); // FileOperationSelector:操作内容を選択Open, Close, Read, Write, Delete grabber.DevicePropertyMap.SetValue("FileOperationSelector", "Open"); string FileOperationSelector = grabber.DevicePropertyMap.GetValueString("FileOperationSelector"); // FileOperationExecute:実際に選択した操作を実行 grabber.DevicePropertyMap.ExecuteCommand("FileOperationExecute"); // FileOpenMode:ファイルを開く際のモード("Read", "Write", "ReadWrite") string FileOpenMode = grabber.DevicePropertyMap.GetValueString("FileOpenMode"); // FileAccessOffset:ファイル読み書きのバイトオフセット位置を指定 double FileAccessOffset = grabber.DevicePropertyMap.GetValueDouble("FileAccessOffset"); // FileAccessLength:読み書きするデータ長(バイト数)を指定 grabber.DevicePropertyMap.SetValue("FileAccessLength", 1024); double FileAccessLength = grabber.DevicePropertyMap.GetValueDouble("FileAccessLength"); // FileOperationStatus:現在のファイル操作状態 Success, Failure string FileOperationStatus = grabber.DevicePropertyMap.GetValueString("FileOperationStatus"); // FileOperationResult:最後のファイル操作の結果 string FileOperationResult = grabber.DevicePropertyMap.GetValueString("FileOperationResult"); // FileSize:選択されたファイルの全体サイズ(バイト単位) double FileSize = grabber.DevicePropertyMap.GetValueDouble("FileSize");[File Access Control]の詳細を閉じる▲ -
IC4詳細・解説
Analog Controlは、カメラの映像信号に関わる画質パラメータを調整するためのカテゴリで、色合いや明るさなどの画像を調整します。このカテゴリに含まれる代表的な機能として、ゲイン(Gain)があり、これはセンサー出力を増幅して全体的な明るさを引き上げます。暗い環境で有効ですが、ノイズも大きくなるため、必要に応じて適切な範囲で設定する必要があります。また、ブラックレベル(BlackLevel)があり、これは画像全体の黒基準を変えることで暗部の階調を調整することができます。ホワイトバランス(WhiteBalance)は、赤・緑・青の各色ゲインを補正して、光源の色温度に左右されない色再現を実現します。またBrightness や Contrast の調整によって、全体的な明るさバランスや階調の強調具合を変更できます。
// BalanceRatioSelector:補正対象の色チャンネルを選択("Red", "Green", "Blue") grabber.DevicePropertyMap.SetValue("BalanceRatioSelector", "Red"); string RedBalanceRatioSelector = grabber.DevicePropertyMap.GetValueString("BalanceRatioSelector"); // BalanceRatio:選択中の色チャンネルのホワイトバランス比率 grabber.DevicePropertyMap.SetValue("BalanceRatio", 1.5); double RedBalanceRatio = grabber.DevicePropertyMap.GetValueDouble("BalanceRatio"); // BalanceRatioSelector:補正対象の色チャンネルを選択("Red", "Green", "Blue") grabber.DevicePropertyMap.SetValue("BalanceRatioSelector", "Green"); string GreenBalanceRatioSelector = grabber.DevicePropertyMap.GetValueString("BalanceRatioSelector"); // BalanceRatio:選択中の色チャンネルのホワイトバランス比率 grabber.DevicePropertyMap.SetValue("BalanceRatio", 1.5); double GreenBalanceRatio = grabber.DevicePropertyMap.GetValueDouble("BalanceRatio"); // BalanceRatioSelector:補正対象の色チャンネルを選択("Red", "Green", "Blue") grabber.DevicePropertyMap.SetValue("BalanceRatioSelector", "Red"); string BlueBalanceRatioSelector = grabber.DevicePropertyMap.GetValueString("BalanceRatioSelector"); // BalanceRatio:選択中の色チャンネルのホワイトバランス比率 grabber.DevicePropertyMap.SetValue("BalanceRatio", 1.5); double BlueBalanceRatio = grabber.DevicePropertyMap.GetValueDouble("BalanceRatio"); // BalanceWhiteAuto:自動ホワイトバランスのモード("Off", "Once", "Continuous") grabber.DevicePropertyMap.SetValue("BalanceWhiteAuto", "Off"); string BalanceWhiteAuto = grabber.DevicePropertyMap.GetValueString("BalanceWhiteAuto"); // BalanceWhiteMode:ホワイトバランス方式 WhiteBalanceMode_GrayWorld, WhiteBalanceMode_Temperature grabber.DevicePropertyMap.SetValue("BalanceWhiteMode", "WhiteBalanceMode_GrayWorld"); string BalanceWhiteMode = grabber.DevicePropertyMap.GetValueString("BalanceWhiteMode"); // BalanceWhiteAutoPreset:AWBのプリセット(例:BalanceWhiteAutoPreset_Any, BalanceWhiteAutoPreset_WarmWhite, BalanceWhiteAutoPreset_CoolWhite, BalanceWhiteAutoPreset_DayLight, BalanceWhiteAutoPreset_DeepShade grabber.DevicePropertyMap.SetValue("BalanceWhiteAutoPreset", "BalanceWhiteAutoPreset_Any"); string BalanceWhiteAutoPreset = grabber.DevicePropertyMap.GetValueString("BalanceWhiteAutoPreset"); // BalanceWhiteTemperaturePreset:色温度のプリセット(BalanceWhiteTemperaturePreset_SodiumVaporLamp, BalanceWhiteTemperaturePreset_WarmLight, BalanceWhiteTemperaturePreset_HalogenLight, BalanceWhiteTemperaturePreset_NeutralWhite, BalanceWhiteTemperaturePreset_CoolWhiteFluorescentLight, BalanceWhiteTemperaturePreset_CoolWhiteDaylight, BalanceWhiteTemperaturePreset_Daylight, BalanceWhiteTemperaturePreset_CoolWhiteLED, BalanceWhiteTemperaturePreset_BlueSky) grabber.DevicePropertyMap.SetValue("BalanceWhiteTemperaturePreset", "BalanceWhiteTemperaturePreset_SodiumVaporLamp"); string BalanceWhiteTemperaturePreset = grabber.DevicePropertyMap.GetValueString("BalanceWhiteTemperaturePreset"); // BalanceWhiteTemperature:色温度(単位:ケルビン) grabber.DevicePropertyMap.SetValue("BalanceWhiteTemperature", 6500); double BalanceWhiteTemperature = grabber.DevicePropertyMap.GetValueDouble("BalanceWhiteTemperature"); // BlackLevel:黒レベル補正値(通常 0~数十) grabber.DevicePropertyMap.SetValue("BlackLevel", 0); double BlackLevel = grabber.DevicePropertyMap.GetValueDouble("BlackLevel"); // Gain:ゲイン値 grabber.DevicePropertyMap.SetValue("Gain", 0); double Gain = grabber.DevicePropertyMap.GetValueDouble("Gain"); // GainAuto:ゲイン自動調整("Off", "Once", "Continuous") grabber.DevicePropertyMap.SetValue("GainAuto", "Off"); string GainAuto = grabber.DevicePropertyMap.GetValueString("GainAuto"); // GainAutoLowerLimit:自動ゲインの最小制限値 grabber.DevicePropertyMap.SetValue("GainAutoLowerLimit", 0.0); double GainAutoLowerLimit = grabber.DevicePropertyMap.GetValueDouble("GainAutoLowerLimit"); // GainAutoUpperLimit:自動ゲインの最大制限値 grabber.DevicePropertyMap.SetValue("GainAutoUpperLimit", 24.0); double GainAutoUpperLimit = grabber.DevicePropertyMap.GetValueDouble("GainAutoUpperLimit"); // Gamma:出力画像の階調補正(通常 0.5~2.5、1.0 = リニア) grabber.DevicePropertyMap.SetValue("Gamma", 1.0); double Gamma = grabber.DevicePropertyMap.GetValueDouble("Gamma");[Analog Control]の詳細を閉じる▲ -
IC4詳細・解説
Color Transformation Controlは、カメラから出力されるカラー画像の色合いを調整する機能です。RGBそれぞれの値を変換行列に通すことで、赤・緑・青のバランスを変え、照明環境に応じた補正を行います。たとえば、蛍光灯の下で赤みが強くなったり、屋外で青みが強くなる場合に、行列の係数を変えることで色を中和し、実際の見た目に近づけることができます。基本的にはRGB to RGB変換を用い、ColorTransformationEnableでこの機能をオンにすると有効になります。その状態では、ColorTransformationValueSelectorで行列のどの係数を操作するかを選び、ColorTransformationValueで数値を設定します。これにより、特定の色成分を強めたり弱めたりする微調整が可能です。また、Saturation EnableやSaturationを使うと、全体の彩度を高めて鮮やかさを出すこともできます。これらの設定によって、撮影環境や用途に合わせて柔軟に色の見え方をコントロールでき、最適な映像品質を得ることが可能になります。
// ColorTransformationSelector:色変換モードの選択(例:"RGBtoRGB") grabber.DevicePropertyMap.SetValue("ColorTransformationSelector", "RGBtoRGB"); string ColorTransformationSelector = grabber.DevicePropertyMap.GetValueString("ColorTransformationSelector"); //ColorTransformationEnable:色変換を有効にするかどうか grabber.DevicePropertyMap.SetValue("ColorTransformationEnable", true); bool ColorTransformationEnable = grabber.DevicePropertyMap.GetValueBool("ColorTransformationEnable"); // ColorTransformationValueSelector:係数を選択("Gain00, Gain01, Gain02, Gain10, Gain11, Gain12, Gain20, Gain21, Gain22) // RGB変換マトリクスの各要素やオフセット grabber.DevicePropertyMap.SetValue("ColorTransformationValueSelector", "Gain00"); string ColorTransformationValueSelector = grabber.DevicePropertyMap.GetValueString("ColorTransformationValueSelector"); // ColorTransformationValue:選択された係数の数値を設定または取得 grabber.DevicePropertyMap.SetValue("ColorTransformationValue", 1.71); double ColorTransformationValue = grabber.DevicePropertyMap.GetValueDouble("ColorTransformationValue"); // Saturation:彩度(色の鮮やかさ)を調整 grabber.DevicePropertyMap.SetValue("Saturation", 100); double Saturation = grabber.DevicePropertyMap.GetValueDouble("Saturation"); // Hue:色相(色の回転)を調整 grabber.DevicePropertyMap.SetValue("Hue", 0.0); double Hue = grabber.DevicePropertyMap.GetValueDouble("Hue");[Color Transformation Control]の詳細を閉じる▲ -
IC4詳細・解説
MultiFrameSetOutputModeは各フレームごとに露光時間やゲインの撮影パラメータを個別に割り当てることができます。例えば、1フレーム目は短い露光時間で高速動作を記録し、2フレーム目は長い露光時間で暗部の詳細を取得する、といった設定が可能です。その結果、同じシーンを異なる条件で撮影した複数の画像を一度に得られるため、HDR合成などに活用できます。
// MultiFrameSetOutputMode の有効/無効を設定(false = 無効, true = 有効) // 有効にすると、1回のトリガーで複数のフレームを順番に出力可能 grabber.DevicePropertyMap.SetValue("MultiFrameSetOutputModeEnable", false); bool MultiFrameSetOutputModeEnable = grabber.DevicePropertyMap.GetValueBool("MultiFrameSetOutputModeEnable"); // 出力するフレーム数を指定(例: 2フレーム) // "MultiFrameSetOutputModeFrameCount_2Frames" は2枚の異なる設定で連続撮影 grabber.DevicePropertyMap.SetValue("MultiFrameSetOutputModeFrameCount", "MultiFrameSetOutputModeFrameCount_2Frames"); string MultiFrameSetOutputModeFrameCount = grabber.DevicePropertyMap.GetValueString("MultiFrameSetOutputModeFrameCount"); // 各フレームごとの露光時間を設定(単位: μs または ms。カメラ仕様による) // Frame 0 の露光時間 grabber.DevicePropertyMap.SetValue("MultiFrameSetOutputModeExposureTime0", 333); double MultiFrameSetOutputModeExposureTime0 = grabber.DevicePropertyMap.GetValueDouble("MultiFrameSetOutputModeExposureTime0"); // Frame 1 の露光時間 grabber.DevicePropertyMap.SetValue("MultiFrameSetOutputModeExposureTime1", 333); double MultiFrameSetOutputModeExposureTime1 = grabber.DevicePropertyMap.GetValueDouble("MultiFrameSetOutputModeExposureTime1"); // Frame 2 の露光時間(FrameCount が2の場合は未使用) grabber.DevicePropertyMap.SetValue("MultiFrameSetOutputModeExposureTime2", 333); double MultiFrameSetOutputModeExposureTime2 = grabber.DevicePropertyMap.GetValueDouble("MultiFrameSetOutputModeExposureTime2"); // Frame 3 の露光時間(FrameCount が2の場合は未使用) grabber.DevicePropertyMap.SetValue("MultiFrameSetOutputModeExposureTime3", 333); double MultiFrameSetOutputModeExposureTime3 = grabber.DevicePropertyMap.GetValueDouble("MultiFrameSetOutputModeExposureTime3"); // カスタムゲインを使うかどうか(false = 露光ごとに共通ゲイン, true = フレームごとに別ゲイン) grabber.DevicePropertyMap.SetValue("MultiFrameSetOutputModeCustomGain", false); bool MultiFrameSetOutputModeCustomGain = grabber.DevicePropertyMap.GetValueBool("MultiFrameSetOutputModeCustomGain"); // 各フレームごとのゲイン設定(単位: dB またはカメラ固有スケール) // Frame 0 のゲイン grabber.DevicePropertyMap.SetValue("MultiFrameSetOutputModeGain0", 0); double MultiFrameSetOutputModeGain0 = grabber.DevicePropertyMap.GetValueDouble("MultiFrameSetOutputModeGain0"); // Frame 1 のゲイン grabber.DevicePropertyMap.SetValue("MultiFrameSetOutputModeGain1", 0); double MultiFrameSetOutputModeGain1 = grabber.DevicePropertyMap.GetValueDouble("MultiFrameSetOutputModeGain1"); // Frame 2 のゲイン grabber.DevicePropertyMap.SetValue("MultiFrameSetOutputModeGain2", 0); double MultiFrameSetOutputModeGain2 = grabber.DevicePropertyMap.GetValueDouble("MultiFrameSetOutputModeGain2"); // Frame 3 のゲイン grabber.DevicePropertyMap.SetValue("MultiFrameSetOutputModeGain3", 0); double MultiFrameSetOutputModeGain3 = grabber.DevicePropertyMap.GetValueDouble("MultiFrameSetOutputModeGain3");[Multi Frame Set Output Mode]の詳細を閉じる▲ -
IC4詳細・解説
AutoFunctionsROI を設定すると、カメラは画面全体ではなく、指定した領域だけを見て自動調整を行います。つまり、その範囲の明るさや色を基準にして、露光時間やゲイン、ホワイトバランスを決めることができます。これにより、背景が明るすぎたり暗すぎたりしても影響を受けにくく、撮りたい対象物に合わせた設定が自動で選ばれるようになります。
// AutoFunctionsROIEnable:ROIを有効にする(falseだと全体画像が対象) grabber.DevicePropertyMap.SetValue("AutoFunctionsROIEnable", true); bool AutoFunctionsROIEnable = grabber.DevicePropertyMap.GetValueBool("AutoFunctionsROIEnable"); // AutoFunctionsROIPreset:ROI設定のプリセット(例:AutoFunctionsROIPreset_Full, AutoFunctionsROIPreset_Custom, AutoFunctionsROIPreset_Center50Pct, AutoFunctionsROIPreset_Center25Pct, AutoFunctionsROIPreset_BottomHalf, AutoFunctionsROIPreset_TopHalf grabber.DevicePropertyMap.SetValue("AutoFunctionsROIPreset", "AutoFunctionsROIPreset_Full"); string AutoFunctionsROIPreset = grabber.DevicePropertyMap.GetValueString("AutoFunctionsROIPreset"); // AutoFunctionsROILeft:ROIの左上X座標(画素単位) grabber.DevicePropertyMap.SetValue("AutoFunctionsROILeft", 0); double AutoFunctionsROILeft = grabber.DevicePropertyMap.GetValueDouble("AutoFunctionsROILeft"); // AutoFunctionsROITop:ROIの左上Y座標(画素単位) grabber.DevicePropertyMap.SetValue("AutoFunctionsROITop", 0); double AutoFunctionsROITop = grabber.DevicePropertyMap.GetValueDouble("AutoFunctionsROITop"); // AutoFunctionsROIWidth:ROIの幅(画素単位) grabber.DevicePropertyMap.SetValue("AutoFunctionsROIWidth", 640); double AutoFunctionsROIWidth = grabber.DevicePropertyMap.GetValueDouble("AutoFunctionsROIWidth"); // AutoFunctionsROIHeight:ROIの高さ(画素単位) grabber.DevicePropertyMap.SetValue("AutoFunctionsROIHeight", 1076); double AutoFunctionsROIHeight = grabber.DevicePropertyMap.GetValueDouble("AutoFunctionsROIHeight");[AutoFunctionsROI]の詳細を閉じる▲ -
IC4詳細・解説
LUT Control は「ルックアップテーブル(LUT)」を使って、カメラが出力する画像の明るさや色を変える機能です。LUT は「変換表」を使って画素の値を置き換える仕組みで、例えば暗い部分を持ち上げて見やすくしたり、色を反転させたり、コントラストを強くするといったことをカメラの内部で行えます。このLUTは0~256 までの「インデックス」と、それに対応する16bitの出力値で構成されています。カメラは各画素の明るさを読み取り、上位8ビットをインデックスとして使い、下位ビットで隣同士の値を滑らかに補間して変換を行います。これにより段階的ではなく滑らかな補正が可能になります。カラー画像の場合、YUVモードでは輝度成分(Y)のみ処理されますが、BGRやBayer Rawでは全ての色チャンネルに対して同じ変換が適用されます。LUTを使うときは「LUT Enable」で有効化し、必要に応じて「LUT Index」「LUT Value」で1つずつ書き換えたり、「LUT Value All」で一括設定ができます。注意点として、LUT はガンマ補正と同じ回路を使っているため、LUT を有効にするとガンマ補正は自動的にオフになります。
// LUTSelector:対象となるLUTを選択(例:Luminance, Red, Green, Blue) grabber.DevicePropertyMap.SetValue("LUTSelector", "Luminance"); string LUTSelector = grabber.DevicePropertyMap.GetValueString("LUTSelector"); // LUTEnable:選択したLUTを有効化(true:有効, false:無効) grabber.DevicePropertyMap.SetValue("LUTEnable", false); bool LUTEnable = grabber.DevicePropertyMap.GetValueBool("LUTEnable"); // LUTIndex:読み書き対象のLUTインデックス(0~256 など) grabber.DevicePropertyMap.SetValue("LUTIndex", 128); double LUTIndex = grabber.DevicePropertyMap.GetValueDouble("LUTIndex"); // LUTValue:現在の LUTIndex に対応する出力値(1~65535) grabber.DevicePropertyMap.SetValue("LUTValue", 0); double LUTValue = grabber.DevicePropertyMap.GetValueDouble("LUTValue");[LUT Control]の詳細を閉じる▲ -
IC4詳細・解説
Digital I/O Controlは、カメラに搭載されているGPIOポート(デジタル入出力端子)を制御するための機能です。カメラにはGPIOという入出力端子があり、そこから外部から信号を受け取ることも外部へ信号を出すこともできます。たとえば GPInはカメラが外部から来る信号を読む機能でスイッチやセンサーから信号が来ると「LOW(0)」や「HIGH(1)」として検出できるので、スイッチが押された瞬間に撮影を開始する、といった動作ができます。一方、GPOutはカメラから外部へ信号を送る機能で、ソフトから「1」を出すと外部機器に撮影したことを知らせたり、PLCや照明などを制御することが可能です。また、StrobeEnableを有効にすると露光に合わせてカメラがストロボ用の信号を出し、撮影と照明を同期することができます。さらに StrobeOperationを設定すれば「露光中だけストロボを点灯」といった動作が簡単にできます。
// GPIn:GPIOの入力状態(ReadOnly) // 0: LOW, 1: HIGH double GPIn = grabber.DevicePropertyMap.GetValueDouble("GPIn"); // GPOut:GPIOの出力状態(Write可能) // 例:1 を設定すると HIGH、0 で LOW grabber.DevicePropertyMap.SetValue("GPOut", 1); double GPOut = grabber.DevicePropertyMap.GetValueDouble("GPOut"); // StrobeEnable:ストロボ出力の有効化(On, Off) grabber.DevicePropertyMap.SetValue("StrobeEnable", "On"); bool StrobeEnable = grabber.DevicePropertyMap.GetValueBool("StrobeEnable"); // StrobePolarity:ストロボ出力の極性(ActiveHigh, ActiveLow) grabber.DevicePropertyMap.SetValue("StrobePolarity", "ActiveHigh"); string StrobePolarity = grabber.DevicePropertyMap.GetValueString("StrobePolarity"); // StrobeOperation:ストロボ動作モードの選択(例:"Exposure") grabber.DevicePropertyMap.SetValue("StrobeOperation", "Exposure"); string StrobeOperation = grabber.DevicePropertyMap.GetValueString("StrobeOperation");[Digital I/O Control]の詳細を閉じる▲ -
IC4詳細・解説
カメラに搭載されたレンズのズーム、フォーカス、アイリス(絞り)を制御する機能です。ズームでは画角を広くしたり狭くしたりして被写体の見え方を変え、フォーカスは被写体にピントを合わせて画像を鮮明にします。アイリスはレンズを通る光の量を調整し、明るさや被写界深度をコントロールします。
// フォーカス値を手動で1に設定(最小位置や初期位置などの調整に使用される) grabber.DevicePropertyMap.SetValue("Focus", 1); double Focus = grabber.DevicePropertyMap.GetValueDouble("Focus"); // オートフォーカス機能を実行(自動でピント調整を開始) grabber.DevicePropertyMap.ExecuteCommand("FocusAuto"); // ズーム値を手動で1に設定(最小倍率) grabber.DevicePropertyMap.SetValue("Zoom", 1); double Zoom = grabber.DevicePropertyMap.GetValueDouble("Zoom"); // アイリス(絞り)を手動で1に設定(開放側または初期値) grabber.DevicePropertyMap.SetValue("Iris", 1); double Iris = grabber.DevicePropertyMap.GetValueDouble("Iris"); // アイリスのオート設定を無効化(手動制御に切り替え) grabber.DevicePropertyMap.SetValue("IrisAuto", true); bool IrisAuto = grabber.DevicePropertyMap.GetValueBool("IrisAuto"); // IRカットフィルターを有効化(赤外線を遮断する機能をON) grabber.DevicePropertyMap.SetValue("IRCutFilterEnable", true); bool IRCutFilterEnable = grabber.DevicePropertyMap.GetValueBool("IRCutFilterEnable");[Lens Control]の詳細を閉じる▲ -
IC4詳細・解説
AutoFocusROI は、カメラのオートフォーカスを画面全体ではなく特定の領域に限定して動作させるための機能です。まず AutoFocusROIEnable をtrueに設定することで、この機能を有効にできます。その後、画像座標系に基づいて ROI の位置と大きさを指定します。
// オートフォーカス用のROI(Region of Interest, フォーカス対象領域)機能を有効化 grabber.DevicePropertyMap.SetValue("AutoFocusROIEnable", true); bool AutoFocusROIEnable = grabber.DevicePropertyMap.GetValueBool("AutoFocusROIEnable"); // ROIの左端位置を設定(画像座標系におけるX座標, ピクセル単位) grabber.DevicePropertyMap.SetValue("AutoFocusROILeft", 0); double AutoFocusROILeft = grabber.DevicePropertyMap.GetValueDouble("AutoFocusROILeft"); // ROIの上端位置を設定(画像座標系におけるY座標, ピクセル単位) grabber.DevicePropertyMap.SetValue("AutoFocusROITop", 0); double AutoFocusROITop = grabber.DevicePropertyMap.GetValueDouble("AutoFocusROITop"); // ROIの幅を設定(ピクセル単位) // ここでは640ピクセル幅の領域をフォーカス対象に指定 grabber.DevicePropertyMap.SetValue("AutoFocusROIWidth", 640); double AutoFocusROIWidth = grabber.DevicePropertyMap.GetValueDouble("AutoFocusROIWidth"); // ROIの高さを設定(ピクセル単位) // ここでは480ピクセル高さの領域をフォーカス対象に指定 grabber.DevicePropertyMap.SetValue("AutoFocusROIHeight", 480); double AutoFocusROIHeight = grabber.DevicePropertyMap.GetValueDouble("AutoFocusROIHeight");[AutoFocusROI]の詳細を閉じる▲ -
IC4詳細・解説
Chunk Data Control は、カメラが出力する画像フレームに追加の「メタデータ」を埋め込む仕組みを制御する機能です。通常、Chunk Dataを有効化すると、各フレームに撮影条件や内部状態といった補足情報を一緒に付与できます。例えば、露光時間(ChunkExposureTime)、ゲイン(ChunkGain)があります。これらは後処理や解析の際に画像と紐づけて利用できます。
使用するには、まずChunkModeActiveを有効化してチャンク出力を許可することで、選択した情報が各フレームに記録されるようになります。埋め込まれたデータは画像バッファの一部として受け取れるため、IC4 SDKのFrameQueueSinkやバッファ操作のAPI(connect_chunkdata)を使って取り出すことが可能です。// Chunkモードを有効化(画像ごとにメタデータを埋め込む機能をONにする) grabber.DevicePropertyMap.SetValue("ChunkModeActive", true); bool ChunkModeActive = grabber.DevicePropertyMap.GetValueBool("ChunkModeActive"); // どの種類のChunk情報を埋め込むか選択(この例では"Image":画像関連のチャンクを指定) grabber.DevicePropertyMap.SetValue("ChunkSelector", "Image"); string ChunkSelector = grabber.DevicePropertyMap.GetValueString("ChunkSelector"); // 選択されたChunk項目("Image")の埋め込み有無を確認(trueで有効) bool ChunkEnable = grabber.DevicePropertyMap.GetValueBool("ChunkEnable"); // チャンクに含まれる露光時間(撮影ごとの実際のExposureTime)を取得 double ChunkExposureTime = grabber.DevicePropertyMap.GetValueDouble("ChunkExposureTime"); // チャンクに含まれるゲイン(撮影時のGain設定)を取得 double ChunkGain = grabber.DevicePropertyMap.GetValueDouble("ChunkGain"); // チャンクに含まれるMultiFrameSetのIDを取得(同期撮影やマルチカメラ時のセット識別用) double ChunkMultiFrameSetId = grabber.DevicePropertyMap.GetValueDouble("ChunkMultiFrameSetId"); // チャンクに含まれる各フレームのIDを取得(セット内でのフレームの通し番号) double ChunkMultiFrameSetFrameId = grabber.DevicePropertyMap.GetValueDouble("ChunkMultiFrameSetFrameId");[Chunk Data Control]の詳細を閉じる▲ -
IC4詳細・解説
カメラ内部で発生する特定の出来事(露光終了、トリガーミス、外部信号の立上り/立下りなど)を選択して監視し、通知を有効化する機能です。EventSelectorで監視対象を選び、EventNotificationで通知のON/OFFを設定します。発生時刻(Timestamp)やフレームIDを取得することで、画像との紐づけや同期処理が可能です。
イベントの通知を有効にするには、EventNotificationを"On"に設定します。これにより、選択したイベントが実際に発生したとき、ソフトウェア側でその情報を受け取り処理を行うことができるようになります。
Line1RisingEdgeを使って外部信号の立ち上がりエッジを検知したい場合の具体的な手順は、以下の解説をご参照ください。ライブ表示+カメラへの外部トリガー入力で静止画保存
IC Imaging Control Ver4.0(C#/VB.NET) サンプルプログラム//EventSelector:監視するイベントの種類を選択 //例: ExposureEnd, FrameTriggerMissed, Line1RisingEdge, Line1FallingEdge, Test grabber.DevicePropertyMap.SetValue("EventSelector", "ExposureEnd"); string EventSelector = grabber.DevicePropertyMap.GetValueString("EventSelector"); //EventNotification:選択したイベント通知を有効化または無効化("Off", "On") grabber.DevicePropertyMap.SetValue("EventNotification", "On"); string EventNotification = grabber.DevicePropertyMap.GetValueString("EventNotification");[Event Control]の詳細を閉じる▲ -
IC4詳細・解説
EventExposureEndData は、カメラ内部で「露光が終了した瞬間」に発火するイベントです。これにより、フレームが物理的に取得された正確なタイミングを把握できます。EventExposureEnd はこの通知の有効/無効を切り替える設定で、EventExposureEndTimestamp はカメラ内部クロックに基づく露光終了時刻を示します。複数カメラ間で露光終了タイミングを比較・評価したい場合に利用してください。
一方、画像の保存・表示・画像処理といった画素データの扱いは、IC Imaging Control 4 の QueueSink(コールバック)側で行います。すなわち、タイミングの基準は EventExposureEndData、実データの処理は QueueSink、と役割を分けて使用してください。// EventExposureEnd:露光終了イベントの通知有効化(true:有効, false:無効)(ReadOnly) double EventExposureEnd = grabber.DevicePropertyMap.GetValueDouble("EventExposureEnd"); // EventExposureEndTimestamp:露光終了のタイムスタンプ(ReadOnly) // 単位:通常ナノ秒。カメラ内部クロック基準での露光終了時刻 double EventExposureEndTimestamp = grabber.DevicePropertyMap.GetValueDouble("EventExposureEndTimestamp"); // EventExposureEndFrameID:露光終了が発生したフレームのID(ReadOnly) // フレームとイベントの対応づけを行うために使用 double EventExposureEndFrameID = grabber.DevicePropertyMap.GetValueDouble("EventExposureEndFrameID");[EventExposureEndData]の詳細を閉じる▲ -
IC4詳細・解説
外部トリガーがカメラに送信されたにもかかわらず、何らかの理由で露光が開始できなかった「トリガーミス(FrameTriggerMissed)」のイベントです。EventFrameTriggerMissedはその通知の有効/無効を制御するプロパティで、trueに設定することでイベント監視を有効化します。また、EventFrameTriggerMissedTimestampは、そのトリガーミスが発生した時刻を、カメラ内部のクロックに基づいて計測されます。付随するメタデータには、トリガ信号の識別子や発生時刻が含まれるため、ホスト側ではどのフレームで失敗が起きたのかを特定でき、同期精度の検証やシステムのパフォーマンス改善に活用できます。
// EventFrameTriggerMissed:トリガーミスのイベント通知を有効化(true:有効, false:無効) // 外部トリガーが来たが、露光が始まらなかった、またはカメラが対応できなかった場合に通知 double EventFrameTriggerMissed = grabber.DevicePropertyMap.GetValueDouble("EventFrameTriggerMissed"); // EventFrameTriggerMissedTimestamp:トリガーミスが発生した時刻(ReadOnly) // 単位はナノ秒やマイクロ秒など(カメラ依存)、カメラ内クロック基準 double EventFrameTriggerMissedTimestamp = grabber.DevicePropertyMap.GetValueDouble("EventFrameTriggerMissedTimestamp");[EventFrameTriggerMissedData]の詳細を閉じる▲ -
IC4詳細・解説
カメラのGPIOに入力される外部信号の「立ち上がりエッジ(LOW→HIGHの変化)」を検出するイベントです。EventLine1RisingEdgeはそのイベント通知の有効・無効を制御するプロパティで、これを有効にすることで、外部トリガー信号がカメラに入力された瞬間を検出し、アプリケーション側に通知させることができます。また、EventLine1RisingEdgeTimestamp は、外部トリガーの立ち上がりが発生した時刻を示すプロパティで、タイムスタンプを取得できます。ただし、この機能は外部 I/O 信号を直接監視しているため、ノイズによるチャタリングがあると、1回の入力にもかかわらず複数回のイベントが発生してしまう場合があります。そのため、安定した検出を行うには、トリガー機能の「デバウンス設定」といった機能を併用してください。
// EventLine1RisingEdge:Line1(外部信号)の立ち上がりエッジ検出イベントを有効化(true:有効, false:無効) // トリガー入力やGPIO入力の立ち上がりを検出するために使用 string EventLine1RisingEdge = grabber.DevicePropertyMap.GetValueString("EventLine1RisingEdge"); // EventLine1RisingEdgeTimestamp:Line1立ち上がりエッジが検出された時のタイムスタンプ(ReadOnly) // 単位:ナノ秒やマイクロ秒(カメラ内部クロックに基づく) double EventLine1RisingEdgeTimestamp = grabber.DevicePropertyMap.GetValueDouble("EventLine1RisingEdgeTimestamp");[Event Line1 Rising Edge Data]の詳細を閉じる▲ -
IC4詳細・解説
EventLine1FallingEdgeDataは、カメラの GPIO に入力される外部信号が「立ち下がりエッジ(HIGH→LOW)」に変化した瞬間を検出して通知するイベントです。これを有効化すると、外部トリガー信号がOFFになった正確なタイミングをカメラ側から知らせることができます。付随するタイムスタンプ情報により、その変化が起こった時刻を正確に把握できるため、外部機器の動作との同期の検証等に有効です。立ち下がりエッジは、例えば「信号がHIGHの間だけ処理を行い、LOWになったら終了する」といった制御に利用されます。ただし、外部信号にノイズやチャタリングが含まれると不要なイベントが発生する可能性があるため、ソフトウェアでのデバウンス処理を組み合わせるようにしてください。
// EventLine1FallingEdge:Line1 の立ち下がりエッジ(HIGH → LOW)を検出するイベント通知を有効化 // GPIO入力の負エッジ検出に使用(外部機器との同期に便利) bool EventLine1FallingEdge = grabber.DevicePropertyMap.GetValueBool("EventLine1FallingEdge"); // EventLine1FallingEdgeTimestamp:Line1 の立ち下がりエッジが発生した時刻(ReadOnly) // 単位:ナノ秒またはマイクロ秒(カメラ内部クロック基準) double EventLine1FallingEdgeTimestamp = grabber.DevicePropertyMap.GetValueDouble("EventLine1FallingEdgeTimestamp");[EventLine1FallingEdgeData]の詳細を閉じる▲ -
IC4詳細・解説
カメラのフォーカス動作が完了したことを通知するイベントです。オートフォーカスやフォーカス制御コマンドによってレンズが移動した際、その処理が終了したタイミングでイベントが発生します。このデータには、イベント自体を識別する ID、発生時刻を示すタイムスタンプ、そして完了後のフォーカス位置が含まれます。
// フォーカス移動完了イベントのフラグ値(イベントが発生したかどうかを示す) double EventFocusMoveCompleted = grabber.DevicePropertyMap.GetValueDouble("EventFocusMoveCompleted"); // フォーカス移動完了が検出されたタイムスタンプ(時刻同期や遅延解析に使用) double EventFocusMoveCompletedTimestamp = grabber.DevicePropertyMap.GetValueDouble("EventFocusMoveCompletedTimestamp"); // フォーカス移動完了時点でのフォーカス位置(レンズのステップ値や焦点位置を表す) double EventFocusMoveCompletedFocus = grabber.DevicePropertyMap.GetValueDouble("EventFocusMoveCompletedFocus");[EventFocusMoveCompletedData]の詳細を閉じる▲ -
IC4詳細・解説
カメラのズーム動作が完了したことを通知するイベントです。ズーム制御コマンドによってレンズが移動した際、その処理が終了したタイミングでイベントが発生します。このデータには、イベント自体を識別する ID、発生時刻を示すタイムスタンプ、そして完了後のズーム位置が含まれます。
// ズーム移動完了イベントのフラグ値(イベントが発生したかどうかを示す) double EventZoomMoveCompleted = grabber.DevicePropertyMap.GetValueDouble("EventZoomMoveCompleted"); // ズーム移動完了が検出されたタイムスタンプ(同期動作やシーケンス制御に使用) double EventZoomMoveCompletedTimestamp = grabber.DevicePropertyMap.GetValueDouble("EventZoomMoveCompletedTimestamp"); // ズーム移動完了時点でのズーム位置(倍率やステップ値などを示す) double EventZoomMoveCompletedZoom = grabber.DevicePropertyMap.GetValueDouble("EventZoomMoveCompletedZoom");[EventZoomMoveCompletedData]の詳細を閉じる▲ -
IC4詳細・解説
カメラに搭載された「テストイベント」機能の確認および制御をしています。EventTest は、カメラ内部で擬似的に生成されるイベントで、実際の撮像イベントではなく、イベント通知の機能が正しく機能しているかを確認するために使用されます。TestEventGenerateを実行すると、テストイベントが発生し、タイムスタンプEventTestTimestampなどの情報を取得することができます。
// EventTest:カメラのテストイベント通知を有効化(true: 有効, false: 無効) // ※これはイベント通知機構のテスト用途で、実運用では使用しないことが一般的です double EventTest = grabber.DevicePropertyMap.GetValueDouble("EventTest"); // EventTestTimestamp:直近のテストイベントが発生した時刻(ReadOnly) // 単位:ナノ秒またはマイクロ秒(カメラ内部のクロック基準) double EventTestTimestamp = grabber.DevicePropertyMap.GetValueDouble("EventTestTimestamp");[EventTestData]の詳細を閉じる▲ -
IC4詳細・解説
Test Control は、カメラやアプリケーションの機能が正しく動作しているかを検証するための仕組みで、主に開発やデバッグ時に使用されます。例えば TestEventGenerate を実行すると、カメラは擬似的なイベントを生成し、アプリケーション側に通知が届くかどうかを確認できます。これにより、イベント処理の実装が正しく行われているかを簡単に検証できます。
// TestEventGenerate:テストイベント(EventTest)をソフトウェアから強制的に発生させるためのコマンド grabber.DevicePropertyMap.ExecuteCommand("TestEventGenerate");[Test Control]の詳細を閉じる▲ -
IC4詳細・解説
User Set Controlは、カメラの撮影条件を「プリセット」として保存・呼び出しできる機能で、よく使う設定を素早く再現するのに役立ちます。まず UserSetSelectorで対象プリセットを選択します(例:工場出荷時の "Default"、ユーザー保存用の "UserSet1"、"UserSet2" など)。UserSetLoadに"Execute"を指定すると、そのプリセットが即時に読み込まれ、以後はその条件で動作します。現在の設定を保存したい場合はUserSetSaveに"Execute"を渡すと、選択中のプリセットへ上書き保存され、同じ条件を再利用できます。これにより、シーンごとに細かな再調整を行う手間が減り、安定した撮影条件の再現性が向上します。
一方、アプリケーション開発では、カメラ内のユーザーセットではなく、PC 側で状態をXMLファイルとして管理する方法が一般的です。IC Imaging Control の DeviceOpenFromState / DeviceSaveState を使えば、設定をファイル化してバージョン管理や配布が容易になります。Class Grabber
IC Imaging Control Ver4.0(.NET) APIリファレンスマニュアル// UserSetSelector:操作対象のユーザー設定プリセットを選択 // 例:"Default", "UserSet1", "UserSet2"(カメラによって異なる) grabber.DevicePropertyMap.SetValue("UserSetSelector", "UserSet1"); string UserSetSelector = grabber.DevicePropertyMap.GetValueString("UserSetSelector"); // UserSetLoad:選択したユーザー設定をカメラに読み込む(=その設定で即時動作開始) // "Execute" を渡すことで即時反映される grabber.DevicePropertyMap.SetValue("UserSetLoad", "Execute"); // UserSetSave:現在の設定を選択中のプリセットに保存(次回以降の電源ONでも保持されることあり) // こちらも "Execute" を指定する grabber.DevicePropertyMap.SetValue("UserSetSave", "Execute"); // UserSetDefault:カメラの起動時に自動読み込みされるプリセットを指定 // 例:"Default", "UserSet1" など、UserSetSelectorと同じ値 grabber.DevicePropertyMap.SetValue("UserSetDefault", "UserSet1"); string UserSetDefault = grabber.DevicePropertyMap.GetValueString("UserSetDefault");[User Set Control]の詳細を閉じる▲ -
IC4詳細・解説
Software Transform Controlは、カメラの画像処理機能をオンにするとコントラスト調整やシャープネス強調、ノイズ除去、WDR(ワイドダイナミックレンジ)補正といった画像処理が有効になります。これらはハードウェア内部で処理されるため、PC側で追加の画像処理を行う必要がなく、リアルタイムで効果を確認できます。さらに、ShowOverlayをtrue に設定すれば、ライブビュー画面上にカメラのドライバー情報や解像度、フレームレート、フレーム数といった情報を重ねて表示することができ、撮影状況を確認しながら調整できます。
// SoftwareTransformEnable:有効にすると、シャープネスやコントラストなどのプロパティが有効になります grabber.DevicePropertyMap.SetValue("SoftwareTransformEnable", true); bool SoftwareTransformEnable = grabber.DevicePropertyMap.GetValueBool("SoftwareTransformEnable"); // Contrast:画像全体のコントラストを調整 // 値を大きくすると明暗の差が強調される grabber.DevicePropertyMap.SetValue("Contrast", 1.2); double Contrast = grabber.DevicePropertyMap.GetValueDouble("Contrast"); // Sharpness:輪郭の強調度 grabber.DevicePropertyMap.SetValue("Sharpness", 0); double Sharpness = grabber.DevicePropertyMap.GetValueDouble("Sharpness"); // Denoise:ノイズ低減処理の強さ grabber.DevicePropertyMap.SetValue("Denoise", 0.4); double Denoise = grabber.DevicePropertyMap.GetValueDouble("Denoise"); // ShowOverlay:画像にオーバーレイを表示する(true: 表示, false: 非表示) // 主に表示確認用 grabber.DevicePropertyMap.SetValue("ShowOverlay", true);ShowOverlayしたときの画像
[Software Transform Control]の詳細を閉じる▲ -
IC4詳細・解説
Tone Mapping は、センサーが捉えた広い明暗の情報を人の目で見やすい範囲に圧縮し、逆光や白飛び・黒つぶれを抑えて階調を整える処理です。Tone Mappingを有効にすると自動で補正が行われ、Tone Mapping AutoをONにすればカメラがシーンに応じて補正量を自動調整します。補正のかかり具合は Tone_Mapping_Intensity(0.0〜1.0)で調整でき、値を大きくすると明るい部分と暗い部分の差が小さくなり、全体がなだらかに見える仕上がりになります。さらに、Tone_Mapping_Global_Brightness_Factor を使うことで画像全体の明るさを細かく調整できます。
// ToneMappingEnable:トーンマッピング(HDR補正)の有効化(true: 有効, false: 無効) // 明暗差の大きい映像を視認性よく補正する処理。 grabber.DevicePropertyMap.SetValue("ToneMappingEnable", true); bool ToneMappingEnable = grabber.DevicePropertyMap.GetValueBool("ToneMappingEnable"); // ToneMappingIntensity:トーンマッピングの強度(0.0 ~ 1.0) // 値が大きいほど明るい部分と暗い部分の差が少なくなる grabber.DevicePropertyMap.SetValue("ToneMappingIntensity", 0.7); double ToneMappingIntensity = grabber.DevicePropertyMap.GetValueDouble("ToneMappingIntensity"); // ToneMappingGlobalBrightness:トーンマッピング処理後の全体的な明るさ // 画像全体の明るさを調整したい場合に使用 grabber.DevicePropertyMap.SetValue("ToneMappingGlobalBrightness", 0.5); double ToneMappingGlobalBrightness = grabber.DevicePropertyMap.GetValueDouble("ToneMappingGlobalBrightness");[Tone Mapping]の詳細を閉じる▲


