本发明涉及图像处理领域,更具体地涉及一种在实时图像处理系统中实现串行任务并行化的系统及方法。
背景技术:
从图像输入到结果输出可能要经过多个处理过程,每个过程的输入又依赖前一个过程的输出,即中间处理流程为逻辑上串行的流程。在有限的运算资源前提下,为了提高结果输出的帧率(每秒输出的结果/图像数),需要通过将多个处理过程并行化。在并行的框架下,数据的同步、共享等问题需要被严格控制,本发明旨在提供一种在软件层面易于实现的串行任务并行化策略。
在图像处理领域,常用的提高效率的方法是利用成熟的并行计算框架(例如cuda或opengl等),通过并行加速计算过程,但要求这个计算过程内部具有独立性(例如对一张图像的每个像素做一次色彩转换,像素之间没有互相依赖)。同时有些并行框架依赖于特定硬件(例如cuda只针对英伟达公司的部分图像处理单元)。并且这些并行计算方法是针对单个处理过程的加速,并没有对整体处理流程的并行。
技术实现要素:
1、本发明的目的
本发明为了解决现有技术中未整体并行处理的问题,而提出了一种在实时图像处理系统中实现串行任务并行化的系统及方法。
2、本发明所采用的技术方案
本发明公开了一种在实时图像处理系统中实现串行任务并行化的方法,包括图像输入步骤;
图像处理步骤;
显示结果步骤;
上述三个过程并行处理,都有一个缓存队列,且队列长度如果处于已满的状态,则不能入队操作,如果未满,则进入处理,同时该缓存队列对上一个过程可见。
更进一步,图像输入步骤为a、图像处理步骤为b、显示结果步骤为c,对于任意一个过程p,都有一个输入缓存队列
更进一步,三个处理过程的耗时分别为
更进一步,对于每个过程的输入缓存队列,采用数组模拟循环队列的方式,即在系统初始化时就分配好n块内存空间,每一块内存空间对应存储一帧图像的数据,包括这一帧图像在每个处理过程后的中间结果;同时维护一个长度为n的标记数组f,
更进一步,其中
本发明公开了一种在实时图像处理系统中实现串行任务并行化的系统包括图像输入模块;
图像处理模块;
显示结果模块;
上述三个模块并行执行,都有一个缓存队列,且队列长度如果处于已满的状态,则不能入队操作,如果未满,则进入处理,同时该缓存队列对上一个过程可见。
更进一步,图像输入模块为a、图像处理模块为b、显示结果模块为c,对于任意一个过程p,都有一个输入缓存队列
更进一步,三个处理过程的耗时分别为
更进一步,对于每个过程的输入缓存队列,采用数组模拟循环队列的方式,即在系统初始化时就分配好n块内存空间,每一块内存空间对应存储一帧图像的数据,包括这一帧图像在每个处理过程后的中间结果;同时维护一个长度为n的标记数组f,
更进一步,其中
3、本发明所采用的有益效果
(1)本发明在实时图像处理系统中,将原本串行执行的步骤并行化,在不影响系统延迟的情况下,减少了每个处理流程的等待时间,提高了系统的帧率。同时采用数组模拟循环队列的方式,用空间换取时间,进一步缩短了流程中的耗时。
(2)本发明在实时图像处理系统中对逻辑上严格串行的处理过程进行并行化,提高系统帧率。
(3)本发明利用数组模拟循环队列的思想,通过对一个标记数组的维护与查询实现多线程间的数据共享与状态控制,相比直接用队列数据结构节省了执行过程中的时间开销。在该策略下,所有的处理过程在遵循上述策略的条件下可以并发执行,则整个系统的帧率变为
附图说明
图1为图像处理系统处理流程图;
图2为每一帧图像的处理流程抽象为a、b、c这3个过程的顺序执行流程图;
图3为独立的线程处理过程流程图;
图4为数组模拟循环队列示意图;
图5为状态循环切换示意图;
图6为缓存读取流程图。
具体实施方式
下面结合本发明实例中的附图,对本发明实例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域技术人员在没有做创造性劳动前提下所获得的所有其他实施例,都属于本发明的保护范围。
下面将结合附图对本发明实例作进一步地详细描述。
实施例1
实时图像处理方法中,对于每一帧图像,都要经过如图1的步骤:
现将每一个图像处理的过程抽象为过程p,该过程可能是从摄像头获取图像、对图像进行色彩变化、对图像应用机器学习算法进行目标检测等,而通常这些过程是需要严格顺序执行的,且前一个步骤的输出会作为后一个结果的输入。于是我们将方法对于每一帧图像的处理流程抽象为a、b、c这3个过程的顺序执行,如图2。
假设三个处理过程的耗时分别为
现提出一种并行化策略,对于任意一个过程p,都有一个输入缓存队列
在该策略下,所有的处理过程在遵循上述策略的条件下可以并发执行,则整个系统的帧率变为
在实现细节上,对于每个过程的输入缓存队列,采用数组模拟循环队列的方式以节省时间,即在系统初始化时就分配好n块内存空间,每一块内存空间对应存储一帧图像的数据,包括这一帧图像在每个处理过程后的中间结果。同时维护一个长度为n的标记数组f,
其中
实施例2
本发明中,任务队列的长度是固定的,一般是根据硬件支持的并行线程数量来定,可以充分利用多核cpu的各个核心进行并行运算从而提高图像处理的帧率,旨在通过压榨硬件资源提高处理效率。本发明一帧图片在有限固定的处理流程之后就会输出,不会对后续的图片产生任何影响,即每张图片都是一次性处理完成,也不存在回溯的操作,从而保证系统的流畅。
实时图像处理系统中,对于每一帧图像,都要经过如图1的步骤:
图像输入模块;
图像处理模块;
显示结果模块;
实时图像处理系统中,对于每一帧图像,都要经过如图1的执行步骤:
每一个图像处理模块的过程抽象为过程p,该过程可能是从摄像头获取图像、对图像进行色彩变化、对图像应用机器学习算法进行目标检测等,而通常这些过程是需要严格顺序执行的,且前一个步骤的输出会作为后一个结果的输入。于是我们将系统对于每一帧图像的处理模块抽象为a、b、c这3个模块的顺序执行,如图2。
现提出一种并行化策略,对于任意一个过程p,都有一个输入缓存队列
例如对于上述场景中的过程b,其输入缓存队列
在实现细节上,对于每个过程的输入缓存队列,采用数组模拟循环队列的方式以节省时间,即在系统初始化时就分配好n块内存空间,每一块内存空间对应存储一帧图像的数据,包括这一帧图像在每个处理过程后的中间结果。同时维护一个长度为n的标记数组f,
其中
假设三个处理模块执行的耗时分别为
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。