一种图像快速旋转的方法及装置与流程

文档序号:15165125发布日期:2018-08-14 17:23阅读:201来源:国知局

本发明涉及计算机图像处理领域,具体涉及一种图像快速旋转的方法及装置。



背景技术:

随着手机软件的快速发展,越来越多与地图相关的软件被开发出来。当我们在制作手机中与地图相关的软件时,不可避免的会对地图进行旋转操作,旋转算法众多,算法的复杂度与结果各不相同。如果只采用复杂算法进行地图的旋转,对于性能较好的设备能够完全流畅的操作,但对于性能较差的设备或处于繁忙状态的设备,在对地图进行旋转时则会出现卡顿的情况。因此我们需要一种能够高速处理图像旋转和自适应设备情况的旋转方案。



技术实现要素:

本发明的目的在于提供一种图像快速旋转的方法及装置,该方法能高速处理图像旋转并且能够自适应设备情况。

具体方案如下:

一种图像快速旋转的方法,包括步骤:

s10,采用双线性插值法将完整图像数据转换成极坐标矩阵,获取用户旋转角度并对极坐标进行偏移,采用双线性插值法转换极坐标以得到旋转一次后的完整图像数据;

s20,输出旋转后的完整图像数据;

s30,统计执行步骤s10的时长,预设第一阈值,若时长小于预设的第一阈值,则重复执行步骤s10至s20直至完整图像数据最终完成与用户旋转角度所匹配的旋转,若时长大于等于预设的第一阈值,则执行步骤s40至s50;

s40,采用双线性插值法将屏幕数据的外接圆范围所包含的图像数据转换成极坐标矩阵,其中,屏幕数据的外接圆范围所包含的图像数据记为第一图像数据,除屏幕数据的外接圆范围所包含的图像数据之外的图像数据记为第二图像数据,获取用户旋转角度并对极坐标进行偏移,采用双线性插值法转换极坐标以得到旋转一次后的第一图像数据,输出第一图像数据;重复上述过程直至第一图像数据最终完成与用户旋转角度所匹配的旋转;

s50,在用户结束图像旋转时,采用双线性插值法将第二图像数据转换成极坐标矩阵,获取用户在s40结束后最终的旋转角度并对极坐标进行偏移,采用双线性插值法转换极坐标以得到最终旋转后的第二图像数据,将最终旋转后的第二图像数据与最终旋转后的第一图像数据相结合,组成旋转后的完整图像数据用于后续其他的计算。

进一步的,将所述的步骤s30替换为s30’,并还包括步骤s60和s70,其中:

s30’,统计执行步骤s10的时长,预设第一阈值和第二阈值,若时长小于预设的第一阈值,则重复执行步骤s10至s20直至完整图像数据最终完成与用户旋转角度所匹配的旋转,若时长大于等于预设的第一阈值且小于预设的第二阈值,则执行步骤s40至s50,若时长大于等于预设的第二阈值,则执行步骤s60至s70;

s60,采用最邻近插值法将第一图像数据转换成极坐标矩阵,获取用户旋转角度并对极坐标进行偏移,采用最邻近插值法转换极坐标以得到旋转一次后的第一图像数据,输出旋转后的第一图像数据;重复上述过程直至第一图像数据最终完成与用户旋转角度所匹配的旋转,并在最后一次重复的过程中,采用双线性插值法转换极坐标以得到最后一次旋转后的第一图像数据并输出;

s70,在用户结束图像旋转时,采用双线性插值法将第二图像数据转换成极坐标矩阵,获取用户旋转角度并对极坐标进行偏移,采用双线性插值法转换极坐标直接得到旋转后的第二图像数据,将最终旋转后的第二图像数据与最终旋转后的第一图像数据相结合,组成旋转后的完整图像数据用于后续其他的计算。

进一步的,还包括:步骤s00,获取完整图像数据。

一种装置,包括:

处理器以及存储器;

所述存储器用于存储程序;

所述处理器用于执行所述存储器中的程序,使得所述装置执行上述的图像快速旋转的方法。

进一步的,所述程序包括第一程序以及第二程序,

所述的处理器包括中央处理器以及图形处理器,

所述中央处理器用于执行所述第一程序,使得所述装置执行上述的图像快速旋转的方法中的步骤s00;

所述图形处理器用于执行所述第二程序,使得所述装置执行上述的图像快速旋转的方法。

本发明有益效果:通过使用图形处理器(gpu,graphicsprocessingunit)的多核并行计算代替中央处理器(cpu,centralprocessingunit)中对图像旋转的数据处理,大大地提高了旋转的效率,并且在计算的过程中增加了运算用时的统计,使得程序能够在不同的设备上或者同个设备不同状态下都尽可能的保证运行流畅度,由此提高客户的使用体验度。

附图说明

图1为本发明一实施例方法流程图。

具体实施方式

为进一步说明各实施例,本发明提供有附图。这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理。配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点。现结合附图和具体实施方式对本发明进一步说明。

实施例1为一种图像快速旋转的方法,包括步骤:

s10,采用双线性插值法将完整图像数据转换成极坐标矩阵,获取用户旋转角度并对极坐标进行偏移,采用双线性插值法转换极坐标以得到旋转一次后的完整图像数据;

s20,输出旋转后的完整图像数据;

s30,统计执行步骤s10的时长,预设第一阈值,若时长小于预设的第一阈值,则重复执行步骤s10至s20直至完整图像数据最终完成与用户旋转角度所匹配的旋转,若时长大于等于预设的第一阈值,则执行步骤s40至s50;

s40,采用双线性插值法将屏幕数据的外接圆范围所包含的图像数据转换成极坐标矩阵,其中,屏幕数据的外接圆范围所包含的图像数据记为第一图像数据,除屏幕数据的外接圆范围所包含的图像数据之外的图像数据记为第二图像数据,获取用户旋转角度并对极坐标进行偏移,采用双线性插值法转换极坐标以得到旋转一次后的第一图像数据,输出第一图像数据;重复上述过程直至第一图像数据最终完成与用户旋转角度所匹配的旋转;

s50,在用户结束图像旋转时,采用双线性插值法将第二图像数据转换成极坐标矩阵,获取用户旋转角度并对极坐标进行偏移,采用双线性插值法转换极坐标直接得到旋转后的第二图像数据,将最终旋转后的第二图像数据与最终旋转后的第一图像数据相结合,组成旋转后的完整图像数据用于后续其他的计算。

实施例2

实施例2在实施例1的基础上,更改步骤s30为s30’并还包括步骤s60及s70,其中:

s30’,统计执行步骤s10的时长,预设第一阈值和第二阈值,若时长小于预设的第一阈值,则重复执行步骤s10至s20直至完整图像数据最终完成与用户旋转角度所匹配的旋转,若时长大于等于预设的第一阈值且小于预设的第二阈值,则执行步骤s40至s50,若时长大于等于预设的第二阈值,则执行步骤s60至s70;

s60,采用最邻近插值法将第一图像数据转换成极坐标矩阵,获取用户旋转角度并对极坐标进行偏移,采用最邻近插值法转换极坐标以得到旋转一次后的第一图像数据,输出旋转后的第一图像数据;重复上述过程直至第一图像数据最终完成与用户旋转角度所匹配的旋转,并在最后一次重复的过程中,采用双线性插值法转换极坐标以得到最后一次旋转后的第一图像数据并输出;

s70,在用户结束图像旋转时,采用双线性插值法将第二图像数据转换成极坐标矩阵,获取用户旋转角度并对极坐标进行偏移,采用双线性插值法转换极坐标直接得到旋转后的第二图像数据,将最终旋转后的第二图像数据与最终旋转后的第一图像数据相结合,组成旋转后的完整图像数据用于后续其他的计算。

接下来结合另一实施例3装置对实施例2的方法进行说明,示例中,以地图数据的旋转示出,可以知道的是,图像数据包括但不限于地图数据,本实施例3的装置包含了中央处理器、存储器、显卡三个单元。其中显卡的gpu为主要单元,至少需要支持opencl2.0以上或cuda的多线程编程能力,主要的数据计算功能在gpu中实现,gpu程序对处理的用时进行统计,并通过处理时间的不同而采用不同的旋转策略。存储器用于存储程序,程序用以获取地图的数据并完成地图数据的旋转计算。中央处理器为辅助单元,主要用来获取地图的数据并向gpu发出操作指令。在另外的实施例4装置中,包括中央处理器和存储器,存储器存储程序,由中央处理器执行存储器的程序以完成实施例1以及实施例2的方法

从硬件方面来看,考虑到gpu的多核处理器对离散型、互不相关的数据进行并行计算有着天然的优势,并且目前的gpu通用计算技术已相对成熟。我们在进行地图数据的计算时将使用gpu处理器代替cpu处理器进行数据的运算,不仅可以减少cpu的使用率还可以提高数据的计算速度。

从图像的旋转算法来看,目前图像旋转的方式众多,每种旋转方法都有其各自的特点,一般来说旋转的效果和旋转的速率成反比。所以我们应该对不同硬件的设备采用不同的算法来进行数据的处理。我们知道用极坐标进行图像的旋转是一种常用的方式,极坐标用在地图的旋转上有特别的效果,因为对地图的旋转是要连续输出显示的。用极坐标旋转的过程中对图像的旋转只需要偏移极坐标矩阵就能够完成,通过gpu的并行计算偏移的时间复杂度为o(1)。对gpu中图像旋转用时进行统计,设定两个时间阈值t1与t2(t1<t2),当用时大于t1且小于t2时采用分布式进行图像的旋转处理,当超过t2时我们改变极坐标旋转时的插值算法,以达到减少运行延时的效果。如图1所示,为本发明的方法的流程图,流程如下:

1、打开程序,获取地图中的数据。

2、将地图中的数据导入到gpu缓存中。

3、在gpu中采用双线性插值法将地图转为极坐标矩阵。

4、获取用户的旋转角度。

5、在gpu中对极坐标进行偏移,每次偏移一个像素。

6、偏移后的极坐标矩阵采用双线性插值法转换回笛卡尔坐标矩阵,得到旋转后的地图信息。

7、输出旋转后的地图信息,回到步骤5直到完成旋转。

8、对步骤3-步骤6进行计时,超过规定时间t1,就截取屏幕数据的外接圆所包含的数据(记为a)进行旋转,当用户停止旋转后再对a之外数据b进行计算。

9、如果超过规定时间t2,就将旋转过程中的拟合算法改为最临近差值法。

9.1、当用户停止旋转后先对a进行一次双线性差值算法的拟合,计算完之后输出到屏幕。然后再对数据b进使用双线性差值算法做计算。

在另外的一个实施例中,方法只设定有一个规定时间t1,且不包括有步骤9以及9.1。

gpu中的具体实现过程如下:

在整个流程中还有大量的图像之间的四则运算,这部分是非常适合采用并行的方法处理的,因为都是像元之间的操作。对于这部分,采用线程并行的方法来实现。gpu中的线程号(id)是由线程块号(a),线程块中总线程数(b),线程块中的线程号(c)3部分组成。那么就会有id=a×b+c,其中,id的取值范围就是从0到总线程数。将总线程数设置为图像的像素值,那么图像中的每个像元就分配了一个线程,只要每个线程执行完一次四则运算,那么对一整幅图像的运算也就完成。

第一步、将数据从cpu内存中复制到gpu显存中。

第二步、申请gpu中极坐标所需的内存空间。

第三步、开始计时。

第四步、gpu总线程数定义为极坐标矩阵的像素值,将极坐标矩阵中的每个点分配给一个线程,采用双线性插值法进行极坐标的转换。

第五步、在图像偏移的时候,新建一个矩阵,gpu总线程数定义为新矩阵的像素值,将新矩阵的每个点分配给了一个线程。

第六步、根据偏移量的不同选择不同的起始位置进行对应点的赋值。

第七步、设置同步,采用双线性插值法进行极坐标到直角坐标系的计算。

第八步、结束计时。

第九步、输出图像给cpu用于显示。

重复第六步到第九步,直到完成旋转。

统计步骤三到步骤八的时间t,判断与阈值t1、t2的关系。

当t1<t<t2时从第二步开始做修改,

第二步:在gpu的缓存中截取屏幕尺寸外接圆所包含的数据,记为a。

第三步:gpu总线程数定义为a所对应极坐标矩阵的像素值,并将a通过双线性插值法转为极坐标矩阵,记为a’。

第四步:分配线程,对a’进行偏移。

第五步:将偏移后的a’用双线性差值法转为直角坐标矩阵,输出给cpu显示。

重复第四步和第五步,直到完成旋转。

第六步:用户旋转结束后将a以外的区域(记为b)再进行旋转。

当t>=t2时

第二步:在gpu的缓存中截取屏幕尺寸外接圆所包含的数据,记为a。

第三步:gpu总线程数定义为a所对应极坐标矩阵的像素值,并将a通过最邻近插值法转为极坐标矩阵,记为a’。

第四步:分配线程,对a’进行偏移。

第五步:将偏移后的a’用最邻近插值法转为直角坐标矩阵,输出给cpu显示。

重复第四步和第五步,直到完成旋转。

第六步:对最终的a’用双线性插值法转为直角坐标矩阵,得到较好的旋转后图像,输出显示。

第七部:将a以外的区域(记为b)再进行旋转。

尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。

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