具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
透视变换是图像处理中的一种常用的技术,透视变换是指利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,破坏原有的投影光线束,仍能保持承影面上投影几何图形不变的变换。透视变换经常用于将一些拍摄过程中由于拍摄角度而导致拍摄后的图像倾斜或者变形的像调整成正面的图像。另外,图像在拍摄过程中,由于摄像头自身的一些特性,会导致图像发生畸变,因而在图像的透视变换过程中,把因摄像头引起的图像畸变也考虑进去,尤为关键。
目前的图像透视变换中,一般先将原始的畸变图像的全图进行畸变矫正,将镜头引起的畸变还原得到无畸变图像,然后在该还原的无畸变图上,检测目标区域的角点的坐标,根据目标区域角点的坐标和透视变换后角点的坐标计算的到透视变换矩阵,然后根据透视变换矩阵将无畸变图进行透视变换,可以得到原始畸变图像较为准确的透视变换图像。图1a为二维码的畸变矫正和透视变换的示意图,将二维码进行全图畸变矫正后,再进行透视变换。由于畸变矫正是非线性变换,无论软件实现还是硬件实现都比较耗资源,对全图进行畸变矫正非常耗时。
此外,目前的融合畸变矫正和透视变换的方法,是直接检测出原始畸变图像的角点,使用角点的坐标计算透视变换矩阵,然后通过合并畸变矫正和透视变换的点运算,可大幅度的减少了运算量。图1b为二维码融合畸变矫正和透视变换的示意图。但是,由于角点的坐标是在畸变图片上的坐标,而非矫正后的图片的坐标,所以在运算时会引入比较大的误差,最终导致变换后的图片出现变形或者错位。
为了使图像在透视变换过程中,既能减小运算量,节约资源,又能使得到的透视变换后的图像更加精准,本说明书实施例提供一种图像透视变换的方法,如图2所示,所述方法可包括以下步骤S202-S206:
S202、对原始畸变图像上的像素角点进行畸变矫正,分别获取所述像素角点在无畸变图像上的坐标;
S204、根据所述像素角点在无畸变图像上的坐标计算透视变换矩阵;
S206、基于所述透视变换矩阵和畸变参数,获取原始畸变图像透视变换后的目标图像。
在采用摄像头拍摄图像时,由于摄像头自身的特性,会导致图像出现畸变。图像因摄像头自身特性引起的畸变可以通过畸变参数矫正。一般,摄像头的参数包括内参,外参和畸变参数,这些参数可以通过摄像头标定获取,比如可以采用常用的张正友平面标定法标定摄像头的参数。目前,有些图像透视变换方法,直接通过原始的畸变图像的角点的坐标和角点在透视变换后的图像上的坐标来求透视变换矩阵,这种方法会引入比较大的误差,导致透视变换后的图片出现变形或者错位。因此,本说明书的实施例先通过对原始的畸变图像上的像素角点进行畸变矫正,获取各个像素角点在无畸变图像上的坐标,其中,像素角点可以是原始畸变图像的顶点,如果原始畸变图像为四边形,则是四边形的四个顶点。由于在计算透视变换矩阵时,要求解透视变换矩阵至少需要四个像素点的对应坐标才能求解,因而,在获取原始畸变图像上的像素角点时至少需要获取四个像素角点的坐标。以二维码图像为例,可以先从原始的畸变图像中获取图像中的二维码区域的四个像素角点的坐标,即二维码的四个顶点的坐标,然后根据以下公式采用事先标定好的畸变参数求出四个角点在无畸变图像上的坐标:
[x,y]=K[u,v]
其中[x,y]为原始畸变图像上的像素角点坐标,[u,v]为无畸变图像上的像素角点坐标,K为畸变参数。
由于通过畸变矫正来计算像素角点在无畸变图像上的坐标并不是一一映射的,所以可能针对原始畸变图像上的像素角点计算得到的在无畸变图像上坐标并不是唯一的,为了找到像素角点在无畸变图像上的较优的坐标,在某些实施例中,可以采用如下方法对原始畸变图像上的各个像素角点进行畸变矫正,分别获取各个像素角点在无畸变图像上的坐标。首先,在无畸变图像上确定一个目标像素点,目标像素点的坐标与原始畸变图像上的像素角点的坐标相同,然后确定邻域半径,确定以所述目标像素点为圆心,邻域半径为半径的圆形区域内的像素点,这些像素点即为邻域像素点,然后遍历无畸变图像上目标像素点的各个邻域像素点,分别计算各个邻域像素点在原始畸变图像上的坐标;根据各个邻域像素点在原始畸变图像上的坐标确定所述像素角点在无畸变图像上的坐标。
在某些实施例中,可以分别根据各个邻域像素点在原始畸变图像上的坐标计算各个邻域像素点与像素角点的距离,然后将最短距离对应的坐标确定为所述像素角点在无畸变图像上的坐标。
举个例子,原始畸变图像上的某个像素角点P的坐标为(x0,y0),然后在无畸变图像上遍历以坐标为(x0,y0)的像素点为圆心,领域半径为半径的圆形区域中的所有领域像素点,通过畸变参数求出这些领域像素点在原始畸变图像上对应的坐标Pi,然后计算Pi与P的欧式距离,取Pi中距离最短的像素点坐标的作为像素角点P在无畸变图像上的坐标。
在确定原始畸变图像上各个像素角点在无畸变图像中的坐标时,可以根据原始畸变图像的畸变程度去灵活地设置邻域半径,当畸变程度较小时,邻域半径可以设置得小一些,这样需要遍历的邻域像素点少一些,可以减少计算量,当畸变程度较大时,可以将邻域半径设置得大一些,这样便可以找到最优的像素点。
计算得到像素角点在无畸变图像上的坐标后,可以根据像素角点在无畸变图像上的坐标计算透视变换矩阵。由于原始畸变图像上各个像素角点在经过透视变换后的目标图像上的坐标是已知的,根据像素角点在无畸变图像上的坐标以及在透视变换后的目标图像上的坐标,即可求得透视变换矩阵。以二维码为例,透视变换后的二维码的四个角点坐标分别为(0,0),(0,w),(0,h),(w,h)。其中,w为二维码的长,h为二维码的宽,在通过畸变校正求得四个角点在无畸变图像的坐标后,即可以根据以下透视变换公式,计算得到透视变换矩阵:
其中,[x,y,w]为像素角点在无畸变图像上的坐标,[u,v,w]为像素角点在透视变换后目标图像上的坐标,
为透视变换矩阵。
在计算得到透视变换矩阵后,即可以根据透视变换矩阵和畸变参数获取原始畸变图像透视变换后的目标图像。在一个实施例中,可以确定透视变换后的目标图像上每一个像素点在原始畸变图像上的对应像素点,然后计算该对应像素点的像素值,并将该像素值作为对应的目标图像中的像素点的像素值,从而得到透视变换后的目标图像中每个像素点的像素值。要获取原始畸变图像透视变换后的图像,即要确定透视变换后的图像中每个像素点的像素值,由于透视变换和畸变矫正都是图像处理中的点变换,即目标图像上的每一个点,都可以通过运算,找到原始畸变图像上的唯一对应点,因而可以通过透视变换矩阵和畸变参数求得目标图像上的像素点在原始畸变图像上的对应像素点,然后计算该像素点的像素值并作为对应的目标图像的像素点的像素值,即可求得目标图像中每个像素点的像素值。现有技术中一般是将整张原始畸变图像进行畸变矫正后,再通过透视变换矩阵计算得到透视变换后的图像,由于畸变矫正是非线性变换,运算量大,非常耗资源。本说明书的实施例是根据原始畸变图像经过透视变换后的目标图像中的各个像素点的坐标,并结合透视变换矩阵和畸变参数融合计算确定目标图像中的每个像素点在原始畸变图像上的对应像素点,然后计算对应像素点的像素值,来确定目标图像中的每个像素点的像素值,这样也无需求整张畸变矫正后的无畸变图像,无需缓存无畸变图像,也减小了计算量。
在某些实施例中,可以先通过透视变换矩阵计算目标图像上的像素点在无畸变图像上对应的第一坐标,然后再通过畸变参数确定所述第一坐标在原始畸变图像上对应的第二坐标,所述第二坐标的像素点即为目标图像上的像素点在原始畸变图像中的对应像素点。举个例子,假设目标图像上某个像素点P0的坐标为(x0,y0),可通过透视变换矩阵求得P0在无畸变图像上对应的第一坐标为(x,y),由于通过透视变换矩阵计算得到的坐标往往不是整数,因而可以获取与坐标(x,y)距离最近的四个整数坐标T0,T1,T2,T3,其中,坐标(x,y)的像素值可以通过坐标T0,T1,T2,T3的像素值插值计算得到。然后,再根据畸变参数计算坐标T0,T1,T2,T3在原始畸变图像上的对应坐标,同理,假设坐标T0,T1,T2,T3在原始畸变图像上的对应坐标为T0’,T1’,T2’,T3’,同样可以取原始畸变图像中与四个坐标距离最近的整数坐标,坐标T0对应的整数坐标为S0,S1,S2,S3,坐标T1在原始畸变图像上的对应的四个整数坐标为S4,S5,S6,S7,坐标T2在原始畸变图像上的对应的整数坐标为S8,S9,S10,S11,坐标T3在原始畸变图像上的对应的整数坐标为S12,S13,S14,S15,然后可以采用插值运算,根据S0,S1,S2,S3的像素值求得T0的像素值,根据S4,S5,S6,S7的像素值求得T1的像素值,根据S8,S9,S10,S11的像素值求得T2的像素值,根据S12,S13,S14,S15的像素值求得T3的像素值,同理,再根据T0,T1,T2,T3的像素值计算得到P0的像素值。
在某些实施例中,可以采用双线性插值运算来计算像素值,比如,目标图像上某个像素点P0在无畸变图像上的像素点为P1,P1的像素点可以通过双线插值法得到,先找到与P1临近的四个像素点为T0,T1,T2,T3,将T0,T1,T2,T3四个像素点的像素值进行双线性插值后得到P0的像素值,而T0,T1,T2,T3在原始畸变图像上也分别有对应的像素点,假设T0在原始畸变图像上对应的像素点为S’,而S’的像素值也可以通过临近四个像素点S0,S1,S2,S3的像素值双线性插值后得到。由于原始畸变图像上像素点S0,S1,S2,S3的像素值是已知的,因而可以通过双线性插值求得T0的像素值,同理再求得T0,T1,T2,T3的像素值后,可以通过双线性插值法求得P0的像素值。
由于在某些情况下,并不需要得到整张原始畸变图像透视变换后的图像,比如,对于一张人物图像,只需将图像中的人物进行透视变换,对于一张二维码图像,只需对二维码进行透视变换。所以,在某些实施例中,只需要截取原始畸变图像中的目标区域进行透视变换,获取目标区域的像素角点,并进行畸变矫正,得到目标区域像素角点在无畸变图像上的坐标,根据目标区域像素角点在无畸变图像上的坐标和透视变换后的坐标计算透视变换矩阵,然后根据计算得到的透视变换矩阵和畸变参数计算目标区域透视变换后的图像上各像素点的像素值。通过只截取目标区域来进行透视变换的方法,可以仅对感兴趣区域进行透视变换,无需针对整张原始图像,可以大大减小运算量。
为了进一步解释本说明书实施例中的图像透视变换的方法,以下再以一个具体的实施例加以说明。
如图3所示,原始畸变图像(a)中包含一个二维码,需要将目标区域二维码做透视变换,转换成二维码的正面图像。可以通过以下方法对原始畸变图像中的二维码作透视变换。首先,获取原始畸变图像中的二维码的四个角点的坐标,假设为A1,A2,A3,A4,然后通过事先标定的摄像头的畸变参数求得4个角点在无畸变图像(b)中的对应坐标,由于畸变矫正并不是一一映射的,因而通过畸变参数求得A1,A2,A3,A4在无畸变图像中的对应坐标并非唯一的,为了找到四个角点在无畸变图像上的最优对应坐标,可以先在无畸变图像中以角点为圆心,以领域半径为半径设置一个圆形区域作为领域区域,其中,领域半径可以根据原始畸变图像的畸变程度灵活设置,然后遍历领域区域中所有的领域像素点,通过畸变参数分别计算各个领域像素点在原始畸变图像上对应的像素点坐标,计算各个领域像素点在原始畸变图像上的对应坐标与像素角点的距离,取距离最短的像素点坐标作为像素角点在无畸变图像上坐标。计算得到像素角点在无畸变图像上的坐标后,通过4个角点在无畸变图像(b)中的对应坐标以及二维码透视变换后的目标图像(c)中四个角点的坐标,即可以求解得到透视变换矩阵。
在计算得到透视变换矩阵后,即可以根据透视变换矩阵和畸变参数计算目标图像(c)的每个像素点的像素值,由于透视变换和畸变矫正都是图像处理中的点变换,即目标图像上(c)中的每一个点,都可以通过运算,找到其在原始畸变图像上(a)的唯一对应点。假设目标图像(c)中的某个像素点p0,可以通过透视变换求得p0在无畸变图像(b)中的坐标P0’,由于该坐标很有可能为非整数,因而可以通过双线性插值的方法来计算坐标点P0’的像素值,可以取与该坐标距离最近的四个整数坐标,假设为T0,T1,T2,T3,然后根据T0,T1,T2,T3的像素值通过双线性插值运算得到P0’的像素值。同样的无畸变图像(b)中的四个坐标点T0,T1,T2,T3通过畸变参数也可以求得T0,T1,T2,T3在原始畸变图像(a)上的对应坐标,假设为T0’,T1’,T2’,T3’,同理,T0’,T1’,T2’,T3’很可能也不是整数,因而也可以通过双线性插值来求得T0’,T1’,T2’,T3’的像素值,假设与T0’距离最近的四个整数坐标为S0,S1,S2,S3,与T1’距离最近的四个整数坐标为S4,S5,S6,S7,与T2’距离最近的四个整数坐标为S8,S9,S10,S11,与T3’距离最近的四个整数坐标为S12,S13,S14,S15,然后根据原始畸变图像上的S0,S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14,S15的像素值,通过双线性插值运算求得T0,T1,T2,T3的像素值,从而求得目标图像中p0的像素值。
通过同样的方法,可以计算得到目标图像中每一个像素点的像素值,从而获得透视变换后的二维码正面图像。
以上实施例中的各种技术特征可以任意进行组合,只要特征之间的组合不存在冲突或矛盾,但是限于篇幅,未进行一一描述,因此上述实施方式中的各种技术特征的任意进行组合也属于本说明书公开的范围。
如图4所示,是本说明书一个实施例的一种图像透视变换的装置,所述装置40可包括:
畸变矫正模块41,用于对原始畸变图像上的像素角点进行畸变矫正,分别获取所述像素角点在无畸变图像上的坐标;
计算模块42,用于根据所述像素角点在无畸变图像上的坐标计算透视变换矩阵;
透视变换模块43,用于基于所述透视变换矩阵和畸变参数,获取原始畸变图像透视变换后的目标图像。
在一个实施例中,对原始畸变图像上的各个像素角点进行畸变矫正,分别获取各个像素角点在无畸变图像上的坐标的步骤包括:
遍历所述无畸变图像上目标像素点的各个邻域像素点;其中,所述目标像素点在无畸变图像上的坐标与所述像素角点在原始畸变图像上的坐标相同,所述领域像素点为以所述目标像素点为圆心,领域半径为半径的圆形区域内的像素点;
分别计算各个邻域像素点在原始畸变图像上的坐标;
根据各个邻域像素点在原始畸变图像上的坐标确定所述像素角点在无畸变图像上的坐标。
在一个实施例中,根据各个邻域像素点在原始畸变图像上的坐标确定所述像素角点在无畸变图像上的坐标的步骤包括:
分别根据各个邻域像素点在原始畸变图像上的坐标计算各个邻域像素点与所述像素角点的距离;
将最短距离对应的坐标确定为所述像素角点在无畸变图像上的坐标。
在一个实施例中,所述方法还包括:
根据所述原始畸变图像的畸变程度设置所述邻域半径的大小。
在一个实施例中,基于所述透视变换矩阵和畸变参数,获取原始畸变图像透视变换后的目标图像具体包括:
根据所述透视变换矩阵和畸变参数确定所述目标图像的像素点在原始畸变图像上的对应像素点;
计算所述对应像素点的像素值,并将所述对应像素点的像素值作为目标图像的像素点的像素值,以获得所述原始畸变图像透视变换后的目标图像。
在一个实施例中,根据所述透视变换矩阵和畸变参数确定所述目标图像的各个像素点在原始畸变图像上的对应像素点包括:
通过透视变换矩阵计算目标图像上的像素点在无畸变图像上对应的第一坐标;
通过畸变参数确定所述第一坐标在原始畸变图像上对应的第二坐标,所述第二坐标的像素点为所述对应像素点。
在一个实施例中,计算所述对应像素点的像素值,并将所述对应像素点的像素值作为目标图像的像素点的像素值包括:
采用插值运算计算所述对应像素点的像素值,并将所述像素值作为目标图像上的像素点的像素值。
在一个实施例中,所述插值运算为双线性插值。
在一个实施例中,所述像素角点为原始畸变图像上目标区域的像素角点,所述目标图像为所述目标区域透视变换后的图像。
上述装置中各个模块的功能和作用的实现过程具体详情见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本说明书装置的实施例可以应用在计算机设备上,例如服务器或智能终端。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在文件处理的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图5所示,为本说明书装置所在计算机设备的一种硬件结构图,除了图5所示的处理器501、内存502、网络接口503、以及非易失性存储器504之外,实施例中装置所在的服务器或电子设备,通常根据该计算机设备的实际功能,还可以包括其他硬件,对此不再赘述。
相应地,本说明书实施例还提供一种计算机存储介质,所述存储介质中存储有程序,所述程序被处理器执行时实现上述任一实施例中的方法。
相应地,本说明书实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例中的方法。
本申请可采用在一个或多个其中包含有程序代码的存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。计算机可用存储介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括但不限于:相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
本领域技术人员在考虑说明书及实践这里公开的说明书后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
以上所述仅为本公开的较佳实施例而已,并不用以限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开保护的范围之内。