設定相機參數#
Exposure Time#
The exposure time 定義了相機感光元件針對每張畫格感光的時間長度。它是影像擷取中最重要的 Property 之一,因為它會直接影響影像亮度、動態模糊和訊號 Quality。
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#
gain 控制感光元件訊號在曝光後的電子放大。與 Exposure Time 不同,gain 不會增加所擷取的進光量,而是放大既有的訊號。此視覺化圖表總結了這一點:
Low gain → weak amplification → darker but cleaner image
High gain → strong amplification → brighter but noisier image
Gain 的影響#
- 亮度
- 增加 gain 會使影像變亮。
- 不會增加實際的訊號強度,只會放大已經擷取的內容。
- 影像雜訊
- 較高的 gain 會同時放大訊號與雜訊。
- 過高的 gain 會導致影像產生雜訊。
- 細節 Quality
- 高 gain 可能會降低對比度和細節可見度。
設定範例#
重點整理#
- 當無法增加 Exposure Time 時(例如為了避免產生動態模糊),請使用 gain。
- 當影像 Quality 與訊噪比至關重要時,請避免過高的 gain。
一般原則:儘可能優先選擇較長的 Exposure Time,而非較高的 gain。
ROI#
region of interest (ROI) 定義了每個影格實際讀取並傳輸的感光元件區域。依預設,ROI 的大小與感光元件相同(全解析度)。透過變更其寬度和高度,您可以只聚焦於場景中相關的部分。此視覺化圖表總結了這一點:
如果您縮減 ROI,指定區域之外的任何像素將不會被讀取或傳輸。
您可以使用以下工具調整 ROI: Width, Height, OffsetX 和 OffsetY 參數的狀態。 Width + OffsetX 受限於 MaxWidth 和 Height + OffsetY 受限於 MaxHeight.
資訊
- ROI 尺寸受到硬體限制(增量、對齊)。
- 最大 ROI 等於完整的感光元件解析度。
- 若要變更 ROI,必須先停止影像擷取。
ROI 變更的影響#
- 提高影格率:每張影格的資料量越少,意味著讀取速度更快、影格率 (fps) 更高。
- 降低頻寬:這對於 GigE 相機而言尤其重要。
- 降低處理負載:較小的影像有助於加快影像處理 (OpenCV/AI) 的速度。
- 聚焦於相關區域:允許您忽略場景中不相關的部分。
下表可作為參考,說明較小的 ROI 如何為您的應用帶來效益。
| Use Case | 較小 ROI 的效益 |
|---|---|
| 追蹤小型物件 | 更快的處理速度與更低的雜訊 |
| 高速檢測 | 提高幀率 |
| 區域內的邊緣偵測 | 減少運算量 |
設定範例#
重點整理#
縮小 ROI 是機器視覺系統中最有效的效能優化工具之一。透過在資料來源端減少資料量,您可以改善以下幾個方面:
- 產能
- 延遲
- 系統擴充性
與軟體影像裁切不同,縮小 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
重點整理#
將靜態壞點校正視為裝置相依功能:有支援時即可使用,若不支援則採取相容的降級處理。