对于速度要求比较高的时候,需要先保证数据采集的完整性。一般都是使用高速相机先采集数据,再进行后处理。本文记录的是没有那么高的拍摄频率,比如100帧每秒的采集速度下,数据的实时处理,如何保证数据的完整性和结果显示的非延迟性。
1、时间量化
首先需要统计各个流程的耗时时间,将数据处理的各个阶段的时间量化。一般高速相机采集都使用外部信号触发。所以数据处理的步骤一般从图像回图开始。包括保存图像(内存或者硬盘),图像处理,保存图像处理结果(像点坐标),多个相机的像点坐标时间戳对齐,对齐后进行交会得到三维点,使用三维点进行指定分析,分析结果的展示等。每一个步骤都需要进行时间量化。依次分析耗时的操作,以便进行优化。
2、数据分离
高速数据处理,一般使用队列。比如相机回调函数中,获取到图像后,直接push到图像队列A中。有一个线程A来监测队列A中的图像数据,poll出来进行图像处理,得到像点坐标,然后push到队列B中。另一个线程B来监测队列B中的像点坐标,然后将多个相机的像点坐标根据时间戳来对齐。再把对齐后的数据push到队列C中。线程C来监测队列C中的数据,然后直接交会三维点,进行定制分析,push到队列D中。线程D监测队列D中的数据,poll出来后,进行结果显示。
3、降频
整个处理流程中,不是所有步骤都需要按照最大速度来处理的,比如说图像采集,必须保证速度,图像处理,像点坐标提取等需要保持每帧处理。但是结果显示,就不需要。可以根据重要性,对各个步骤进行有区别的降频(抽帧)处理,在保证数据完整性的前提下,最大化的提高效率。
4、总结
其实1和2是息息相关的,2怎么进行数据分离,就需要1里面的量化的时间。如果处理流程不影响实时性,可以合并到一起处理,如果影响了。则需要分离开,这样可以避免耗时的操作影响不耗时的操作。最大化处理速度。