Configuring Camera Parameters#
Exposure Time#
曝光時間決定了相機感光元件在每幀畫面中曝光的時間長短。這是影像擷取過程中最重要的參數之一,因為它會直接影響影像的亮度、動態模糊以及訊號品質。
影響Exposure Time#
在曝光過程中,感光元件會收集光子並將其轉換為電訊號。曝光時間越長,累積的光量就越多。此圖示概括了這一點:
曝光時間的長短會產生以下影響:
- 亮度
- 較長的曝光時間會提高亮度。
- 曝光時間越短,亮度就越低。
- 動態模糊
- 長時間曝光會導致移動的物體呈現模糊狀態。
- 短曝光時間會使移動的物體看起來彷彿靜止不動。
- 影像雜訊
- 曝光時間過短可能會導致影像出現雜訊(訊號微弱)。
- 較長的曝光時間可提升訊號品質,但可能會造成動態模糊。
根據您的應用情境,在設定曝光時間時,必須決定應優先考量哪種效果。下表可供參考。
| 目標 | 建議曝光值 |
|---|---|
| 凍結快動作 | 短曝光 |
| 將亮度調至最高 | 長曝光 |
| 穩定的測量 | 均衡的曝光 |
設定範例#
ExposureAuto = Off確保可進行手動控制。ExposureTime在 微秒 (µs).
重點摘要#
選擇曝光時間時,必須始終根據以下因素來決定:
- 場景亮度
- 運動速度
- 幀率要求
設定正確的曝光時間,是建置可靠視覺系統的關鍵步驟。
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#
增益控制的是曝光後感測器訊號的電子放大程度。與曝光時間不同,增益並不會增加所擷取的光量,而是放大現有的訊號。以下圖解對此進行了總結:
Low gain → weak amplification → darker but cleaner image
High gain → strong amplification → brighter but noisier image
增益的影響#
- 亮度
- 提高增益會使影像更明亮。
- 這並不會增加實際的訊號強度,它只是放大已經接收到的訊號罷了。
- 影像雜訊
- 較高的增益會同時放大訊號和雜訊。
- 過高的增益會導致影像出現顆粒感。
- 詳細資訊Quality
- 高增益可能會降低對比度,並影響細部細節的清晰度。
設定範例#
重點摘要#
- 當無法延長曝光時間時(例如,因擔心造成運動模糊),請使用增益。
- 當影像品質與信噪比至關重要時,應避免使用過高的增益。
一般原則:只要可能,應優先選擇較長的曝光時間,而非較高的增益。
ROI#
感興趣區域(ROI)定義了每幀畫面中實際被讀出並傳輸的感測器部分。預設情況下,ROI 的大小與感測器相同(全解析度)。透過調整其寬度和高度,您可以僅聚焦於場景中的相關部分。此視覺化圖示對此進行了總結:
若降低 ROI,指定區域外的任何像素將不會被讀出或傳輸。
您可以使用 Width, Height, OffsetX 進行明確的生命週期管理即呼叫 OffsetY 參數。 Width + OffsetX 受到以下因素的限制: MaxWidth 進行明確的生命週期管理即呼叫 Height + OffsetY 受……限制 MaxHeight.
資訊
- ROI 的尺寸受硬體限制(增量、對齊)。
- 最高投資報酬率等於感測器的完整解析度。
- 若要變更 ROI,必須停止影像擷取。
ROI 變化的影響#
- 幀率提升:每幀的資料量減少,意味著讀出速度更快,幀率(fps)也更高。
- 頻寬降低:這對 GigE 攝影機而言尤為重要。
- 降低處理負載:較小的影像可加快影像處理速度(OpenCV/AI)。
- 聚焦相關區域:讓您能夠忽略畫面中不相關的部分。
下表可作為參考,說明較小的 ROI 如何為您的應用程式帶來好處。
| 使用情境 | 較低投資報酬率(ROI)的優勢 |
|---|---|
| 追蹤小型物體 | 處理速度更快,雜訊更少 |
| 高速檢測 | 提高幀率 |
| 區域內的邊緣偵測 | 減少運算量 |
設定範例#
重點摘要#
降低 ROI 是機器視覺系統中最有效的效能優化工具之一。透過在源頭減少資料量,您能改善以下幾個方面:
- 吞吐量
- 延遲
- 系統可擴展性
與透過軟體裁切影像不同,縮小感測區域(ROI)能在資料進入處理流程之前,先剔除不必要的数据。
靜態缺陷像素修正#
透過缺陷像素校正功能,您可以將感光元件中各像素靈敏度差異所造成的影響降至最低。並非所有相機都具備此功能。因此,必須預先做好準備,以防當前裝置不具備此功能。
資訊
- 使用
pylon.StaticDefectPixelCorrection與camera.NodeMap. - 使用
ListType_Factory用以讀取廠方提供的缺陷像素。 - 使用
ListType_User用以讀取/更新特定使用者的缺陷像素。 - Catch
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
重點摘要#
將靜態缺陷像素校正視為一項取決於裝置的功能:若功能可用則加以運用;若不可用,則應平穩地降低效能。