1. 相机与镜头选型匹配
任务目标
为视觉检测系统选定相机与镜头组合,确保在给定工作距离下,视野覆盖目标区域且分辨率满足检测精度要求。本案例以Basler acA2440-75um相机(500万像素,2448×2048)与Computar M1224-MPW2镜头(焦距12mm)为例,完成选型匹配计算与验证。
选型参数与计算公式
已知条件:传感器尺寸为2/3英寸(水平8.45mm,垂直7.07mm),像元尺寸3.45μm,工作距离WD=300mm,目标检测区域需覆盖40mm×30mm,最小缺陷尺寸0.05mm。
核心计算关系:
- 水平视场 HFOV = 传感器水平尺寸 × WD / 焦距
- 垂直视场 VFOV = 传感器垂直尺寸 × WD / 焦距
- 单像素分辨率 = 视场尺寸 / 对应方向像素数
关键完整代码
import math
# 相机参数
sensor_w = 8.45 # mm,2/3英寸传感器水平尺寸
sensor_h = 7.07 # mm,垂直尺寸
pixel_w = 2448 # 水平像素数
pixel_h = 2048 # 垂直像素数
# 镜头参数
focal_length = 12.0 # mm
# 工作条件
working_distance = 300.0 # mm
target_w = 40.0 # mm,目标区域水平尺寸
target_h = 30.0 # mm,目标区域垂直尺寸
min_defect = 0.05 # mm,最小缺陷尺寸
# 计算视场
fov_w = sensor_w * working_distance / focal_length
fov_h = sensor_h * working_distance / focal_length
# 计算单像素分辨率
res_w = fov_w / pixel_w
res_h = fov_h / pixel_h
# 验证视场是否覆盖目标区域
cover_w = fov_w >= target_w
cover_h = fov_h >= target_h
# 验证分辨率是否满足缺陷检测
res_ok = min(res_w, res_h) <= min_defect / 3 # 至少3像素覆盖最小缺陷
print(f"水平视场: {fov_w:.2f} mm")
print(f"垂直视场: {fov_h:.2f} mm")
print(f"水平分辨率: {res_w*1000:.2f} μm/像素")
print(f"垂直分辨率: {res_h*1000:.2f} μm/像素")
print(f"视场覆盖目标: {'通过' if cover_w and cover_h else '不通过'}")
print(f"分辨率满足检测: {'通过' if res_ok else '不通过'}")
if cover_w and cover_h and res_ok:
print("结论: 选型匹配,可投入使用")
else:
print("结论: 选型不匹配,需调整")
运行与验证
直接运行上述Python脚本,无需额外依赖。预期输出:
水平视场: 211.25 mm
垂直视场: 176.75 mm
水平分辨率: 86.29 μm/像素
垂直分辨率: 86.30 μm/像素
视场覆盖目标: 通过
分辨率满足检测: 不通过
结论: 选型不匹配,需调整
判定说明:视场远大于目标区域,但单像素分辨率约86μm,无法满足0.05mm(50μm)缺陷需至少3像素覆盖的要求(需≤16.7μm/像素)。此时应选择更高分辨率相机或缩短工作距离、更换更长焦距镜头。
选型调整建议
若保持镜头不变,将工作距离缩短至100mm,则视场变为70.4mm×58.9mm,分辨率约28.8μm/像素,仍不满足要求。实际工程中应选用像元尺寸更小或分辨率更高的相机,或采用远心镜头方案。本案例验证了选型计算流程,实际选型时需迭代参数直至两项判定均通过。