前言
前段时间应结构要求一起评估结构光和硬件,主要围绕线阵相机
图像质量和光均匀性做灯光调整, 在此记录调试过程中遇到的坑。希望给同行一些避坑指南,同时希望多留言和给出一些指导!
线阵相机结构光评估
- 光源
- 评估光源是否满足的要求是图像无太大压缩,无太大拉伸(10%以内)的情况下,模拟增益不超过4dB,gamma增强不超过0.7的情况下,图像亮度正常, 图像整体亮度基本均匀,无暗条纹等情况。
- 图像无压缩,无拉伸可以确认行频和当前车速基本匹配,此时定下了曝光时间。
- 模拟增益和gamma是DSP放大,放大会导致噪点的出现,因此需要做一些控制。
图像亮度均匀是判断外界灯的角度,灯的排版是否合理的有效依据。
量化工具可以使用照度计。
-
镜头
- 镜头确认需要保证像素点都使用到(比如2048的宽,那么绝大部分的像素需要可见),因此镜头的选择尤其重要。
在选择镜头匹配到所有像素时(width),也需要考虑到抓拍的宽度,尽量满足抓拍的宽度要求(比如客户要求2米等重要指标)
- 镜头确认需要保证像素点都使用到(比如2048的宽,那么绝大部分的像素需要可见),因此镜头的选择尤其重要。
-
物距
- 首先确认客户需要使用的环境,确认物距距离,按照物距距离模拟环境, 相机不动, 运动的传送带等通过一种控制
转动的工具,比如马达类的电机转速等,在上面贴一些字符,方便视觉上调整行频,保证图像不被拉伸和压缩。
- 首先确认客户需要使用的环境,确认物距距离,按照物距距离模拟环境, 相机不动, 运动的传送带等通过一种控制
-
视野
- 抓拍模式设置为连续。调整heigh为128或256,调整曝光时间和行频,确保图像不压缩和拉伸;
调整gamma等,确认图像正常曝光; - 可以找一些白色的条状物体模拟边缘, 移动物体让图像刚好在最边缘,使用卷尺测量横向距离,如果不满足客户要求,
做结构上的调整,原则上物距越远, 可看到的横向(width)越大。P.S
:注意晃动的时候,使用比较长的杠子,避免手进入可视区,误以为杆子边缘可见(手的物距高于杆子)
- 抓拍模式设置为连续。调整heigh为128或256,调整曝光时间和行频,确保图像不压缩和拉伸;
图像优化
帧率
-
帧率= 行频(Hz)/高(当1/行频大于曝光时间的前提下), 当行频比较高的时候,帧率也会高( 前提是曝光固定切曝光*行频不超过1000000us)。行频的突破需要曝光做牺牲,比如曝光1000us,如果要出30fps, 如果height为32, 那么行频就是1000,此时如果想要帧率继续提高, 就要求行频提高,行频提高需要曝光减少, 关系为
反比例
。 -
当1/行频小于曝光时间时,帧率由曝光决定, 帧率 = 1/曝光时间/图像行高。
建议
:
设置图像宽度(采集方向),设置行频,确认图像是否拉伸或压缩,如果压缩,增大行频, 行频如果最大依然压缩,降低曝光时间。
如果此时图像依然比较暗,优先提高外部亮度, 考虑到功耗
和图像质量
的均衡, 做一个平衡点。Notice
:如果不考虑功耗, 尽量拉伸外部亮度,可以变相的增加了行频利用率以及图像质量。
拖影
-
对于要做尺寸测量之类,或人脸识别算法之类的场景, 像素精度有一定的要求,一般要求不超过1/2个像素。
-
拖影对人工智能不造成影响条件是 曝光时间 * 相对运动速度 ≤ 相对运动速度的需求。
例如曝光时间400us,小车按照10km/h的速度从相机上行驶, 分辨率为20484500, 整体视野2m * 4.5m(车长),像素精度要求1/2。
曝光时间 * 相对运动速度(相机固定) = 400/1000000 * 2.781000 = 1.112mm
垂直方向像素精度 : 4500(视野范围的垂直方向) / 4500 * 1/2 = 0.5mm
因此无法满足场景
解决方式: 降低曝光时间(要求外界亮度足够)或降低传送带的运动速度
- 关于线阵相机调试后的效果,传送
适配速度
关于相对速度变化的场景, 如果保证线阵相机抓拍图像正常?
- 需要确认当前适配的最大速度依然不变形,首先是确认可设置的最小曝光时间, 目前发现曝光在120us以下的情况,图像依然不欠曝(或微欠曝),基本能保证速度能到35km/h。
- 保证曝光不变形的情况下,然后确认图像亮度,如果亮度不足可以适当增益模拟增益和数字增益,有限模拟增益。如果客户对分辨率没有特别的要求,可以适当降低分辨率(BIND)。
获取速度
- 因为图像变形和车速正相关, 所以必须有一个测速的模块, 如果是匀速的传送带相关的场景,使用一套ISP参数即可。
测速模块如果有更好的解决方案, 希望一起讨论下,方便提高产品竞争力, 谢谢!
疑难杂症
- 在线扫过程中停止, 加速,减速。
解决方案: 目前需要评估一种测速,当速度变化后设置图像ISP,但这样会增加链路层传输的时间(调用API),导致抓拍可能丢了一些帧(特别是单帧比较小的情况)
- 如果被扫距离不固定,如何做到图像最优化?
该问题如果有解决方案,欢迎指导。
鲁棒性(采集稳定性)
- 采集丢帧
原因分析:海康SDK走的是TCP/IP方式。 [^Continue]会有两个因子影响到采集,分别是客户端的CPU(arm板或工控机)以及网络往返的时间,当工控机的CPU不足等会造成进程调度问题(如果工控机性能不足或运行的任务比较多时), 或网络抖动等问题可能造成请求一帧的时间超过了一帧的时间,
MVS
采集帧是不设置缓存,采集时如果客户端消费者
来不及请求时,会将后续的帧覆盖掉上一帧,导致客户端丢帧。单帧采集模式
不会出现上述的问题,因为拼接是在MVS相机的Soc中,当完成客户端设置的height后就将数据回调
给客户端。
- 采集方式
-
单帧扫描
采集
这里采集的是一帧数据,采集什么时候结束按照ISP设置的参数决定,特别需要注意的是宽
和行频
以及曝光
宽度
决定扫描的行数, 行频
和曝光
决定扫描的速度,即帧率
。
-
连续采集{continue}
采集
interrupt
: 中断方式,分软中断和硬件中断,这里只讨论软中断,即不再polling同时停止采集。
- 比较
- 单帧扫描方式常用于比较规律的地方,存在周期性的拍摄场景。
-
单帧模式
很多场景无法满足客户需求,在这里只针对连续采集
模式下应付以上问题:
a. 客户端轮询拿到本地数据,数据都采用指针方式存储,降低拷贝耗时。 b. 确认部署按照文档部署。 c. 采集设置缓存,减轻cpu调用客户端时的分配时间片不足问题。 d. 单帧设置的height可以适当的增大,即降低帧率,同时也变相的增加了行频利用率。
- 后续的想法
最后说一点,如果对行频利用率要求非常高的场景,建议还是想办法使用单帧的方式,而且能利用外部中断提前停止采集。
之前尝试这种解决方案, 貌似HIKVISION
SDK不支持这种方式。
选型
参考: 工业镜头基础知识和选型
参考: HIKVISION
一些坑参考
- 自动曝光还是手动曝光(白平衡同理)?
环境单一的场景用手动曝光即可, 如果场景照度多变,使用自动曝光。
自动曝光因为收敛的时间差,导致图像可能存在光线
不均匀的情况, 这种问题提高外部亮度,让曝光的上下限设置波动小。
- 线阵相机采集不均匀问题 ?
主要是因为外部补光导致问题,可以通过尝试sharding,如果还是无法解决,使用后期的图像增强,可以使用OpenCV的图像增强,参考
数字宽动态
,缺点是算法时间复杂度导致出图可能慢的问题
- 没有测速模块,无法使用编码器的场景如何解决图像变形{拉伸或压缩}?
如果没有测速模块, 可能无法解决该问题,但可以做缩放, 缩放中的拉伸会降低分辨率,所以如果考虑这种情况,
增大行频相对更好。文章来源:https://www.toymoban.com/news/detail-455579.html
- 开始抓拍和结束抓拍的触发源是通过IO方式(事件),怎么做能刚好扫描到触发前后的图?
- 后期裁剪算法,逻辑大概是比较每行的差异,如果大多数相同,就说明是无效数据。如果考虑稳定性,增加软件滤波即可。
- 采用高帧率连续采集模式,拿到帧数据自行realloc后保存, 流程大概为 触发源开始触发抓拍->请求抓拍数据->数据保存到vector中->收到停止信号停止->将vector数据保存一张raw数据->做编码即可
视频预览
采用usb摄像头或MIPI:文章来源地址https://www.toymoban.com/news/detail-455579.html
- 镜头选择尽量高收敛低震荡的CMOS, 这个可能需要代理定制了,建议500ms的曝光收敛比较合理。
- 自动曝光依然过曝,可以定制低目标亮度的固件。
- 因为运动物体,曝光采用增益优先方式更好,曝光上限做一定限制,比如5ms, 毕竟外部补光很高。
- 如果带宽足够,帧率建议30+, 编码码率选择更高的码率,建议定码率,减少运动场景的网格。
到了这里,关于海康线阵相机调试指导的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!