一种全景图片的切图方法、装置及存储介质与流程

文档序号:14796691发布日期:2018-06-29 18:34阅读:562来源:国知局

本发明涉及图片处理领域,特别是涉及一种全景图片的切图方法、装置及存储介质。



背景技术:

随着虚拟现实(VR,Virtual Reality)技术的发展,VR全景图片成为了全方位展示图片信息的一种新方式。全景图片可以由全景相机拍摄获得,通常情况下是一张长宽比为2:1的像素“扭曲”的图片,如图1所示。但全景图片通常由于图片扭曲而无法直接展示,或在使用的过程中被压缩而无法展示图片细节,因此,经常需要对全景图片进行切图操作,将全景图片处理成六张长宽比相同的输出图片,分别对应观察点的上、下、左、右、前、后六个面。切图结果的六张输出图片可以组成一个立方体,用户的视角则在立方体的中心,这样用户能够获得一个场景全方位的信息。

现有技术中的切图算法通过二层循环遍历的方式,计算原全景图片的每个像素点与输出图片像素点之间的对应关系,但由于一般全景图片的像素点数量过多,使用二层循环遍历的方式进行切图的切图效率较低,无法满足对切图效率的实际需求。



技术实现要素:

本发明实施例提供一种全景图片的切图方法、装置及存储介质,用以解决现有技术使用二层循环遍历的方式进行切图的切图效率较低,无法满足对切图效率的实际需求的问题。

为解决上述技术问题,一方面,本发明实施例提供一种全景图片的切图方法,包括:确定输出图片的每个输出像素点在虚拟三维坐标系中的三维坐标;获取所有所述三维坐标每个维度上的数值,并根据每个维度上的所有数值构建每个维度对应的矩阵;根据所述每个维度对应的矩阵,确定每个所述输出像素点在全景图片中对应的输入像素点的二维坐标;根据所述输入像素点的二维坐标构成所述输出图片。

进一步,确定输出图片的每个输出像素点在虚拟三维坐标系中的三维坐标,包括:将所述输出图片构建成虚拟立方体;确定所述虚拟立方体的每个面中每个输出像素点在虚拟三维坐标系中的三维坐标。

进一步,根据所述每个维度对应的矩阵,确定每个所述输出像素点在全景图片中对应的输入像素点的二维坐标,包括:对每个所述矩阵进行变换,得到每个所述输出像素点对应的初始二维坐标;根据所述全景图片的分辨率对所述初始二维坐标进行缩放,确定每个所述输出像素点在所述全景图片中对应的输入像素点的二维坐标。

进一步,对每个所述矩阵进行变换,得到每个所述输出像素点对应的初始二维坐标之后,还包括:检测所述输出图片的分辨率是否为预设分辨率;在所述输出图片的分辨率是所述预设分辨率的情况下,保存每个所述输出像素点对应的初始二维坐标。

进一步,根据所述输入像素点的坐标构成所述输出图片,包括:获取每个所述输入像素点的坐标对应的像素点信息,根据所有所述像素信息构成所述输出图片。

另一方面,本发明实施例还提供一种全景图片的切图装置,包括:坐标确定模块,用于确定输出图片的每个输出像素点在虚拟三维坐标系中的三维坐标;矩阵构建模块,用于获取所有所述三维坐标每个维度上的数值,并根据每个维度上的所有数值构建每个维度对应的矩阵;矩阵变换模块,用于根据所述每个维度对应的矩阵,确定每个所述输出像素点在全景图片中对应的输入像素点的二维坐标;图片输出模块,用于根据所述输入像素点的二维坐标构成所述输出图片。

进一步,所述坐标确定模块,具体用于:将所述输出图片构建成虚拟立方体;确定所述虚拟立方体的每个面中每个输出像素点在虚拟三维坐标系中的三维坐标。

进一步,所述矩阵变换模块,具体用于:对每个所述矩阵进行变换,得到每个所述输出像素点对应的初始二维坐标;根据所述全景图片的分辨率对所述初始二维坐标进行缩放,确定每个所述输出像素点在所述全景图片中对应的输入像素点的二维坐标。

进一步,所述矩阵变换模块,具体还用于:检测所述输出图片的分辨率是否为预设分辨率;在所述输出图片的分辨率是所述预设分辨率的情况下,保存每个所述输出像素点对应的初始二维坐标。

进一步,所述图片输出模块,具体用于:获取每个所述输入像素点的坐标对应的像素点信息,根据所有所述像素信息构成所述输出图片。

另一方面,本发明实施例还提供一种存储介质,所述存储介质上存储有计算机程序,所述程序被处理器执行时实现上述的全景切图方法。

本发明实施例通过将输出图片的坐标反向映射至全景图片的坐标的方式,简化了切图任务处理的逻辑,从而在计算反向映射关系时可以通过使用矩阵进行统一运算,达到加速切图处理速度,提高切图效率的目的,解决了现有技术使用二层循环遍历的方式进行切图的切图效率较低,无法满足对切图效率的实际需求的问题。

附图说明

图1是现有技术全景图片效果图;

图2是本发明第一实施例中全景图片的切图方法流程图;

图3是本发明第二实施例中全景图片的切图方法流程图;

图4是本发明第三实施例中全景图片的切图方法流程图;

图5是本发明第四实施例中全景图片的切图方法流程图;

图6是本发明第五实施例中全景图片的切图方法流程图;

图7是本发明第六实施例中全景图片的切图装置的结构示意图;

图8是本发明第八实施例中全景图片的切图任务的实施流程示意图。

具体实施方式

为了解决现有技术使用二层循环遍历的方式进行切图的切图效率较低,无法满足对切图效率的实际需求的问题,本发明提供了一种全景图片的切图方法、装置及存储介质,以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。

本发明第一实施例提供了一种全景图片的切图方法,其流程图如图2所示,主要包括步骤S201至S204:

S201,确定输出图片的每个输出像素点在虚拟三维坐标系中的三维坐标。

对于相互之间无关联,且需要执行相同处理逻辑的多个任务,将其转换成矩阵计算时,相较于通过遍历算法计算的效率可以大幅度的提高。在将全景图片中的所有输入像素点映射至输出图片的输出像素点时,对于由输出图片构成的立方体的不同面,在映射时使用了不同的处理逻辑来计算输出像素点的坐标,无法使用矩阵计算的方式进行加速。因此,在本发明实施例中,通过确定输出图片在虚拟三维坐标系中的虚拟的三维坐标,并进一步通过输出图片的坐标反向计算映射至全景图片的坐标的方式使处理逻辑统一,再进一步使用矩阵运算计算反向映射关系,加快了切图处理的速度,提高切图效率。

在本发明实施例中,首先需要确定输出图片中每个输出像素点在虚拟三维坐标系中的唯一的三维坐标,这样在进行反向映射时,每个输出像素点都可以通过其唯一的三维坐标,反向映射至全景图片中的应的输入像素点。例如输出像素点A在虚拟三维坐标系中的三维坐标为(Xa,Ya,Za),其在每个维度上的数值分别为Xa、Ya和Za。

S202,获取所有三维坐标每个维度上的数值,并根据每个维度上的所有数值构建每个维度对应的矩阵。

由于输出像素点的坐标均为三维坐标,则对应的矩阵的个数也为三个,记为第一矩阵、第二矩阵和第三矩阵,分别用于保存输出像素点的三维坐标的X值、Y值和Z值,即输出像素点A的三维坐标为(Xa,Ya,Za)时,Xa保存在第一矩阵、Ya保存在第二矩阵、Za保存在第三矩阵中,且Xa、Ya和Za在矩阵中的位置相同。

S203,根据每个维度对应的矩阵,确定每个输出像素点在全景图片中对应的输入像素点的二维坐标。

每个维度对应的矩阵构建完毕后,通过开源的数值计算扩展工具(numpy)对三个矩阵的整体计算,即进行反向映射至全景图片中输入像素点,得到每个输出像素点在全景图片中对应的输入像素点的二维坐标。优选地,在使用numpy进行矩阵运算时,还可以通过调用基础线性代数子程序库(BLAS,Basic Linear Algebra Subprograms)来实现矩阵运算的加速。

S204,根据输入像素点的二维坐标构成输出图片。

得到每个输出像素点在全景图片中对应的输入像素点的二维坐标后,根据输入像素点的二维坐标得到全景图片中对应的输入像素点,再利用全景图片中对应的输入像素点构成输出图片。

本发明实施例通过将输出图片的坐标反向映射至全景图片的坐标的方式,简化了切图任务处理的逻辑,从而在计算反向映射关系时可以通过使用矩阵进行统一运算,达到加速切图处理速度,提高切图效率的目的,解决了现有技术使用二层循环遍历的方式进行切图的切图效率较低,无法满足对切图效率的实际需求的问题。

当全景图片尺寸比较大而输出图片尺寸比较小时,使用二层循环遍历的方法会出现全景图片中的多个输入像素点映射后对应输出图片中的同一个输出像素点的情况,这样后计算的映射的像素会覆盖先计算的映射,造成了先计算的映射属于无用计算的问题;当原全景图尺寸比较小而输出图片尺寸比较大时,会出现全景图中的所有点映射后无法覆盖输出图片中的所有像素点的情况,造成输出图片失真。在本实施例中,通过将输出图片的坐标反向计算映射至全景图片的坐标的方式,使输出图片中每个输出像素点都得到了计算,均有全景图片中的输入像素点与之对应,因此不会出现输出图片失真的情况,做到了“按需计算”,避免了二层循环遍历的方法中出现重复无意义计算的状况。

本发明第二实施例提供了一种全景图片的切图方法,其流程图如图3所示,主要包括步骤S301至S305:

S301,将输出图片构建成虚拟立方体。

在本发明实施例中,切图的目的是将全景图片处理成六张长宽比相同的输出图片,分别对应观察点的上、下、左、右、前、后六个面。为了使六张输出图片的输出像素点计算其对应的全景图片的输入像素点的逻辑相同,因此需要确定每个输出像素点的唯一的坐标。在本实施例中,首先将六张输出图片抽象成虚拟的立方体,该虚拟的立方体的每个面对应一张输出图片。

优选地,为了方便计算,在抽象虚拟立方体时,可以将虚拟立方体抽象成边长为2的立方体,此时,每个输出像素点对应的三维坐标中,每个维度上的数值的取值范围都是[-1,1]。

S302,确定立方体的每个面中每个输出像素点的在虚拟三维坐标系中三维坐标。

将抽象而成的虚拟立方体放置在虚拟三维坐标系中,并且该虚拟立方体的中心与虚拟三维坐标系的原点重合,每个面均与虚拟三维坐标系的坐标轴垂直或平行,并基于该虚拟三维坐标系为输出图片上的每个像素点确定其唯一的三维坐标。这样在进行反向映射时,每个输出像素点都可以通过其唯一的三维坐标,反向映射至全景图片中的应的输入像素点。例如输出像素点A在三维坐标系中的三维坐标为(Xa,Ya,Za),其在每个维度上的数值分别为Xa、Ya和Za。

S303,获取所有三维坐标每个维度上的数值,并根据每个维度上的所有数值构建每个维度对应的矩阵。

由于输出像素点的坐标均为三维坐标,则对应的矩阵的个数也为三个,记为第一矩阵、第二矩阵和第三矩阵,分别用于保存输出像素点的三维坐标的X值、Y值和Z值,即输出像素点A的三维坐标为(Xa,Ya,Za)时,Xa保存在第一矩阵、Ya保存在第二矩阵、Za保存在第三矩阵中,且Xa、Ya和Za在矩阵中的位置相同。

S304,根据每个维度对应的矩阵,确定每个输出像素点在全景图片中对应的输入像素点的二维坐标。

每个维度对应的矩阵构建完毕后,通过numpy对三个矩阵的整体计算,即进行反向映射至全景图片中输入像素点,得到每个输出像素点在全景图片中对应的输入像素点的二维坐标。优选地,在使用numpy进行矩阵运算时,还可以通过调用BLAS来实现矩阵运算的加速。

S305,根据输入像素点的二维坐标构成输出图片。

得到每个输出像素点在全景图片中对应的输入像素点的二维坐标后,根据输入像素点的二维坐标得到全景图片中对应的输入像素点,再利用全景图片中对应的输入像素点构成输出图片。

本发明实施例通过构建立方体,为每个输出像素点确定其唯一的三维坐标,使每个输出像素点在反向映射计算后,都能确定一个对应的全景图片中的输入像素点,并通过将输出图片的坐标反向映射至全景图片的坐标的方式,简化了切图任务处理的逻辑,从而在计算反向映射关系时可以通过使用矩阵进行统一运算,达到加速切图处理速度,提高切图效率的目的,解决了现有技术使用二层循环遍历的方式进行切图的切图效率较低,无法满足对切图效率的实际需求的问题。

本发明第三实施例提供了一种全景图片的切图方法,其流程图如图4所示,主要包括步骤S401至S405:

S401,确定输出图片的每个输出像素点在虚拟三维坐标系中的三维坐标。

在本发明实施例中,首先需要确定输出图片中每个输出像素点在虚拟三维坐标系中的唯一的三维坐标,这样在进行反向映射时,每个输出像素点都可以通过其唯一的三维坐标,反向映射至全景图片中的应的输入像素点。例如输出像素点A在虚拟三维坐标系中的三维坐标为(Xa,Ya,Za),其在每个维度上的数值分别为Xa、Ya和Za。

S402,获取所有三维坐标每个维度上的数值,并根据每个维度上的所有数值构建每个维度对应的矩阵。

由于输出像素点的坐标均为三维坐标,则对应的矩阵的个数也为三个,记为第一矩阵、第二矩阵和第三矩阵,分别用于保存输出像素点的三维坐标的X值、Y值和Z值,即输出像素点A的三维坐标为(Xa,Ya,Za)时,Xa保存在第一矩阵、Ya保存在第二矩阵、Za保存在第三矩阵中,且Xa、Ya和Za在矩阵中的位置相同。

S403,对每个矩阵进行变换,得到每个输出像素点对应的初始二维坐标。

每个维度对应的矩阵构建完毕后,通过numpy对每个维度对应的矩阵的整体计算,得到每个输出像素点对应的初始二维坐标,其中,初始二维坐标为输出像素点在单位全景图中的坐标,单位全景图与全景图片仅在分辨率上有区别,可以将单位全景图片理解为全景图片的缩略图。优选地,在使用numpy进行矩阵运算时,还可以通过调用BLAS来实现矩阵运算的加速。

S404,根据全景图片的分辨率对初始二维坐标进行缩放,确定每个输出像素点在全景图片中对应的输入像素点的二维坐标。

得到每个输出像素点对应的初始二维坐标后,根据全景图片的分辨率对初始二维坐标进行缩放,缩放后的二维坐标即为每个输出像素点在全景图片中对应的输入像素点的二维坐标。

S405,根据输入像素点的二维坐标构成输出图片。

得到每个输出像素点在全景图片中对应的输入像素点的二维坐标后,根据输入像素点的二维坐标得到全景图片中对应的输入像素点,再利用全景图片中对应的输入像素点构成输出图片。

本发明实施例中,由于全景图片的分辨率不同,通过为每个输出像素点确定其在单位全景图中的初始二维坐标,再通过全景图片的分辨率对初始二维坐标进行缩放,可以减少由输出像素点的三维坐标直接转化为输入像素点的二维坐标的计算量,并且通过初始二维坐标进行中间计算,可以得出初始二维坐标仅与输出图片的分辨率有关的结论,为进一步进行二次切图加速提供方便。

本发明实施例通过将输出图片的坐标反向映射至全景图片的坐标的方式,简化了切图任务处理的逻辑,从而在计算反向映射关系时可以通过使用矩阵进行统一运算,达到加速切图处理速度,提高切图效率的目的,解决了现有技术使用二层循环遍历的方式进行切图的切图效率较低,无法满足对切图效率的实际需求的问题。

本发明四实施例提供了一种全景图片的切图方法,其流程图如图5所示,主要包括步骤S501至S507:

S501,确定输出图片的每个输出像素点在虚拟三维坐标系中的三维坐标。

在本发明实施例中,首先需要确定输出图片中每个输出像素点在虚拟三维坐标系中的唯一的三维坐标,这样在进行反向映射时,每个输出像素点都可以通过其唯一的三维坐标,反向映射至全景图片中的应的输入像素点。例如输出像素点A在虚拟三维坐标系中的三维坐标为(Xa,Ya,Za),其在每个维度上的数值分别为Xa、Ya和Za。

S502,获取所有三维坐标每个维度上的数值,并根据每个维度上的所有数值构建每个维度对应的矩阵。

由于输出像素点的坐标均为三维坐标,则对应的矩阵的个数也为三个,记为第一矩阵、第二矩阵和第三矩阵,分别用于保存输出像素点的三维坐标的X值、Y值和Z值,即输出像素点A的三维坐标为(Xa,Ya,Za)时,Xa保存在第一矩阵、Ya保存在第二矩阵、Za保存在第三矩阵中,且Xa、Ya和Za在矩阵中的位置相同。

S503,对每个矩阵进行变换,得到每个输出像素点对应的初始二维坐标。

每个维度对应的矩阵构建完毕后,通过numpy对每个维度对应的矩阵的整体计算,得到每个输出像素点对应的初始二维坐标,其中,初始二维坐标为输出像素点在单位全景图中的坐标,单位全景图与全景图片仅在分辨率上有区别,可以将单位全景图片理解为全景图片的缩略图。优选地,在使用numpy进行矩阵运算时,还可以通过调用BLAS来实现矩阵运算的加速。

S504,检测输出图片的分辨率是否为预设分辨率。

得到每个输出像素点对应的初始二维坐标后,检测输出图片的分辨率是否为预设分辨率,由于输出像素点对应的初始二维坐标的值与全景图片的分辨率无关,只与输出图片的分辨率有关,具有相同分辨率的输出图片,其输出像素点对应的初始二维坐标相同,因此,本实施例中可将常用的图片分辨率(1024*1024、2048*2048等)设置为预设分辨率,以进一步简化后续切图流程。

S505,在输出图片的分辨率是预设分辨率的情况下,保存每个输出像素点对应的初始二维坐标。

当输出图片的分辨率为预设分辨率时,可以将计算出的所有初始二维坐标进行保存,以方便下次在切图时,若输出图片的分辨率为预设分辨率,则可直接获取保存好的初始二维坐标,达到进一步加速的目的。

S506,根据全景图片的分辨率对初始二维坐标进行缩放,确定每个输出像素点在全景图片中对应的输入像素点的二维坐标。

得到每个输出像素点对应的初始二维坐标后,根据全景图片的分辨率对初始二维坐标进行缩放,缩放后的二维坐标即为每个输出像素点在全景图片中对应的输入像素点的二维坐标。

S507,根据输入像素点的二维坐标构成输出图片。

得到每个输出像素点在全景图片中对应的输入像素点的二维坐标后,根据输入像素点的二维坐标得到全景图片中对应的输入像素点,再利用全景图片中对应的输入像素点构成输出图片。

本发明实施例通过将输出图片的坐标反向映射至全景图片的坐标的方式,简化了切图任务处理的逻辑,从而在计算反向映射关系时可以通过使用矩阵进行统一运算,达到加速切图处理速度,提高切图效率的目的,解决了现有技术使用二层循环遍历的方式进行切图的切图效率较低,无法满足对切图效率的实际需求的问题。

本发明第五实施例提供了一种全景图片的切图方法,其流程图如图6所示,主要包括步骤S601至S604:

S601,确定输出图片的每个输出像素点在虚拟三维坐标系中的三维坐标。

在本发明实施例中,首先需要确定输出图片中每个输出像素点在虚拟三维坐标系中的唯一的三维坐标,这样在进行反向映射时,每个输出像素点都可以通过其唯一的三维坐标,反向映射至全景图片中的应的输入像素点。例如输出像素点A在虚拟三维坐标系中的三维坐标为(Xa,Ya,Za),其在每个维度上的数值分别为Xa、Ya和Za。

S602,获取所有三维坐标每个维度上的数值,并根据每个维度上的所有数值构建每个维度对应的矩阵。

由于输出像素点的坐标均为三维坐标,则对应的矩阵的个数也为三个,记为第一矩阵、第二矩阵和第三矩阵,分别用于保存输出像素点的三维坐标的X值、Y值和Z值,即输出像素点A的三维坐标为(Xa,Ya,Za)时,Xa保存在第一矩阵、Ya保存在第二矩阵、Za保存在第三矩阵中,且Xa、Ya和Za在矩阵中的位置相同。

S603,根据每个维度对应的矩阵,确定每个输出像素点在全景图片中对应的输入像素点的二维坐标。

每个维度对应的矩阵构建完毕后,通过numpy对三个矩阵的整体计算,即进行反向映射至全景图片中输入像素点,得到每个输出像素点在全景图片中对应的输入像素点的二维坐标。优选地,在使用numpy进行矩阵运算时,还可以通过调用BLAS来实现矩阵运算的加速。

S604,获取每个输入像素点的坐标对应的像素点信息,根据所有像素信息构成输出图片。

得到每个输出像素点在全景图片中对应的输入像素点的二维坐标后,根据输入像素点的坐标,在全景图片中获取每个输入像素点的坐标对应的像素点信息,主要包括输入像素点的红(Red)、绿(Green)和蓝(Blue)三种基色的字节(bit)值,并根据输入像素点的像素点信息构成输出图片。

本发明实施例通过获取全景图片中输入像素点的像素点信息,使每个输出像素点都有其对应的输入像素点,既可以根据其对应的输入像素点的像素点信息直接构建出输出图片,又不会造成输出图片失真的情况,并通过将输出图片的坐标反向映射至全景图片的坐标的方式,简化了切图任务处理的逻辑,从而在计算反向映射关系时可以通过使用矩阵进行统一运算,达到加速切图处理速度,提高切图效率的目的,解决了现有技术使用二层循环遍历的方式进行切图的切图效率较低,无法满足对切图效率的实际需求的问题。

本发明第六实施例提供了一种全景图片的切图装置,其结构示意图如图7所示,主要包括依次耦合的坐标确定模块71、矩阵构建模块72、矩阵变换模块73以及图片输出模块74,其中,坐标确定模块71用于确定输出图片的每个输出像素点在虚拟三维坐标系中的三维坐标;矩阵构建模块72用于获取所有三维坐标每个维度上的数值,并根据每个维度上的所有数值构建每个维度对应的矩阵;矩阵变换模块73用于根据每个维度对应的矩阵,确定每个输出像素点在全景图片中对应的输入像素点的二维坐标;图片输出模块74用于根据输入像素点的二维坐标构成输出图片。

对于相互之间无关联,且需要执行相同处理逻辑的多个任务,将其转换成矩阵计算时,相较于通过遍历算法计算的效率可以大幅度的提高。在将全景图片中的所有输入像素点映射至输出图片的输出像素点时,对于由输出图片构成的立方体的不同面,在映射时使用了不同的处理逻辑来计算输出像素点的坐标,无法使用矩阵计算的方式进行加速。因此,在本发明实施例中,通过确定输出图片在虚拟三维坐标系中的虚拟的三维坐标,并进一步通过输出图片的坐标反向计算映射至全景图片的坐标的方式使处理逻辑统一,再进一步使用矩阵运算计算反向映射关系,加快了切图处理的速度,提高切图效率。

基于上述考虑,本发明实施例在实现时,首先通过坐标确定模块确定输出图片中每个输出像素点在虚拟三维坐标系中的唯一的三维坐标,例如输出像素点A在虚拟三维坐标系中的三维坐标为(Xa,Ya,Za),则其在每个维度上的数值分别为Xa、Ya和Za;随后矩阵构建模块获取所有输出像素点的三维坐标在每个维度上的数值,并构建每个维度对应的矩阵,由于输出像素点的坐标均为三维坐标,则对应的矩阵的个数也为三个,记为第一矩阵、第二矩阵和第三矩阵,分别用于保存输出像素点的三维坐标的X值、Y值和Z值,即Xa保存在第一矩阵、Ya保存在第二矩阵、Za保存在第三矩阵中,且Xa、Ya和Za在矩阵中的位置相同;三个矩阵构建完毕后,通过矩阵变换模块对三个矩阵的整体计算,得到每个输出像素点在全景图片中对应的输入像素点的二维坐标;最后由图片输出模块根据输入像素点的二维坐标得到全景图片中对应的输入像素点,构成输出图片。优选地,矩阵变换模块可使用numpy工具进行矩阵计算,并且还可以进一步通过调用BLAS来实现矩阵运算的加速。

本发明实施例通过将输出图片的坐标反向映射至全景图片的坐标的方式,简化了切图任务处理的逻辑,从而在计算反向映射关系时可以通过使用矩阵进行统一运算,达到加速切图处理速度,提高切图效率的目的,解决了现有技术使用二层循环遍历的方式进行切图的切图效率较低,无法满足对切图效率的实际需求的问题。

当全景图片尺寸比较大而输出图片尺寸比较小时,使用二层循环遍历的方法会出现全景图片中的多个输入像素点映射后对应输出图片中的同一个输出像素点的情况,这样后计算的映射的像素会覆盖先计算的映射,造成了先计算的映射属于无用计算的问题;当原全景图尺寸比较小而输出图片尺寸比较大时,会出现全景图中的所有点映射后无法覆盖输出图片中的所有像素点的情况,造成输出图片失真。在本实施例中,通过将输出图片的坐标反向计算映射至全景图片的坐标的方式,使输出图片中每个输出像素点都得到了计算,均有全景图片中的输入像素点与之对应,因此不会出现输出图片失真的情况,做到了“按需计算”,避免了二层循环遍历的方法中出现重复无意义计算的状况。

本发明第七实施例提供了一种全景图片的切图装置,包括:坐标确定模块,用于确定输出图片的每个输出像素点在虚拟三维坐标系中的三维坐标;矩阵构建模块,与坐标确定模块耦合,用于获取所有三维坐标每个维度上的数值,并根据每个维度上的所有数值构建每个维度对应的矩阵;矩阵变换模块,与矩阵构建模块耦合,用于根据每个维度对应的矩阵,确定每个输出像素点在全景图片中对应的输入像素点的二维坐标;图片输出模块,与矩阵变换模块耦合,用于根据输入像素点的二维坐标构成输出图片。

在本发明实施例中,切图的目的是将全景图片处理成六张长宽比相同的输出图片,分别对应观察点的上、下、左、右、前、后六个面。为了使六张输出图片的输出像素点计算其对应的全景图片的输入像素点的逻辑相同,因此需要确定每个输出像素点的唯一的坐标。在本实施例中,首先通过坐标确定模块将六张输出图片抽象成虚拟的立方体,该虚拟的立方体的每个面对应一张输出图片;将抽象而成的虚拟立方体放置在虚拟三维坐标系中,并且该虚拟立方体的中心与虚拟三维坐标系的原点重合,每个面均与虚拟三维坐标系的坐标轴垂直或平行,并基于该虚拟三维坐标系为输出图片上的每个像素点确定其唯一的三维坐标;获取所有输出像素点的三维坐标在每个维度上的数值,构建每个维度对应的矩阵,例如输出像素点A在三维坐标系中的三维坐标为(Xa,Ya,Za)。优选地,为了方便计算,在坐标确定模块抽象虚拟立方体时,可以将虚拟立方体抽象成边长为2的立方体,此时,每个输出像素点对应的三维坐标中,每个维度上的数值的取值范围都是[-1,1]。

坐标确定模块确定所有输出像素点的三维坐标后,矩阵构建模块获取所有输出像素点的三维坐标在每个维度上的数值,如输出像素点A在三维坐标系中的三维坐标为(Xa,Ya,Za),其在每个维度上的数值分别为Xa、Ya和Za;随后构建每个维度对应的矩阵,由于输出像素点的坐标均为三维坐标,则对应的矩阵的个数也为三个,记为第一矩阵、第二矩阵和第三矩阵,分别用于保存输出像素点的三维坐标的X值、Y值和Z值,即Xa保存在第一矩阵、Ya保存在第二矩阵、Za保存在第三矩阵中,且Xa、Ya和Za在矩阵中的位置相同。

矩阵变换模块在每个维度对应的矩阵构建完毕后,通过对每个维度对应的矩阵的整体计算,先得到每个输出像素点对应的初始二维坐标,其中,初始二维坐标为输出像素点在单位全景图中的坐标,单位全景图与全景图片仅在分辨率上有区别,可以将单位全景图片理解为全景图片的缩略图;矩阵变换模块在得到每个输出像素点对应的初始二维坐标后,再根据全景图片的分辨率对初始二维坐标进行缩放,缩放后的二维坐标即为每个输出像素点在全景图片中对应的输入像素点的二维坐标。

进一步地,矩阵变换模块得到每个输出像素点对应的初始二维坐标后,检测输出图片的分辨率是否为预设分辨率,由于输出像素点对应的初始二维坐标的值与全景图片的分辨率无关,只与输出图片的分辨率有关,具有相同分辨率的输出图片,其输出像素点对应的初始二维坐标相同,因此,本实施例中可将常用的图片分辨率(1024*1024、2048*2048等)设置为预设分辨率,当输出图片的分辨率为预设分辨率时,可以将计算出的所有初始二维坐标进行保存,以方便下次在切图时,若输出图片的分辨率为预设分辨率,则可直接获取保存好的初始二维坐标,达到进一步加速的目的。

图片输出模块在根据输入像素点的坐标构建输出图片时,首先根据输入像素点的坐标在全景图片中获取每个输入像素点的坐标对应的像素点信息,主要包括输入像素点的RGB的字节值,并根据输入像素点的像素点信息构成输出图片。使每个输出像素点都有其对应的输入像素点,既可以根据其对应的输入像素点的像素点信息直接构建出输出图片,又不会造成输出图片失真的情况。

本发明实施例通过将输出图片的坐标反向映射至全景图片的坐标的方式,简化了切图任务处理的逻辑,从而在计算反向映射关系时可以通过使用矩阵进行统一运算,达到加速切图处理速度,提高切图效率的目的,解决了现有技术使用二层循环遍历的方式进行切图的切图效率较低,无法满足对切图效率的实际需求的问题。

当全景图片尺寸比较大而输出图片尺寸比较小时,使用二层循环遍历的方法会出现全景图片中的多个输入像素点映射后对应输出图片中的同一个输出像素点的情况,这样后计算的映射的像素会覆盖先计算的映射,造成了先计算的映射属于无用计算的问题;当原全景图尺寸比较小而输出图片尺寸比较大时,会出现全景图中的所有点映射后无法覆盖输出图片中的所有像素点的情况,造成输出图片失真。在本实施例中,通过将输出图片的坐标反向计算映射至全景图片的坐标的方式,使输出图片中每个输出像素点都得到了计算,均有全景图片中的输入像素点与之对应,因此不会出现输出图片失真的情况,做到了“按需计算”,避免了二层循环遍历的方法中出现重复无意义计算的状况。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例的方法。

本发明的第八实施例还提供了一种存储介质,存储有计算机程序。可选地,在本实施例中,计算机程序被处理器执行时实现如下步骤:

S801,确定输出图片的每个输出像素点在虚拟三维坐标系中的三维坐标;

S802,获取所有三维坐标每个维度上的数值,并根据每个维度上的所有数值构建每个维度对应的矩阵;

S803,根据每个维度对应的矩阵,确定每个输出像素点在全景图片中对应的输入像素点的二维坐标;

S804,根据输入像素点的二维坐标构成输出图片。

本发明实施例通过将输出图片的坐标反向映射至全景图片的坐标的方式,简化了切图任务处理的逻辑,从而在计算反向映射关系时利用矩阵运算,达到加速切图处理速度,提高切图效率的目的,解决了现有技术使用二层循环遍历的方式进行切图的切图效率较低,无法满足对切图效率的实际需求的问题。

具体地,计算机程序在被处理器执行确定输出图片的每个输出像素点在虚拟三维坐标系中的三维坐标的步骤时,具体实现如下步骤:将输出图片构建成虚拟立方体;确定虚拟立方体的每个面中每个输出像素点在虚拟三维坐标系中的三维坐标。

计算机程序在被处理器执行根据每个维度对应的矩阵,确定每个输出像素点在全景图片中对应的输入像素点的二维坐标的步骤时,具体实现如下步骤:对每个矩阵进行变换,得到每个输出像素点对应的初始二维坐标;根据全景图片的分辨率对初始二维坐标进行缩放,确定每个输出像素点在全景图片中对应的输入像素点的二维坐标。

进一步地,计算机程序在被处理器执行对每个矩阵进行变换,得到每个输出像素点对应的初始二维坐标的步骤之后,还被处理器执行以下步骤:检测输出图片的分辨率是否为预设分辨率;在输出图片的分辨率是预设分辨率的情况下,保存每个输出像素点对应的初始二维坐标。最后,计算机程序在被处理器执行根据输入像素点的坐标构成输出图片的步骤时,具体实现如下步骤:获取每个输入像素点的坐标对应的像素点信息,根据所有像素信息构成输出图片。

下面结合图8对全景图片的切图任务的实施过程进行详细的描述。

S1,切图任务开始,检测输出图片的分辨率是否为常用分辨率(相当于本发明第四实施例中的预设分辨率),若是,则执行S2,若不是,则执行S3;

S2,获取保存的常用分辨率对应的初始二维坐标,并执行S5;

S3,确定输出像素点的坐标矩阵(相当于本发明第一实施例中每个维度对应的矩阵);

S4,对坐标矩阵进行统一变换,得到每个输出像素点对应的初始二维坐标;

S5,根据全景图片的分辨率对初始二维坐标进行缩放,得到每个输出像素点在全景图片中对应的输入像素点的二维坐标;

S6,根据输入像素点的二维坐标构成输出图片。

可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。可选地,在本实施例中,处理器根据存储介质中已存储的程序代码执行上述实施例记载的方法步骤。可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

尽管为示例目的,已经公开了本发明的优选实施例,本领域的技术人员将意识到各种改进、增加和取代也是可能的,因此,本发明的范围应当不限于上述实施例。

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