一种基于gpu的图像处理方法

文档序号:6371485阅读:107来源:国知局
专利名称:一种基于gpu的图像处理方法
技术领域
本发明涉及计算机图形技术领域,尤其涉及一种图像处理的方法。
背景技术
目前一个综合的图像处理软件需要能够对图像进行读取和存档,对图像应用滤镜,并且支持对操作的撤销和重做等等。传统的综合图像处理软件都是基于CPU进行设计的,因为该程序只需要管理内存和硬盘的数据,使用CPU可以很方便地实现以上功能,同时CPU核心数目有限,不会对算法的设计构成太大挑战。一个专业的图像处理软件必须要支持图层管理,选区管理等。这些在GPU的显存有限,编程不灵活的情况下,都带来了相当大的设计困难。
GPU的全称是Graphics Processing Unit,即图形计算单元,也即普通意义上的显卡芯片。GPU中有着大量的流处理器单元,可以并发地处理数据,因此GPU很适合于用来作图像处理。虽然使用GPU可以很方便地实现一个图像处理的算法,但是,要基于GPU实现一个综合的图像处理软件却会遇到很多困难,主要包括
存储管理困难GPU能够操作的存储单元是显卡上的显存,而CPU能够操作的则是系统内存,显存的容量通常要远远小于内存,而且由于软件必须同时使用GPU和CPU,所以需要高效地管理好这两个存储系统之间的使用,并且尽量减少两个数据存储区之间的通信开销。多线程实现困难由于使用GPU计算通常需要利用到OpenGL等图形API,而这些OpenGL API只能够工作在主线程,也就是⑶I线程的模式下,所以无法像通常方法一样,使用工作线程和GUI线程分离的方式,在密集计算的方式下给出界面反馈。撤销/重做系统实现困难由于使用GPU进行图像处理需要将图像数据拷贝至显存,而传统的撤销/重做系统实现则需要图像数据在系统内存中。这样,由于每一次滤镜或调节操作过后都需要进行撤销/重做数据的备份,则要求数据从显存到内存中进行拷贝,而大量的拷贝会对PCIE的传输造成较大压力,而且对实时性影响十分巨大。

发明内容
本发明的目的是针对上述问题提出的一种图像处理方法,能够在图像渲染操作时实时反馈的滤镜调节效果,平滑的画布缩放和拖动效果,显存与系统内存之间的相互拷贝大大减少,并且在显存容量有限的情况下可以支持多图层。本发明提供了一种图像处理方法,包括以下步骤
A、获取待处理图像,将所述待处理图像的一个图层从系统内存中拷贝到图形处理单元的显存中;
B、启动一个图像处理滤镜,在调节滤镜参数的时候,对所述图层的当前可视区域内的缩略图进行实时计算并获得调节结果;
C、使用所述待处理图像的每一个图层的缩略图进行由底至上的混合,以渲染到画布,并将该画布显不到窗口;
D、最后,应用该图像处理滤镜,使用滤镜的参数计算出被激活图层完整的的调节结果。上述技术方案中,优选地,步骤A还包括
如果显存容量不足,则同时需要将其他图层的数据在显存中删除,只保留在系统内存中的数据。上述技术方案中,优选地,步骤C进一步包括
设置滤镜的参数,实时计算所述待处理图层的缩略图在所述参数下的处理结果;
当所述处理结果与所述待处理图层相比发生变化后,对所述待处理图层进行渲染。上述技术方案中,优选地,所述滤镜包括一个唯一的标识号和若干被序列化的参 数。上述技术方案中,优选地,还包括步骤
将所述待处理图像进行全图备份和参数备份,所述全图备份将所有图层进行备份,所述参数备份是将当前操作的参数进行备份;
当撤销当前使用参数方式进行备份的操作时,按操作的先后顺序找到所述图层对应的最邻近的全图备份,将数据恢复到该全图备份;
依次应用全部以参数备份形式存储的操作序列。上述技术方案中,优选地,所述步骤C中的渲染具体包括
建立一张空白的帧缓存数据区;
从上至下将各图层的缩略图混合到所述帧缓存数据区上并改变对应的值;
所述各图层的缩略图混合的时候,使用OpenGL着色器语言对帧缓存数据区中的每一个点进行赋值。
本发明的技术效果在于
可以实时反馈滤镜调节效果,平滑的画布缩放和拖动效果,显存与系统内存之间的相互拷贝大大减少,提高图像渲染的处理速度,节省显存,并且在显存容量有限的情况下可以支持多图层操作。本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。


附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中
图I是本发明一种图像处理方法具体实施方式
的流程图。
具体实施例方式以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。本发明的一种具体实施方式
提供了一种图像处理方法,包括以下步骤步骤101、激活图层,即将所述待处理图像的某一图层从系统内存中拷贝到图形处理单元的显存中,如果显存容量不足,则同时需要将其他图层的数据在显存中删除,只保留在系统内存中的数据;
要操作一个图层必须先激活该图层,在激活一个图层的同时,当前被激活的图层会首先被反激活,这样一个时刻只有一个图层被激活。反激活的过程就是把当前图层的数据从GPU显存拷贝到系统内存,释放GPU显存中的数据,并锁定该图层.激活的过程则刚好相反,数据从系统内存中拷贝到GPU显存,并且仍然保留内存中的数据区。非激活的图层则只在系统内存中保存数据,这样节省了显存的同时,保证了当前操作的快速性,因为当前操作所需要的数据都已经在显存中,不会造成较大延迟。步骤102、启动一个图像处理滤镜,在调节滤镜参数的时候,对被激活图层的当前可视区域内的缩略图进行实时计算;
每一个图层,包括像素图层和文字图层,都有与之对应的缩略图。对于像素图层而言,其缩略图是图层在画布可见范围内的一个子图层,并且其缩放比例在当前画布是缩小时与 画布一致,在当前画布是放大时保持100%。这样,保证图层缩略图是一个很小的数据,可以完整地存储在GPU显存中。在进行实时图层渲染过程当中,使用缩略图参与渲染计算,即渲染就是用每个图层的缩略图进行。由于所有的数据都在GPU显存中,所以可以获得十分快的速度。步骤103、使用每一个图层的缩略图进行由底至上的混合,以渲染到画布,并将该画布显示到窗口;
渲染的具体方法是首先建立一张空白(RGBA都为O)的帧缓存数据区,然后由下至上将图层缩略图混合到该帧缓存数据区上并改变它的值.每一个图层的缩略图在混合的时候,都使用OpenGL着色器语言(GLSL)来对帧缓存数据区中的每一个点进行赋值.
步骤104、最后,应用该图像处理滤镜,使用滤镜的参数计算出被激活图层完整的的调节结果。步骤104和步骤102之不同在于,步骤102只计算图层的缩略图数据,而步骤104是计算整个图层的数据。步骤104通常会比步骤102慢很多,所以通常是在用户在界面上点击确定之后才会执打。步骤103中的渲染方法中,滤镜和调节工具可以进行实时刷新。大部分的滤镜和调节工具都有很多的参数可以设置,比如曝光调节工具中的ga_a参数。在对滤镜和调节工具进行参数调整的过程中,用户期望在画布上获得对应参数的实时效果,每种工具都有不同的参数,在实际操作中会根据需要选择相应的参数。由于使用缩略图参与渲染过程,所以,在用户使滤镜或调节工具的参数发生任何改变的时候,本发明所采用的方法是实时地计算当前激活图层的缩略图在该参数下的效果,在调整滤镜的时候只计算缩略图渲染效果,在真正应用的时候则是计算全图层的应用效果,然后立刻触发渲染过程,任何导致可视化效果变化的操作都会触发渲染过程,比如在一个滤镜调节时改了参数,渲染之后会将整个画布的效果显示出来。由于GPU强大的并行处理能力,使得本发明相关软件可以达到普通图像处理软件十倍以上的刷新速率。每一个滤镜的类中都定义了该滤镜的一些参数,参数是在类对象中存储的,可以被序列化到任何数据流中。本发明对每一个滤镜或是调节工具类都实现了这些参数的序列化和反序列化的接口,即滤镜参数可以被序列化到流数据当中,也可以从流数据当中被解析出来。每一个滤镜都有一个唯一的标识号标识,并且由于其参数都可以被序列化,一个滤镜的标识号和一个滤镜的参数就可以完全表示一个滤镜的操作.而一系列的滤镜操作可以存储到内存或是硬盘文化中,以供应用到其他图像上.基于这个功能,便可以实现文件的批处理功能.
针对实际渲染图像过程中需要对某些操作步骤进行撤销或重做,本发明还提供了一种撤销重做的方法,利用该方法能够迅速对图像操作,提高处理速度。鉴于GPU具有强大处理能力,但与系统内存数据拷贝较慢的特点,本发明设计了创新的撤销/重做方法,基于上述参数序列化功能,本发明将图像数据的备分区分为全图备份和参数备份。全图备份指整个图层都进行了备份,而参数备份则是只存储当前操作的参数。在撤销当前使用参数方式进行备份的操作时,系统从前往后找到该图层对应的最临近的全图备份,然后将数据恢复到该全图备份,然后依次应用所有的以参数备份形式存储下来的操作序列。本领域普通技术人员可以理解实现上述方法实施例的全部或部分步骤可以通过 程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种图像处理方法,其特征在于,包括以下步骤 A、获取待处理图像,将所述待处理图像的一个图层从系统内存中拷贝到图形处理单元的显存中; B、启动一个图像处理滤镜,在调节滤镜参数的时候,对所述图层的当前可视区域内的缩略图进行实时计算并获得调节结果; C、使用所述待处理图像的每一个图层的缩略图进行由底至上的混合,以渲染到画布,并将该画布显不到窗口; D、应用该图像处理滤镜,使用滤镜的参数计算出被激活图层完整的的调节结果。
2.根据权利要求I所述的图像处理方法,其特征在于,步骤A还包括,如果显存容量不 足,则同时需要将其他图层的数据在显存中删除,只保留在系统内存中的数据。
3.根据权利要求I所述的图像处理方法,其特征在于,步骤C进一步包括 设置滤镜的参数,实时计算所述待处理图层的缩略图在所述参数下的处理结果; 当所述处理结果与所述待处理图层相比发生变化后,对所述待处理图层进行渲染。
4.根据权利要求3所述的图像处理方法,其特征在于,所述滤镜包括一个唯一的标识号和若干被序列化的参数。
5.根据权利要求4所述的图像处理方法,其特征在于,还包括步骤 将所述待处理图像进行全图备份和参数备份,所述全图备份将所有图层进行备份,所述参数备份是将当前操作的参数进行备份; 当撤销当前使用参数方式进行备份的操作时,按操作的先后顺序找到所述图层对应的最邻近的全图备份,将数据恢复到该全图备份; 依次应用全部以参数备份形式存储的操作序列。
6.根据权利要求I所述的图像处理方法,其特征在于,所述步骤C中的渲染具体包括 建立一张空白的帧缓存数据区; 从上至下将各图层的缩略图混合到所述帧缓存数据区上并改变对应的值; 所述各图层的缩略图混合的时候,使用OpenGL着色器语言对帧缓存数据区中的每一个点进行赋值。
全文摘要
本发明公开了一种基于GPU的图像处理方法,该方法可以高效地处理多图层的图像数据。该方法主要包含以下步骤首先,激活图层,即将所述待处理图像的某一图层从系统内存中拷贝到图形处理单元的显存中,如果显存容量不足,则同时需要将其他图层的数据在显存中删除,只保留在系统内存中的数据;其次,启动一个图像处理滤镜,在调节滤镜参数的时候,对被激活图层的当前可视区域内的缩略图进行实时计算;再次,使用每一个图层的缩略图进行由底至上的混合,以渲染到画布,并将该画布显示到窗口;最后,应用该图像处理滤镜,使用滤镜的参数计算出被激活图层完整的的调节结果。本发明能够有效节省显存,提供图像渲染的处理速度,对图像渲染进行批处理操作,并能够实时显示渲染结果。
文档编号G06T1/00GK102810199SQ20121019794
公开日2012年12月5日 申请日期2012年6月15日 优先权日2012年6月15日
发明者陈实富, 张舒, 张乐 申请人:成都平行视野科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1