配置相机参数#
Exposure Time#
Exposure Time 用于定义每帧图像中相机传感器曝光于光线下的时间长度。它是图像采集最重要的参数之一,因为它直接影响图像亮度、运动模糊和信号Quality。
Effects of Exposure Time#
在曝光过程中,传感器会收集光子并将其转换为电信号。Exposure Time越长,累积的光线就越多。此图表总结了该过程:
Exposure Time的长短会产生以下影响:
- 亮度
- 较长的曝光时间会增加亮度。
- 较短的曝光时间会降低亮度。
- 运动模糊
- 长曝光会导致运动物体出现模糊。
- 短曝光会导致运动物体呈现静止状态。
- 图像噪点
- 非常短的曝光可能会导致图像噪点较多(信号较弱)。
- 较长的曝光可以改善信号Quality,但可能会引入运动模糊。
根据您的应用需求,在指定 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#
增益 (gain) 控制曝光后传感器信号的电子放大。与曝光时间不同,增益不会增加捕获的光量,而是放大现有信号。以下可视化图表总结了这一点:
Low gain → weak amplification → darker but cleaner image
High gain → strong amplification → brighter but noisier image
增益的影响#
- 亮度
- 增加增益会使图像变亮。
- 不会增加实际信号强度。它只会放大已经捕获的内容。
- 图像噪点
- 较高的增益会同时放大信号和噪声。
- 过高的增益会导致图像出现颗粒感。
- Detail Quality
- 高增益可能会降低对比度和精细细节的可视性。
配置示例#
核心要点#
- 当您无法增加曝光时间时(例如,由于存在产生运动模糊的风险),请使用增益。
- 当图像 Quality 和信噪比至关重要时,请避免使用过高的增益。
一般规则:尽可能优先选择较长的曝光时间,而不是较高的增益。
ROI#
感兴趣区域 (ROI) 定义了为每一帧实际读出并传输的传感器部分。默认情况下,ROI 的大小与传感器相同(完整分辨率)。更改其宽度和高度可让您仅专注于场景的相关部分。以下可视化图表总结了这一点:
如果您减小 ROI,指定区域之外的任何像素都不会被读出或传输。
您可以使用以下工具调整 ROI: Width, Height, OffsetX 和 OffsetY Property。 Width + OffsetX 受限于 MaxWidth 和 Height + OffsetY 受限于 MaxHeight.
信息
- ROI 尺寸受硬件限制(步进、对齐)。
- 最大 ROI 等于完整的传感器分辨率。
- 要更改 ROI,必须停止图像采集。
Effects of ROI Changes#
- 提高帧率:每帧的数据量更少意味着更快的读出速度和更高的帧率 (fps)。
- 降低带宽:这对于 GigE 相机尤为重要。
- 降低处理负载:较小的图像可实现更快的图像处理 (OpenCV/AI)。
- 聚焦相关区域:允许您忽略场景中无关的部分。
下表可作为指导,说明较小的 ROI 如何使您的应用受益。
| 用例 | 较小 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
核心要点#
将静态 Defect Pixel Correction 视为设备相关功能:可用时使用,不可用时则进行平稳降级处理。