图像采集中同步与异步之间的区别
计算机视觉与机器学习专注于计算机视觉与机器学习知识分享
编者荐语
机器视觉项目中,如何采集到合适的图像是项目的第一步,也是最重要的一步。所以采用工业相机成像以及如何转换成图像处理库所需要的格式成为项目开发中首先要考虑的问题。
研究生期间导师主要是做大数据的,自己也只能跟着导师做一些数据分析与预测(决策)之类的研究。但是后来发现自己还是更加喜欢图像处理与计算机视觉。由于在校期间导师项目的进度与来自毕业的压力,并没有足够的时间去做一些图像方面工程化的项目。不过有趣的是,毕业后阴差阳错的入职了一家做机器视觉的公司。回想起自己从毕业时的懵懵懂懂到现在的略知一二,中间学到了很多,也踩了很多坑。所以想从今天开始分享一些自己入行机器视觉领域的一些零散小知识。许多内容来源于网上,虽然加入了很多自己的理解。但由于其本身的笔记属性,可能除了大致的逻辑,或多或少的会引入一些小错误,大家如果发现可以及时指出,以免由于作者的水平有限而误导他人。
那么今天分享的内容就从这里开始吧!
实际的项目中,一般需要我们自己控制相机去进行图像的采集,通常情况下,当我们抓取帧的时候是从一个连续的视频流序列中去抓取一个或者多个视频帧。那我们就先来介绍一下图像采集中同步(synchronous)与异步(asynchronous)之间的区别。
图像采集名词解释
1.Capture(捕获):表示光线经过镜头在传感器芯片(CMOS,CCD)上成像。
2.Acquisition(采集):表示由相机的控制器间隔一段时间就将芯片上的数据传输到相机buffer中。
3.Grab(抓取):从相机的缓存Buffer中把数据取出来传到板卡。
4.Digitize(数字化):把从相机buffer中拿到的模拟信号量化为数字信号。
我们常说的“采集”一般是指这四个过程的总称。
同步采集
简单的说,同步采集的过程中,图像的抓取(grab)和图像的处理(process)是顺序进行的,当抓取完成后,就开始生成HImage和接下来的图像处理,然后在处理结束后,继续等待下一个采集信号的到来,开始下一帧的抓取,顺序见下图:
上图中,采集信号是按相机设定的帧率的频率发送。同步采集可能会导致的问题是,如果图像处理结束后,错过了下一帧的信号,那就只好等待再下一帧的信号来了继续采集。从图中这种情况看,中间一帧的图像会“丢失”,这样的话实际的帧率可能就达不到相机设定的理论的帧率了。
异步采集
而异步操作中,抓取与处理两个步骤是可以分离的,并可以异步运行,即可以在抓取下一帧图像的同时对图像进行处理.异步采集的第一步调用与同步采集类似,差别在接收到图像之后,采集句柄去采集下一帧图像,而处理算子在处理好前一帧图像后继续处理下一帧。处理完成后,再调用异步采集,直到完成图像采集为止,这样就可以达到全帧的速率。
使用异步采集的时候,存储抓取图像与处理图像的应该是两块不同的存储区域,因此需要使用双缓存策略。
二者比较
同步采集:采集完后,处理图像,然后继续采集。采集的实际帧率受处理速度的影响。
异步采集:采集完后,立刻采集下一帧图像,同时进行当前帧的图像处理。实际帧率不受处理速度影响。
总结
使用同步采集的时候,抓取的都是当前的图像,而异步采集的时候,读到的图可能是已经当前时间的前几帧图像。如果是拍摄运动物体,可能发生物体已经移动了,图像却还是移动之前的情况。为了避免这个问题可以考虑同步,或者也可以考虑采用多线程机制保证采集和处理的同步。
部分内容来源于网络,如果侵权请联系删除。