在实时图像处理系统中实现串行任务并行化的系统及方法与流程

文档序号:21928783发布日期:2020-08-21 14:51阅读:260来源:国知局
在实时图像处理系统中实现串行任务并行化的系统及方法与流程

本发明涉及图像处理领域,更具体地涉及一种在实时图像处理系统中实现串行任务并行化的系统及方法。



背景技术:

从图像输入到结果输出可能要经过多个处理过程,每个过程的输入又依赖前一个过程的输出,即中间处理流程为逻辑上串行的流程。在有限的运算资源前提下,为了提高结果输出的帧率(每秒输出的结果/图像数),需要通过将多个处理过程并行化。在并行的框架下,数据的同步、共享等问题需要被严格控制,本发明旨在提供一种在软件层面易于实现的串行任务并行化策略。

在图像处理领域,常用的提高效率的方法是利用成熟的并行计算框架(例如cuda或opengl等),通过并行加速计算过程,但要求这个计算过程内部具有独立性(例如对一张图像的每个像素做一次色彩转换,像素之间没有互相依赖)。同时有些并行框架依赖于特定硬件(例如cuda只针对英伟达公司的部分图像处理单元)。并且这些并行计算方法是针对单个处理过程的加速,并没有对整体处理流程的并行。



技术实现要素:

1、本发明的目的

本发明为了解决现有技术中未整体并行处理的问题,而提出了一种在实时图像处理系统中实现串行任务并行化的系统及方法。

2、本发明所采用的技术方案

本发明公开了一种在实时图像处理系统中实现串行任务并行化的方法,包括图像输入步骤;

图像处理步骤;

显示结果步骤;

上述三个过程并行处理,都有一个缓存队列,且队列长度如果处于已满的状态,则不能入队操作,如果未满,则进入处理,同时该缓存队列对上一个过程可见。

更进一步,图像输入步骤为a、图像处理步骤为b、显示结果步骤为c,对于任意一个过程p,都有一个输入缓存队列,并规定队列长度为n时队列处于已满的状态,不能进行入队操作,同时该缓存队列对过程p的上一个过程可见;对于上一场景中的过程b,其输入缓存队列对于过程a可见,因为过程a需要将输出结果填入该队列,同时过程b可以将结果填入过程c的输入缓存;每个处理过程都在一个独立的线程中运行,只要其输入缓存中有值,即队列长度大于0,并且其下一个过程的输入缓存队列未满,即队列长度小于n就进行处理,并将处理结果入队,否则等待直到满足上述条件。

更进一步,三个处理过程的耗时分别为,系统的帧率为

更进一步,对于每个过程的输入缓存队列,采用数组模拟循环队列的方式,即在系统初始化时就分配好n块内存空间,每一块内存空间对应存储一帧图像的数据,包括这一帧图像在每个处理过程后的中间结果;同时维护一个长度为n的标记数组f,表示第块内存空间中的数据的状态,且对于任意一块缓存空间,可以保证其中的所有数据均为同一帧图像的结果。

更进一步,其中应在以下的状态之间循环切换,对于每个处理过程p,其都维护一个仅自身可见的指针,其指向某一块缓存,只有当的状态为p的前一个过程处理完成时,p再开始在缓存中读取需要的结果,并进行处理,之后把结果写入缓存中对应的位置,并将置为“p完成”状态,同时指针指向下一块缓存区,并循环执行以上步骤。

本发明公开了一种在实时图像处理系统中实现串行任务并行化的系统包括图像输入模块;

图像处理模块;

显示结果模块;

上述三个模块并行执行,都有一个缓存队列,且队列长度如果处于已满的状态,则不能入队操作,如果未满,则进入处理,同时该缓存队列对上一个过程可见。

更进一步,图像输入模块为a、图像处理模块为b、显示结果模块为c,对于任意一个过程p,都有一个输入缓存队列,并规定队列长度为n时队列处于已满的状态,不能进行入队操作,同时该缓存队列对过程p的上一个过程可见;对于上一场景中的过程b,其输入缓存队列对于过程a可见,因为过程a需要将输出结果填入该队列,同时过程b可以将结果填入过程c的输入缓存;每个处理过程都在一个独立的线程中运行,只要其输入缓存中有值,即队列长度大于0,并且其下一个过程的输入缓存队列未满,即队列长度小于n就进行处理,并将处理结果入队,否则等待直到满足上述条件。

更进一步,三个处理过程的耗时分别为,系统的帧率为

更进一步,对于每个过程的输入缓存队列,采用数组模拟循环队列的方式,即在系统初始化时就分配好n块内存空间,每一块内存空间对应存储一帧图像的数据,包括这一帧图像在每个处理过程后的中间结果;同时维护一个长度为n的标记数组f,表示第块内存空间中的数据的状态,且对于任意一块缓存空间,可以保证其中的所有数据均为同一帧图像的结果。

更进一步,其中应在以下的状态之间循环切换,对于每个处理过程p,其都维护一个仅自身可见的指针,其指向某一块缓存,只有当的状态为p的前一个过程处理完成时,p再开始在缓存中读取需要的结果,并进行处理,之后把结果写入缓存中对应的位置,并将置为“p完成”状态,同时指针指向下一块缓存区,并循环执行以上模块。

3、本发明所采用的有益效果

(1)本发明在实时图像处理系统中,将原本串行执行的步骤并行化,在不影响系统延迟的情况下,减少了每个处理流程的等待时间,提高了系统的帧率。同时采用数组模拟循环队列的方式,用空间换取时间,进一步缩短了流程中的耗时。

(2)本发明在实时图像处理系统中对逻辑上严格串行的处理过程进行并行化,提高系统帧率。

(3)本发明利用数组模拟循环队列的思想,通过对一个标记数组的维护与查询实现多线程间的数据共享与状态控制,相比直接用队列数据结构节省了执行过程中的时间开销。在该策略下,所有的处理过程在遵循上述策略的条件下可以并发执行,则整个系统的帧率变为,相比原先的有很大提高,而延迟则保持不变。

附图说明

图1为图像处理系统处理流程图;

图2为每一帧图像的处理流程抽象为a、b、c这3个过程的顺序执行流程图;

图3为独立的线程处理过程流程图;

图4为数组模拟循环队列示意图;

图5为状态循环切换示意图;

图6为缓存读取流程图。

具体实施方式

下面结合本发明实例中的附图,对本发明实例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域技术人员在没有做创造性劳动前提下所获得的所有其他实施例,都属于本发明的保护范围。

下面将结合附图对本发明实例作进一步地详细描述。

实施例1

实时图像处理方法中,对于每一帧图像,都要经过如图1的步骤:

现将每一个图像处理的过程抽象为过程p,该过程可能是从摄像头获取图像、对图像进行色彩变化、对图像应用机器学习算法进行目标检测等,而通常这些过程是需要严格顺序执行的,且前一个步骤的输出会作为后一个结果的输入。于是我们将方法对于每一帧图像的处理流程抽象为a、b、c这3个过程的顺序执行,如图2。

假设三个处理过程的耗时分别为,则整个系统的帧率为,系统延迟为,这里的系统延迟指一帧图像从第一个处理过程(通常是摄像头取图)开始,到最后一个处理过程(通常为显示器显示)结束所经过的时间。

现提出一种并行化策略,对于任意一个过程p,都有一个输入缓存队列,并规定队列长度为n时队列处于已满的状态,不能进行入队操作,同时该缓存队列对过程p的上一个过程可见。例如对于上述场景中的过程b,其输入缓存队列对于过程a可见,因为过程a需要将输出结果填入该队列,同时过程b可以将结果填入过程c的输入缓存。每个处理过程都在一个独立的线程中运行,只要其输入缓存中有值(队列长度大于0),并且其下一个过程的输入缓存队列未满(队列长度小于n)就进行处理,并将处理结果入队,否则等待直到满足上述条件。因此对于每一个处理过程流程图如图3(以上述场景中的过程b为例):(其中)表示b的缓存队列的长度)。

在该策略下,所有的处理过程在遵循上述策略的条件下可以并发执行,则整个系统的帧率变为,相比原先的有很大提高,而延迟则保持不变。

在实现细节上,对于每个过程的输入缓存队列,采用数组模拟循环队列的方式以节省时间,即在系统初始化时就分配好n块内存空间,每一块内存空间对应存储一帧图像的数据,包括这一帧图像在每个处理过程后的中间结果。同时维护一个长度为n的标记数组f,表示第块内存空间中的数据的状态,且对于任意一块缓存空间,可以保证其中的所有数据均为同一帧图像的结果。如图4:

其中应在以下的状态之间循环切换,如图5,而对于每个处理过程p,其都维护一个仅自身可见的指针,其指向某一块缓存,只有当的状态为p的前一个过程处理完成时,p再开始在缓存中读取需要的结果,并进行处理,之后把结果写入缓存中对应的位置,并将置为“p完成”状态,同时指针指向下一块缓存区,并循环执行以上步骤。于是每个处理过程的流程图改写为如图6的形式(以上述场景中的过程b为例);这样的实现方法相当于在实际运行过程中把队列的出队和入队操作简化为了对一个标记位的赋值操作,把所有申请或释放空间的操作集中在系统初始化阶段,进一步节省了系统运行时的耗时。

实施例2

本发明中,任务队列的长度是固定的,一般是根据硬件支持的并行线程数量来定,可以充分利用多核cpu的各个核心进行并行运算从而提高图像处理的帧率,旨在通过压榨硬件资源提高处理效率。本发明一帧图片在有限固定的处理流程之后就会输出,不会对后续的图片产生任何影响,即每张图片都是一次性处理完成,也不存在回溯的操作,从而保证系统的流畅。

实时图像处理系统中,对于每一帧图像,都要经过如图1的步骤:

图像输入模块;

图像处理模块;

显示结果模块;

实时图像处理系统中,对于每一帧图像,都要经过如图1的执行步骤:

每一个图像处理模块的过程抽象为过程p,该过程可能是从摄像头获取图像、对图像进行色彩变化、对图像应用机器学习算法进行目标检测等,而通常这些过程是需要严格顺序执行的,且前一个步骤的输出会作为后一个结果的输入。于是我们将系统对于每一帧图像的处理模块抽象为a、b、c这3个模块的顺序执行,如图2。

现提出一种并行化策略,对于任意一个过程p,都有一个输入缓存队列,并规定队列长度为n时队列处于已满的状态,不能进行入队操作,同时该缓存队列对过程p的上一个过程可见。

例如对于上述场景中的过程b,其输入缓存队列对于过程a可见,因为过程a需要将输出结果填入该队列,同时过程b可以将结果填入过程c的输入缓存。每个处理过程都在一个独立的线程中运行,只要其输入缓存中有值(队列长度大于0),并且其下一个过程的输入缓存队列未满(队列长度小于n)就进行处理,并将处理结果入队,否则等待直到满足上述条件。因此对于每一个处理过程流程图如图3(以上述场景中的过程b为例):(其中表示b的缓存队列的长度)。

在实现细节上,对于每个过程的输入缓存队列,采用数组模拟循环队列的方式以节省时间,即在系统初始化时就分配好n块内存空间,每一块内存空间对应存储一帧图像的数据,包括这一帧图像在每个处理过程后的中间结果。同时维护一个长度为n的标记数组f,表示第块内存空间中的数据的状态,且对于任意一块缓存空间,可以保证其中的所有数据均为同一帧图像的结果。如图4:

其中应在以下的状态之间循环切换,如图5,而对于每个处理过程p,其都维护一个仅自身可见的指针,其指向某一块缓存,只有当的状态为p的前一个过程处理完成时,p再开始在缓存中读取需要的结果,并进行处理,之后把结果写入缓存中对应的位置,并将置为“p完成”状态,同时指针指向下一块缓存区,并循环执行以上步骤。于是每个处理过程的流程图改写为如图6的形式(以上述场景中的过程b为例);这样的实现方法相当于在实际运行过程中把队列的出队和入队操作简化为了对一个标记位的赋值操作,把所有申请或释放空间的操作集中在系统初始化阶段,进一步节省了系统运行时的耗时。

假设三个处理模块执行的耗时分别为,则整个系统的帧率为,系统延迟为,这里的系统延迟指一帧图像从第一个处理过程(通常是摄像头取图)开始,到最后一个处理过程(通常为显示器显示)结束所经过的时间。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1