カメラのパラメーター設定#
Exposure Time#
Exposure Timeは、各フレームでカメラセンサーが光に露光される時間を定義します。これは画像の明るさ、モーションブラー、および信号Qualityに直接影響するため、画像取得において最も重要なパラメーターの1つです。
Exposure Timeの影響#
露光中、センサーは光子を集めて電気信号に変換します。Exposure Timeが長いほど、より多くの光が蓄積されます。この可視化は、これをまとめたものです:
Exposure Timeの長さには、次のような影響があります:
- 明るさ
- 露光を長くすると、明るさが増します。
- 露光を短くすると、明るさが低下します。
- モーションブラー
- 長時間の露光では、動くオブジェクトがぼやけて表示されます。
- 短時間の露光では、動くオブジェクトが静止して表示されます。
- 画像ノイズ
- 非常に短い露光では、画像にノイズが発生する場合があります(低信号)。
- 露光を長くすると信号Qualityが向上しますが、モーションブラーが発生する可能性があります。
アプリケーションに応じて、Exposure Timeを指定する際にどの効果を優先するかを決定する必要があります。次の表が参考になります。
| 目標 | 推奨される露光 |
|---|---|
| 高速な動きを静止させる | 短い露光 |
| 明るさを最大化する | 長い露光 |
| 安定した測定 | バランスの取れた露光 |
設定例#
ExposureAuto = Off手動制御を確実にします。ExposureTimeで指定されます マイクロ秒 (µs).
主なポイント#
Exposure Timeは、常に関連して選択する必要があります:
- シーンの明るさ
- 移動速度
- フレームレートの要件
適切なExposure Timeの指定は、信頼性の高いビジョンシステムを構築する上で基本的なステップです。
camera.ExposureAuto.Value = "Off"
camera.ExposureTime.Value = 3000 # Value is in microseconds. Check ValueRange for valid values.
#alternatively:
camera.ExposureTimeAbs.SetValue(3000, pylon.FloatValueCorrection_ClipToRange)
Gain#
ゲインは、露光後のセンサー信号の電気的増幅を制御します。Exposure Timeとは異なり、ゲインは取り込まれる光の量を増加させるのではなく、既存の信号を増幅します。この視覚化はこれを要約しています:
Low gain → weak amplification → darker but cleaner image
High gain → strong amplification → brighter but noisier image
ゲインの効果#
- 明るさ
- ゲインを上げると画像が明るくなります。
- 実際の信号強度を追加するわけではありません。すでにキャプチャされたものを増幅するだけです。
- 画像ノイズ
- ゲインを高くすると、信号とノイズの両方が増幅されます。
- 過度なゲインは画像のざらつきにつながります。
- ディテールの Quality
- ゲインが高いと、コントラストや微細なディテールの視認性が低下する場合があります。
設定例#
主なポイント#
- (モーションブラーが発生するリスクがあるなどの理由で) Exposure Timeを長くできない場合は、ゲインを使用します。
- 画質と信号対雑音比が重要な場合は、過度なゲインを避けてください。
一般的なルール:可能な限り、高ゲインよりも長めのExposure Timeを優先してください。
ROI#
ROI (Region of Interest)は、各フレームで実際に読み出され転送されるセンサーの部分を定義します。デフォルトでは、ROIのサイズはセンサーと同じ(フル解像度)です。幅と高さを変更することで、シーンの関連部分のみに焦点を合わせることができます。この視覚化はこれを要約しています:
ROIを縮小した場合、指定された領域外のピクセルは読み出されず、転送もされません。
次を使用してROIを調整できます: Width, Height, OffsetX および OffsetY パラメータ。 Width + OffsetX によって制限されます MaxWidth および Height + OffsetY によって制限されます MaxHeight.
情報
- ROIの寸法にはハードウェア上の制約(インクリメント、アライメント)が適用されます。
- 最大ROIはセンサーのフル解像度に等しくなります。
- ROIを変更するには、画像の取り込みを停止する必要があります。
ROI変更の影響#
- フレームレートの向上: 1フレームあたりのデータ量が減るため、読み出しが高速になり、フレームレート(fps)が向上します。
- 帯域幅の削減: これはGigEカメラにとって特に重要です。
- 処理負荷の軽減: 画像サイズが小さくなると、画像処理(OpenCV/AI)をより高速に行うことができます。
- 関心領域へのフォーカス: シーン内の不要な部分を除外することができます。
次の表は、より小さなROIがアプリケーションにどのようなメリットをもたらすかの指針となります。
| 使用事例 | より小さなROIのメリット |
|---|---|
| 小さなオブジェクトのトラッキング | 処理の高速化とノイズの低減 |
| 高速検査 | フレームレートの向上 |
| 特定エリアでのエッジ検出 | 演算処理の削減 |
設定例#
主なポイント#
ROIの縮小は、マシンビジョンシステムにおいて最も効果的なパフォーマンス向上ツールの1つです。ソース側でのデータ量を削減することで、以下の面が改善されます:
- スループット
- レイテンシー
- システムの拡張性
ソフトウェアによる画像トリミングとは異なり、ROIを縮小すると、データがパイプラインに入る前に不要なデータが排除されます。
Static Defect Pixel Correction#
Defect Pixel Correctionにより、センサーの個々のピクセル間における感度差の影響を最小限に抑えることができます。この機能はすべてのカメラで使用できるわけではありません。そのため、現在のデバイスでこの機能が利用できない場合に備えておくことが重要です。
情報
- 使用
pylon.StaticDefectPixelCorrectionをcamera.NodeMap. - 使用
ListType_Factory工場出荷時の欠陥ピクセルを読み取るため。 - 使用
ListType_Userユーザー独自の欠陥ピクセルを読み取り/更新するため。 - 例外処理
pylon.RuntimeExceptionおよびpylon.InvalidArgumentExceptionサポートされていないモデルの場合。
設定例#
from pypylon import pylon
with pylon.InstantCamera(pylon.FirstFound) as camera:
# Read the factory defect pixel list.
factory_ok, factory_pixels = pylon.StaticDefectPixelCorrection.GetDefectPixelList(
camera.NodeMap,
[],
pylon.StaticDefectPixelCorrection.ListType_Factory,
)
# Build/update the user list as (x, y) or (x, y, type) tuples.
user_pixels = [(100, 200), (300, 400, 0)]
try:
normalize_ok, normalized_pixels = pylon.StaticDefectPixelCorrection.NormalizePixelList(
camera.NodeMap,
user_pixels,
)
set_ok, written_pixels = pylon.StaticDefectPixelCorrection.SetDefectPixelList(
camera.NodeMap,
normalized_pixels,
pylon.StaticDefectPixelCorrection.ListType_User,
)
get_ok, read_back_pixels = pylon.StaticDefectPixelCorrection.GetDefectPixelList(
camera.NodeMap,
[],
pylon.StaticDefectPixelCorrection.ListType_User,
)
except (pylon.RuntimeException, pylon.InvalidArgumentException):
# Camera does not provide this feature.
pass
主なポイント#
静的欠陥ピクセル補正はデバイス依存の機能として扱い、利用可能な場合は使用し、利用できない場合は適切にフォールバック処理を行ってください。