CN104796649A - 一种三维投影的方法及装置 - Google Patents
一种三维投影的方法及装置 Download PDFInfo
- Publication number
- CN104796649A CN104796649A CN201410027338.6A CN201410027338A CN104796649A CN 104796649 A CN104796649 A CN 104796649A CN 201410027338 A CN201410027338 A CN 201410027338A CN 104796649 A CN104796649 A CN 104796649A
- Authority
- CN
- China
- Prior art keywords
- coordinate
- tripleplane
- source
- plane picture
- target area
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Image Processing (AREA)
Abstract
本发明公开了一种三维投影的方法及装置,本发明设置行缓冲区,按照设定的分段缓冲所需的内存中的在源平面图像中的像素点数据,设置三维投影目标区域,根据该三维投影目标区域与三维投影平面之间的投影对应关系,计算三维投影目标区域中的各个像素点所对应在源平面图像中的坐标,根据所对应在源平面图像中的坐标从所设置的行缓冲区中获取在源平面图像中的像素点数据,并对应三维投影目标区域的各个像素点的坐标输出,后续可以直接存储和/或显示所述三维投影目标区域的各个像素点的坐标对应的像素点数据。本发明可以提高三维投影的效率。
Description
技术领域
本发明涉及图像处理技术,特别涉及一种三维投影的方法及装置。
背景技术
随着投影技术的发展,可以将图像以三维方式投影。在进行三维投影时,图像加速器从内存中读取三维投影所需源图像中的像素点数据后,构造三维投影图像,输出显示。在这个过程中,会导致三维投影的效率不高,主要原因为:获取所需源图像的像素点数据的效率低下。三维投影图像中的相邻像素点所对应的源图像中的像素点数据的坐标变化很大,因此进行三维投影所需的源图像的像素点数据的内存的存储地址变化也很大,特别是三维投影角度很大时该特点尤其明显。这样,就造成在获取三维投影图像所需的源图像的像素点数据时,其访问的地址不连续,获取效率低下;如果图像加速器和内存之间为常用的总线结构,则两者之间的突发数据传输特性无法得到充分利用,如果内存为常用的大容量高速存储器,则由于所获取源图像的像素点数据在内存中的地址不连续也会造成获取效率低下,从而导致三维投影的效率不高。
为了提高获取源图像中的像素点数据的效率,从而提高三维投影的效率,图像加速器以宏块或三角形为单元对源图像中的各个平面分别进行三维投影处理后,存储为三维投影图像后再输出。例如,将源图像中的某个平面分割为三角形单元,然后再针对每个三角形单元进行三维投影后得到三维投影图像存储。每个三角形单元内部所需的像素点数据在内存的地址变化相对不大,在三维投影处理时,可以将每个三角形中的像素点数据对应的内存中的地址段缓存,然后再从缓存的地址段内提取这些像素点数据进行三维投影处理,这样,就可以提高获取源图像中的像素点数据的效率。
虽然对源图像中的各个平面分别以宏块或三角形为单元进行三维投影,可以提高三维投影的效率,但是提高效率程度有限,最主要的问题是无法做到获取源图像的像素点数据与输出显示的三维投影图像的像素点数据的点序一致,必须采用较大的缓存空间缓存形成完整的三维投影图像输出显示。具体地说:
首先,由于图像加速器和内存之间的突发数据传输特性只有在数据长度比较长时,读取数据的效率才会比较高,但由于将源图像中的某个平面划分为宏块或三角形,在读取过程中必然会读取一些对当前所划分的宏块或三角形冗余的像素点数据,这些像素点数据在后续三维投影处理需要有选择性的丢弃或被后续划分的宏块或三角形使用,这需要比较复杂的算法来维护,使得读取效率降低且占用缓存空间。举一个例子说明,图1为现有技术将源图像中的某个平面划分为三角形进行三维投影的示意图,如图所示,假设图像加速器和存储器之间的突发数据传输长度为4个像素点,在获取源图像中的某个平面所划分的三角形的第2行和第4行所需的像素点数据为4个像素点的整数倍,直接读取,但是第1行和第3行由于不是4个像素点数据的整数倍,所以需要读取4个冗余的像素点数据,图中显示为由圆点覆盖的像素点数据;
其次,在将宏块或三角形进行三维投影处理后得到的三维投影图像是按照宏块或三角形形式存储,而通常三维投影图像输出显示顺序是对三维投影图像逐行显示的,这与存储的方式不一致,因此需要额外的缓存空间将三维投影图像的完整帧存储,而无法做到实时处理实时输出,降低了三维投影效率。
综上,如何在实现三维投影的同时,提高三维投影的效率,还是一个亟待解决的问题。
发明内容
有鉴于此,本发明实施例提供一种三维投影的方法,该方法能够提高三维投影的效率。
本发明实施例还提供一种三维投影的装置,该装置能够提高三维投影的效率。
根据上述目的,本发明是这样实现的:
一种三维投影的方法,该方法包括:
设置行缓冲区,按照设定的分段,缓冲所需的内存中的在源平面图像中的像素点数据;
逐点扫描设定的三维投影目标区域的各个像素点的坐标;
根据该三维投影目标区域与三维投影平面之间的投影对应关系,分别计算得到该三维投影目标区域的各个像素点的坐标所对应在源平面图像中的坐标;
根据所对应在源平面图像中的坐标,从行缓冲区获取在源平面图像中的像素点数据;
将所述从行缓冲区获取的在源平面图像中的像素点数据对应该三维投影目标区域的各个像素点的坐标输出。
该方法还包括:将所述从行缓冲区获取在源平面图像中的像素点数据对应该三维投影目标区域的坐标输出后,存储和/或显示所述三维投影目标区域的各个像素点的坐标对应的像素点数据。
在该方法中,所述设定的分段是根据三维投影角度和距离确定的。
所述设定的分段过程为:所述行缓冲区按照源平面图像的x坐标进行分段,一行中同一段存储的源平面图像的y坐标相同,每段设置一组标签,记录该段存储的源平面图像的y坐标集合。
在该方法中,根据该三维投影目标区域与三维投影平面之间的投影对应关系,分别计算得到该三维投影目标区域的各个像素点的坐标所对应在源平面图像中的坐标为:
a、确定三维投影目标区域的坐标(0,0)对应到源平面图像平面内的坐标(x0,0,y0,0);
b、以投影光源O点的深度为0,三维投影目标区域的深度为1,确定出三维投影目标区域的的坐标(0,0)投影到三维投影平面上时对应的投影点的深度w0,0;根据坐标(0,0)和深度w0,0计算出对应的归一化坐标(u0,0,v0,0),其中,u0,0=x0,0/w0,0,v0,0=y0,0/w0,0;再分别计算出三维投影目标区域的坐标(0,1)和坐标(1,0)对应的深度w0,1和w1,0,对应的归一化坐标(u0,1,v0,1)和(u1,0,v1,0);
c、计算出三维投影目标区域的x坐标增加1时的1/w的增量d(1/w)/dx=1/w1,0-1/w0,0,u的增量du/dx=u1,0-u0,0,v的增量dv/dx=v1,0-v0,0;三维投影目标区域的y坐标增加1时的1/w的增量d(1/w)/dy=1/w0,1/-1/w0,0,u的增量du/dy=u0,1-u0,0,v的增量dv/dy=v0,1-v0,0;
d、从三维投影目标区域的坐标(0,0)开始,x坐标每增加1,1/w的值累加d(1/w)/dx,u的值累加du/dx,v的值累加dv/dx;y坐标每增加1,1/w的值累加d(1/w)/dy,u的值累加du/dy,v的值累加dv/dy,得到三维投影目标区域的每个像素点数据的w,u和v三个值,并由公式x=u*w,y=v*w计算出对应源平面图像中的坐标。
在该方法中,所述由公式x=u*w,y=v*w计算出对应源平面图像中的坐标时,该方法还包括:对应源平面图像中的坐标包括整数部分和小数部分;
根据整数部分坐标获取在源平面图像中的像素点数据;
或者根据整数部分坐标及采用的设定插值算法选取所需的周围相邻坐标后,根据所述插值算法对所需的周围相邻坐标对应的像素点数据采用小数部分进行插值计算。
在该方法中,所述a、b、c步骤与所述逐点扫描设定的三维投影目标区域的各个像素点的坐标同时进行。
在该方法中,在所述从行缓冲区获取在源平面图像中的像素点数据之前,该方法还包括:
判断行缓冲区中是否缓冲有要获取的在源平面图像中的像素点数据,如果是,则从行缓冲区获取在源平面图像中的像素点数据;如果否,则更新行缓冲区,缓冲要获取的在源平面图像中的像素点数据后,再从行缓冲区获取在源平面图像中的像素点数据。
在该方法中,所述判断行缓冲区中是否缓冲有要获取的在源平面图像中的像素点数据为:
判断要获取的在源平面图像中的像素点数据的x坐标在行缓冲区中的对应分段中后,再判断要获取的在源平面图像中的像素点数据的y坐标是否在该对应分段的y坐标集合中,如果是,行缓冲区中缓冲有要获取的在源平面图像中的像素点数据;如果否,行缓冲区中缓冲没有要获取的在源平面图像中的像素点数据。
一种三维投影的装置,该装置包括:行缓冲区单元、坐标转换单元、获取单元及输出单元,其中,
行缓冲区单元,用于按照设定的分段,缓冲所需的内存中的在源平面图像中的像素点数据到所设置的行缓冲区中;
坐标转换单元,用于逐点扫描设置的三维投影目标区域的各个像素点的坐标,根据该三维投影目标区域与三维投影平面之间的投影对应关系,分别计算得到该三维投影目标区域的各个像素点的坐标所对应在源平面图像中的坐标;
获取单元,用于根据所对应在源平面图像中的坐标,从行缓冲区获取在源平面图像中的像素点数据;
输出单元,用于将从行缓冲区获取在源平面图像中的像素点数据,对应该三维投影目标区域的各个像素点的坐标输出。
在该装置中,还包括:
存储单元,用于将输出单元输出的三维投影目标区域的各个像素点的坐标对应的像素点数据进行存储;
和/或,显示单元,用于将输出单元输出的三维投影目标区域的各个像素点的坐标对应的像素点数据进行显示。
在该装置中,还包括插值单元,其中,
坐标转换单元,还用于计算得到该三维投影目标区域的各个像素点的坐标所对应的在源平面图像的坐标,该对应的在源平面图像的坐标包括整数部分和小数部分;
插值单元,用于根据整数部分坐标获取在源平面图像中的像素点数据;或者根据整数部分坐标及采用的设定插值算法选取所需的周围相邻坐标后,根据所述插值算法对所需的周围相邻坐标对应的像素点数据采用小数部分进行插值计算。
由上述方案可以看出,本发明设置行缓冲区,按照设定的分段缓冲所需的内存中的在源平面图像中的像素点数据,设置三维投影目标区域,根据该三维投影目标区域与三维投影平面之间的投影对应关系,计算三维投影目标区域的各个像素点所对应的在源平面图像中的坐标,根据所对应的在源平面图像中的坐标从所设置的行缓冲区中获取在源平面图像中的像素点数据,并对应三维投影目标区域的各个像素点的坐标输出,后续可以直接存储和/或显示所述三维投影目标区域的各个像素点的坐标对应的像素点数据。一方面,由于本发明不是从内存中直接读取三维投影图像所需的源图像中的像素点数据后,构造三维投影图像输出,而是预先对源平面图像进行行缓存区的缓冲并转换为三维投影图像后输出,并不是顺序处理,构造三维投影图像的过程与输出三维投影图像的过程可以同时并实时进行,通过行缓冲区分段减少冗余的数据访问,所以提高三维投影效率。另一方面,本发明输出与后续进行显示的三维投影图像的像素点序一致,不像以宏块或三角形为单元进行三维投影时会出现其输出显示与存储的三维投影图像的像素点序不一致的问题,所以不需要将三维投影图像的完整帧存储下来再输出,提高了输出效率,从而提高了三维投影效率。
附图说明
图1为现有技术将源图像中的某个平面划分为三角形进行三维投影的示意图;
图2为本发明实施例提供三维投影方法的原理结构示意图;
图3为本发明实施例提供的三维投影的方法流程图;
图4为本发明实施例设置的三维投影目标区域示意图;
图5为本发明实施例提供的行缓冲区的结构示意图;
图6为本发明实施例提供的800*600像素点的源平面图像示意图;
图7为本发明实施例提供的800*600像素点的源平面图像三维投影得到的三维投影图像示意图;
图8为本发明实施例提供的三维投影的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。
为了提高三维投影效率,本发明采用的方法为:设置行缓冲区,按照设定的分段,缓冲所需的内存中的在源平面图像中的像素点数据,设定的分段是根据三维投影角度和距离确定;从行缓冲区内获取在源平面图像中的相应像素点数据,构造三维投影图像输出;将所输出的三维投影图像存储和/或显示。上述三个过程可以同时进行,通过行缓冲区分段减少冗余的数据访问,即减少访问的数据量来提高整体处理速度。
在本发明实施例中,设定分段还可以采用其他方式,如何分段并没有严格的计算方法,不同的分段方法对性能的改善效果也不同。
图2为本发明实施例提供三维投影方法的原理结构示意图,本发明提供的三维投影方法就是将源平面图像A进过三维投影处理后得到三维投影目标区域D中的三维投影图像B,使得观察者以垂直于三维投影目标区域D的角度观察三维投影图像B时呈现三维效果。如果以O点为投影光源,则三维投影图像B以设定角度和距离投影到三维投影平面M上时得到的图像A’呈现出源平面图像A的正常形状。
行缓冲区设定的分段是根据三维投影角度和距离确定,也就是图2中的三维投影图像B相对于三维投影平面M的角度和距离。
具体地,本发明设置行缓冲区,按照设定的分段缓冲所需的内存中的在源平面图像中的像素点数据,设置三维投影目标区域,根据该三维投影目标区域与三维投影平面之间的投影对应关系,计算三维投影目标区域中的各个像素点所对应的在源平面图像中的坐标,根据所对应的在源平面图像中的坐标从所设置的行缓冲区中获取在源平面图像中的像素点数据,并对应三维投影目标区域的各个像素点的坐标存储,后续可以直接将所存储的三维投影图像输出后,存储和/或显示所述三维投影目标区域的各个像素点的坐标对应的像素点数据。
在这里,所设置的行缓冲区中的每行缓冲单元,按照设定的分段,缓冲内存中的在源平面图像中的分段内的像素点数据,设定的分段与三维投影角度和距离确定相关,为的是保证在进行三维投影过程中,所需的在源平面图像中的像素点数据一般可以从行缓冲区中获取到。
图3为本发明实施例提供的三维投影的方法流程图,其具体步骤为:
步骤301、设置行缓冲区,按照设定的分段缓冲所需的内存中的在源平面图像中的像素点数据;
在本步骤中,该行缓冲区设置在图像加速器中;
步骤302、定义三维投影目标区域,逐点扫描得到该三维投影目标区域的各个像素点的坐标;
步骤303、根据该三维投影目标区域与三维投影平面之间的投影对应关系,分别计算得到该三维投影目标区域的各个像素点的坐标所对应在源平面图像中的坐标;
步骤304、根据所对应在源平面图像中的坐标,从行缓冲区获取在源平面图像中的像素点数据,对应在该三维投影目标区域的各个像素点的坐标输出。
该方法还包括:所述从行缓冲区获取在源平面图像中的像素点数据对应该三维投影目标区域的坐标输出后,存储和/或显示所述三维投影目标区域的各个像素点的坐标对应的像素点数据。
在该方法中,步骤301、步骤302及步骤303并不是顺序执行,可以同时执行。
在该方法中,在从行缓冲区获取在源平面图像中的像素点数据之前,该方法还包括:
判断行缓冲区中是否缓冲有要获取的在源平面图像中的像素点数据,如果是,则从行缓冲区获取在源平面图像中的像素点数据;如果否,则更新行缓冲区,缓冲要获取的在源平面图像中的像素点数据后,再从行缓冲区获取在源平面图像中的像素点数据。
以下对图3所述的步骤302和步骤303进行详细说明。
在步骤302中,对三维投影目标区域逐像素点进行扫描,如图4所示,图4为设置的三维投影目标区域示意图,设置该区域的左上角坐标为(0,0),对该区域按照x轴方向逐像素点扫描,并根据前一扫描像素点的坐标(xn,yn),通过x轴或y轴累加的方法,得到当前扫描像素点的坐标。在一行内扫描时,y轴坐标不变,x轴坐标逐像素点增加1,当前扫描像素点的坐标(xn+1,yn+1)=(xn+1,yn)。当一行扫描结束时,x轴坐标回到初始值0,y轴坐标增加1,当前扫描像素点的坐标(xn+1,yn+1)=(0,yn+1)。每扫描一像素点,将该像素点的坐标保存,以备步骤303时对应存储像素点数据时使用。逐像素点扫描直到扫描到三维投影目标区域的最后一行最后一列结束。
在步骤303中,
首先,根据三维投影目标区域与三维投影平面之间的投影对应关系,确定三维投影目标区域的坐标(0,0)对应到源平面图像平面内的坐标(x0,0,y0,0);
在这里,根据三维投影的角度不同,到源平面图像平面内的坐标(x0,0,y0,0)可能不在源平面图像上,但是肯定在源平面图像平面所建立的坐标系中;
然后,以投影光源O点的深度为0,三维投影目标区域的深度为1,确定出三维投影目标区域的的坐标(0,0)投影到三维投影平面上时对应的投影点的深度w0,0;根据坐标(0,0)和深度w0,0计算出对应的归一化坐标(u0,0,v0,0),其中,u0,0=x0,0/w0,0,v0,0=y0,0/w0,0;再以相同的方法分别计算出三维投影目标区域的坐标(0,1)和坐标(1,0)对应的深度w0,1和w1,0,对应的归一化坐标(u0,1,v0,1)和(u1,0,v1,0);计算出三维投影目标区域x坐标增加1时的1/w的增量d(1/w)/dx=1/w1,0-1/w0,0,u的增量du/dx=u1,0-u0,0,v的增量dv/dx=v1,0-v0,0;三维投影目标区域y坐标增加1时的1/w的增量d(1/w)/dy=1/w0,1/-1/w0,0,u的增量du/dy=u0,1-u0,0,v的增量dv/dy=v0,1-v0,0;
该步骤与步骤302可以同时进行;
该步骤中的1/w的增量、u的增量及v的增量都是采用微分方式计算得到的;
最后,从三维投影目标区域的坐标(0,0)开始,x坐标每增加1,1/w的值累加d(1/w)/dx,u的值累加du/dx,v的值累加dv/dx;y坐标每增加1,1/w的值累加d(1/w)/dy,u的值累加du/dy,v的值累加dv/dy,根据此方法,得到三维投影目标区域的每个像素点的w,u和v三个值,并由公式x=u*w,y=v*w计算出对应源平面图像中的坐标;
在计算得到的对应源平面图像中的坐标时,包括整数部分和小数部分,在本发明中,可以直接根据整数部分坐标获取在源平面图像中的像素点数据;为了得到的像素点数据更加准确,还可以结合整数部分和小数部分得到,具体地,根据整数部分坐标及采用的设定插值算法选取所需的周围相邻坐标后,根据所述插值算法对所需的周围相邻坐标对应的像素点数据采用小数部分进行插值计算。
在根据小数部分坐标进行插值计算时,插值算法可以根据需要进行选择,包括但不限于双线性插值,Bi-cubic插值或拉格朗日插值。
为了提高获取在源平面图像中的像素点数据的效率,本发明在步骤301中设置行缓冲区,用于缓存从内存中的在源平面图像中的像素点数据。根据实际需求,行缓冲区可以存放一行或多行源平面图像中的像素点数据,每行存储单元的个数等于源平面图像的列数,第n个存储单元用于存储源平面图像的第n列像素点数据,n为自然数。根据三维投影角度及距离,行缓冲区可以按照在源平面图像中的x坐标进行合理设定的分段,每行中同一段中存储的像素点数据的y坐标相同,不同段之间存储的像素点数据的y坐标可以不相同。每段有一组标签,用于记录该段中存储的各行像素点数据的y坐标,用P表示该段中各行像素点数据的y坐标构成的集合,如图5所示,图5为本发明实施例提供的行缓冲区的结构示意图。该图5以一行行缓冲区为例,其中,上方显示的为源平面图像,每个像素点数据都以(x,y)坐标标识,则将在该源平面图像中的各个像素点数据缓存到行缓冲区中的存储单元中,如该图中的下方所示,每个存储单元都采用P集合标识所缓冲的像素点的y轴坐标值。
在从行缓冲区获取在源平面图像中的像素点数据时,首先,根据计算得到对应在源平面图像中的坐标中的x坐标选择行缓冲区中对应的段,再确定y坐标是否属于该对应段的P集合,如果属于,则得到对应的源平面图像的坐标的像素点数据已经在行缓冲区中,直接获取即可,如果不属于,则需要由行缓冲区读取内存中的在源平面图像中对应坐标的像素点数据,进行对应段的像素点数据的更新后,再获取。
以下举一个具体实施例对本发明提供的三维投影方法进行详细说明。
由于本发明提供的方法中涉及的计算过程比较复杂,为了简化描述,以在源平面图像中的像素点数据为2*2,插值计算时采用4点双线性插值为例。
首先建立空间直角坐标系,以投影光源O点为空间直角坐标系的原点(0,0,0),三维投影目标区域D所在平面的方程为z=1,三维投影平面M的方程为x-3z+6=0。
三维投影目标区域D上的四个顶点在空间直角坐标系中的坐标分别为:
(xd(0,0),yd(0,0),zd(0,0))=(0,0,1),
(xd(0,1),yd(0,1),zd(0,1))=(0,1,1),
(xd(1,0),yd(1,0),zd(1,0))=(1,0,1),
(xd(1,1),yd(1,1),zd(1,1))=(1,1,1);
在以投影光源O点为观察点将其投影至三维投影平面M时,四个顶点投影后的坐标分别为:
(xm(0,0),ym(0,0),zm(0,0))=(0,0,2),
(xm(0,1),ym(0,1),zm(0,1))=(0,2,2),
(xm(1,0),ym(1,0),zm(1,0))=(3,0,3),
(xm(1,1),ym(1,1),zm(1,1))=(3,3,3);
源平面图像的四个顶点在直角坐标系中的坐标为:
(xs(0,0),ys(0,0))=(0,0),
(xs(0,1),ys(0,1))=(0,1),
(xs(1,0),ys(1,0))=(1,0),
(xs(1,1),ys(1,1))=(1,1);
为建立源平面图像与空间直角坐标系之间的关系,需要先确定源平面图像中至少两个点投影到三维投影平面M上时对应的空间直角坐标,该投影关系由实际的投影角度确定,该例子中假设(0,0)与(0,1)两点映射到三维投影平面M上时的空间坐标为(0,0,2)与(0,2,2)。
由源平面图像与空间直角坐标系之间的关系,可以算出,三维投影目标区域D的四个顶点映射至三维投影平面M上的点,所对应到源平面图像的直角坐标系中的坐标分别为:
(x0,0,y0,0)=(0,0),w0,0=2;
(x0,1,y0,1)=(0,1),w0,1=2;
(x1,0,y1,0)=(sqrt(10)/2,0),w1,0=3;
(x1,1,y1,1)=(sqrt(10)/2,3),w1,1=3;
根据步骤302所述的计算方法,可以计算出:
u0,0=x0,0/w0,0=0/2=0,
v0,0=y0,0/w0,0=0/2=0,
u0,1=x0,1/w0,1=0/2=0,
v0,1=y0,1/w0,1=1/2=1/2,
u1,0=x1,0/w1,0=sqrt(10)/2/3=sqrt(10)/6,
v1,0=y1,0/w1,0=0/3=0,
d(1/w)/dx=1/w1,0-1/w0,0=-1/6,
du/dx=u1,0-u0,0=sqrt(10)/6,
dv/dx=v1,0-v0,0=0,
d(1/w)/dy=1/w0,1/-1/w0,0=1/2-1/2=0,
du/dy=u0,1-u0,0=0,
dv/dy=v0,1-v0,0=1/2;
各项参数计算完成后,根据步骤301所述的方法,对三维投影目标区域D进行扫描,首先从三维投影目标区域D上的(0,0)点开始:
u0,0=0,
v0,0=0,
w0,0=2;
由此计算出对应源平面图像中坐标为:
x0,0=u0,0*w0,0=0,
y0,0=v0,0*w0,0=0;
对应源平面图像中坐标的整数部分为(xint,yint)=(0,0),用于取源平面图像中像素点数据,小数部分(xfrac,yfrac)=(0,0),用于插值。
由于采用双线性插值,故取的像素点数据为Ps(0,0),Ps(0,1),Ps(1,0),Ps(1,1);
插值后求得的像素点数据:
Pd(0,0)=Ps(0,0)*(1-xfrac)*(1-yfrac)+Ps(0,1)*(1-xfrac)yfrac+Ps(1,0)*xfrac*(1-yfrac)+Ps(1,1)*xfrac*yfrac=Ps(0,0)。
接下来按x轴方向扫描第二点,即三维投影目标区域D上的(1,0)点:
u1,0=u0,0+du/dx=sqrt(10)/6,
v1,0=v0,0+dv/dx=0,
w1,0=1/(1/w0,0+d(1/w)/dx)=3;
由此计算出对应源平面图像中坐标为:
x1,0=u1,0*w1,0=sqrt(10)/2≈1.58,
y1,0=v1,0*w1,0=0;
坐标的整数部分为(xint,yint)=(1,0),用于取源平面图像中像素点数据,小数部分(xfrac,yfrac)=(0.58,0),用于插值。
根据整数部分取得的像素点为Ps(1,0),Ps(1,1),Ps(2,0),Ps(2,1)
插值后求得的像素点数据:
Pd(1,0)=Ps(1,0)*(1-xfrac)*(1-yfrac)+Ps(1,1)*(1-xfrac)yfrac+Ps(2,0)*xfrac*(1-yfrac)+Ps(2,1)*xfrac*yfrac
=0.42*Ps(1,0)+0.58*Ps(2,0)。
其中由于P s(2,0),P s(2,1)超出源平面图像范围,需要特殊处理,该例子中对超出范围的像素点数据一律取0值进行代替。因此:
Pd(1,0)=0.42*Ps(1,0)
接下来由于之前的扫描点已经到行尾,故需要切换到第二行进行扫描,从第二行第一点开始,即三维投影目标区域D上的(0,1)点:
u0,1=u0,0+du/dy=0,
v0,1=v0,0+dv/dy=1/2,
w0,1=1/(1/w0,0+d(1/w)/dy)=2;
由此计算出对应源平面图像中坐标为:
x0,1=u0,1*w0,1=0,
y0,1=v0,1*w0,1=1/2*2=1;
坐标的整数部分为(xint,yint)=(0,1),用于获取源平面图像中的像素点数据,小数部分(xfrac,yfrac)=(0,0),用于插值。
根据整数部分取得的像素点数据为Ps(0,1),Ps(0,2),Ps(1,1),Ps(1,2);
插值后求得的像素点数据:
Pd(0,1)=Ps(0,1)*(1-xfrac)*(1-yfrac)+Ps(0,2)*(1-xfrac)yfrac+Ps(1,1)*xfrac*(1-yfrac)+Ps(1,2)*xfrac*yfrac=Ps(0,1)
接下来向x方向扫描,计算三维投影目标区域D上的(1,1)点:
u1,1=u0,1+du/dx=sqrt(10)/6,
v1,1=v0,1+dv/dx=1/2,
w1,1=1/(1/w0,1+d(1/w)/dx)=3;
由此计算出对应源平面图像中坐标为:
x1,1=u1,1*w1,1=sqrt(10)/2≈1.58,
y1,1=v1,1*w1,1=3/2=1.5;
坐标的整数部分为(xint,yint)=(1,1),用于取源平面图像中像素点,小数部分(xfrac,yfrac)=(0.58,0.5),用于插值。
根据整数部分取得的像素点数据为Ps(1,1),Ps(1,2),Ps(2,1),Ps(2,2);
插值后求得的像素点数据:
Pd(1,1)=Ps(1,1)*(1-xfrac)*(1-yfrac)+Ps(1,2)*(1-xfrac)yfrac+Ps(2,1)*xfrac*(1-yfrac)+Ps(2,2)*xfrac*yfrac
=0.21*Ps(1,1)+0.21*Ps(1,2)+0.29*Ps(2,1)+0.29*Ps(2,2)
=0.21*Ps(1,1)
至此,完成了三维投影目标区域D上所有像素点的坐标对应的像素点数据的计算,然后进行存储即可。
上述举例得到的三维投影图像太小,无法看到效果,所以本发明给出在800*600像素点的源平面图像在三维投影后得到三维投影图像的效果图,图6为本发明实施例提供的800*600像素点的源平面图像示意图;图7为本发明实施例提供的800*600像素点的源平面图像三维投影得到的三维投影图像示意图。
上述举例得到的三维投影图像太小,所以设置的行缓冲区的作用无法体现,以下举例说明所设置的行缓冲区对三维投影效率提高的作用。
对于三维投影目标区域D第n行的像素点数据P0~Pm,其中计算每一个像素点数据所需要的在源平面图像中的像素点数据所在坐标的行数如下:
Line m~Line m+1:P0~P9
Line m+1~Line m+2:P10~P19
Line m+2~Line m+3:P20~P29
采用本发明中分段的方法,将行缓冲区的一行分为15点一段,则对于P0~P14,只需要Line m~Line m+2,共15点*3行,对于P15~P29,只需要Linem+1~Line m+3,共15点*3行,总共只需要包括3行缓冲单元的缓冲区就足够。并且在此过程中不需要对行缓冲区进行更新,保证当前缓存的像素点数据在需要的时候被直接获取到。
而如果采用通常的不分段的方法进行缓存,如果只缓存3行,则在处理P0~P19时缓冲区中是Line m~Line m+2,而处理到P20时,需要Line m+3,而行缓冲区只能缓冲3行,此时必须对行缓冲区进行更新,将Line m丢弃,读入Line m+3,这样会浪费额外的资源。如果想在此过程中不进行行缓冲区的更新,就必须缓存4行像素点数据。又会带来额外的存储浪费。
当沿三维投影目标区域D的x方向扫描时对应源平面图像中的y坐标变化越大时,对行缓冲区进行分段的优势越明显。在实际使用时,实际使用时,根据插值的方法不同,投影参数不同,对行缓冲区可以进行不同的分段,从而达到行缓冲区的最优利用。
图8为本发明实施例提供的三维投影的装置结构示意图,该装置为图像加速器,包括:行缓冲区单元、坐标转换单元、获取单元及输出单元,其中,
行缓冲区单元,用于按照设定的分段缓冲所需的内存中的在源平面图像中的像素点数据到所设置的行缓冲区中;
坐标转换单元,用于逐点扫描设置的三维投影目标区域的各个像素点的坐标,根据该三维投影目标区域与三维投影平面之间的投影对应关系,分别计算得到该三维投影目标区域的各个像素点的坐标所对应在源平面图像中的坐标;
获取单元,用于根据所对应在源平面图像中的坐标,从行缓冲区获取在源平面图像中的像素点数据;
输出单元,用于将从行缓冲区获取在源平面图像中的像素点数据,对应该三维投影目标区域的各个像素点的坐标输出。
在该装置中,还包括:
存储单元,用于将输出单元输出的三维投影目标区域的各个像素点的坐标对应的像素点数据进行存储;
和/或,显示单元,用于将输出单元输出的三维投影目标区域的各个像素点的坐标对应的像素点数据进行显示。
在该装置中,还包括插值单元,其中,
坐标转换单元,还用于计算得到该三维投影目标区域的各个像素点的坐标所对应的在源平面图像的坐标,该对应的在源平面图像的坐标包括整数部分和小数部分;
插值单元,用于根据整数部分坐标获取在源平面图像中的像素点数据;或者根据整数部分坐标及采用的设定插值算法选取所需的周围相邻坐标后,根据所述插值算法对所需的周围相邻坐标对应的像素点数据采用小数部分进行插值计算。
在该装置中,还包括判断单元,用于判断行缓冲区是否缓冲有要获取的在源平面图像中的像素点数据,如果是,则指示获取单元从行缓冲区获取在源平面图像中的像素点数据;如果否,则指示行缓冲区单元更新行缓冲区,缓冲要获取的在源平面图像中的像素点数据后,再指示获取单元从行缓冲区获取在源平面图像中的像素点数据。
以上举较佳实施例,对本发明的目的、技术方案和优点进行了进一步详细说明,所应理解的是,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (12)
1.一种三维投影的方法,其特征在于,该方法包括:
设置行缓冲区,按照设定的分段,缓冲所需的内存中的在源平面图像中的像素点数据;
逐点扫描设定的三维投影目标区域的各个像素点的坐标;
根据该三维投影目标区域与三维投影平面之间的投影对应关系,分别计算得到该三维投影目标区域的各个像素点的坐标所对应在源平面图像中的坐标;
根据所对应在源平面图像中的坐标,从行缓冲区获取在源平面图像中的像素点数据;
将所述从行缓冲区获取的在源平面图像中的像素点数据对应该三维投影目标区域的各个像素点的坐标输出。
2.如权利要求1所述的方法,其特征在于,该方法还包括:将所述从行缓冲区获取在源平面图像中的像素点数据对应该三维投影目标区域的坐标输出后,存储和/或显示所述三维投影目标区域的各个像素点的坐标对应的像素点数据。
3.如权利要求1所述的方法,其特征在于,所述设定的分段是根据三维投影角度和距离确定的。
4.如权利要求3所述的方法,其特征在于,所述设定的分段过程为:所述行缓冲区按照源平面图像的x坐标进行分段,一行中同一段存储的源平面图像的y坐标相同,每段设置一组标签,记录该段存储的源平面图像的y坐标集合。
5.如权利要求1或2所述的方法,其特征在于,根据该三维投影目标区域与三维投影平面之间的投影对应关系,分别计算得到该三维投影目标区域的各个像素点的坐标所对应在源平面图像中的坐标为:
a、确定三维投影目标区域的坐标(0,0)对应到源平面图像平面内的坐标(x0,0,y0,0);
b、以投影光源O点的深度为0,三维投影目标区域的深度为1,确定出三维投影目标区域的的坐标(0,0)投影到三维投影平面上时对应的投影点的深度w0,0;根据坐标(0,0)和深度w0,0计算出对应的归一化坐标(u0,0,v0,0),其中,u0,0=x0,0/w0,0,v0,0=y0,0/w0,0;再分别计算出三维投影目标区域的坐标(0,1)和坐标(1,0)对应的深度w0,1和w1,0,对应的归一化坐标(u0,1,v0,1)和(u1,0,v1,0);
c、计算出三维投影目标区域的x坐标增加1时的1/w的增量d(1/w)/dx=1/w1,0-1/w0,0,u的增量du/dx=u1,0-u0,0,v的增量dv/dx=v1,0-v0,0;三维投影目标区域的y坐标增加1时的1/w的增量d(1/w)/dy=1/w0,1/-1/w0,0,u的增量du/dy=u0,1-u0,0,v的增量dv/dy=v0,1-v0,0;
d、从三维投影目标区域的坐标(0,0)开始,x坐标每增加1,1/w的值累加d(1/w)/dx,u的值累加du/dx,v的值累加dv/dx;y坐标每增加1,1/w的值累加d(1/w)/dy,u的值累加du/dy,v的值累加dv/dy,得到三维投影目标区域的每个像素点数据的w,u和v三个值,并由公式x=u*w,y=v*w计算出对应源平面图像中的坐标。
6.如权利要求5所述的方法,其特征在于,所述由公式x=u*w,y=v*w计算出对应源平面图像中的坐标时,该方法还包括:对应源平面图像中的坐标包括整数部分和小数部分;
根据整数部分坐标获取在源平面图像中的像素点数据;
或者根据整数部分坐标及采用的设定插值算法选取所需的周围相邻坐标后,根据所述插值算法对所需的周围相邻坐标对应的像素点数据采用小数部分进行插值计算。
7.如权利要求5所述的方法,其特征在于,所述a、b、c步骤与所述逐点扫描设定的三维投影目标区域的各个像素点的坐标同时进行。
8.如权利要求4所述的方法,其特征在于,在所述从行缓冲区获取在源平面图像中的像素点数据之前,该方法还包括:
判断行缓冲区中是否缓冲有要获取的在源平面图像中的像素点数据,如果是,则从行缓冲区获取在源平面图像中的像素点数据;如果否,则更新行缓冲区,缓冲要获取的在源平面图像中的像素点数据后,再从行缓冲区获取在源平面图像中的像素点数据。
9.如权利要求8所述的方法,其特征在于,所述判断行缓冲区中是否缓冲有要获取的在源平面图像中的像素点数据为:
判断要获取的在源平面图像中的像素点数据的x坐标在行缓冲区中的对应分段中后,再判断要获取的在源平面图像中的像素点数据的y坐标是否在该对应分段的y坐标集合中,如果是,行缓冲区中缓冲有要获取的在源平面图像中的像素点数据;如果否,行缓冲区中缓冲没有要获取的在源平面图像中的像素点数据。
10.一种三维投影的装置,其特征在于,该装置包括:行缓冲区单元、坐标转换单元、获取单元及输出单元,其中,
行缓冲区单元,用于按照设定的分段,缓冲所需的内存中的在源平面图像中的像素点数据到所设置的行缓冲区中;
坐标转换单元,用于逐点扫描设置的三维投影目标区域的各个像素点的坐标,根据该三维投影目标区域与三维投影平面之间的投影对应关系,分别计算得到该三维投影目标区域的各个像素点的坐标所对应在源平面图像中的坐标;
获取单元,用于根据所对应在源平面图像中的坐标,从行缓冲区获取在源平面图像中的像素点数据;
输出单元,用于将从行缓冲区获取在源平面图像中的像素点数据,对应该三维投影目标区域的各个像素点的坐标输出。
11.如权利要求10所述的装置,其特征在于,还包括:
存储单元,用于将输出单元输出的三维投影目标区域的各个像素点的坐标对应的像素点数据进行存储;
和/或,显示单元,用于将输出单元输出的三维投影目标区域的各个像素点的坐标对应的像素点数据进行显示。
12.如权利要求10或11所述的装置,其特征在于,还包括插值单元,其中,
坐标转换单元,还用于计算得到该三维投影目标区域的各个像素点的坐标所对应的在源平面图像的坐标,该对应的在源平面图像的坐标包括整数部分和小数部分;
插值单元,用于根据整数部分坐标获取在源平面图像中的像素点数据;或者根据整数部分坐标及采用的设定插值算法选取所需的周围相邻坐标后,根据所述插值算法对所需的周围相邻坐标对应的像素点数据采用小数部分进行插值计算。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410027338.6A CN104796649B (zh) | 2014-01-21 | 2014-01-21 | 一种三维投影的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410027338.6A CN104796649B (zh) | 2014-01-21 | 2014-01-21 | 一种三维投影的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104796649A true CN104796649A (zh) | 2015-07-22 |
CN104796649B CN104796649B (zh) | 2017-12-26 |
Family
ID=53561133
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410027338.6A Active CN104796649B (zh) | 2014-01-21 | 2014-01-21 | 一种三维投影的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104796649B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105447812A (zh) * | 2015-11-10 | 2016-03-30 | 南京大学 | 一种基于线状阵列的三维活动图像显示及信息隐藏方法 |
CN107506572A (zh) * | 2017-07-24 | 2017-12-22 | 中国华能集团清洁能源技术研究院有限公司 | 获取目标点的高度的方法和装置 |
CN108921779A (zh) * | 2018-07-13 | 2018-11-30 | 北京炬力北方微电子有限公司 | 一种三维投影映射方法及装置 |
CN109448040A (zh) * | 2018-10-22 | 2019-03-08 | 湖南机电职业技术学院 | 一种机械生产制造展示辅助系统 |
CN110503602A (zh) * | 2018-05-18 | 2019-11-26 | 杭州海康威视数字技术股份有限公司 | 一种图像的投影变换方法、装置及电子设备 |
CN114727075A (zh) * | 2021-01-06 | 2022-07-08 | 成都极米科技股份有限公司 | 投影控制方法和装置、投影设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6331856B1 (en) * | 1995-11-22 | 2001-12-18 | Nintendo Co., Ltd. | Video game system with coprocessor providing high speed efficient 3D graphics and digital audio signal processing |
US20050030317A1 (en) * | 2003-08-06 | 2005-02-10 | Magic Earth, Inc. | System and method for applying accurate three-dimensional volume textures to arbitrary triangulated surfaces |
CN1624721A (zh) * | 2003-12-01 | 2005-06-08 | Lg电子株式会社 | 线段裁剪方法以及使用其显示三维图像的方法 |
CN101174331A (zh) * | 2006-11-01 | 2008-05-07 | 深圳市蓝韵实业有限公司 | 一种医学影像最大密度投影生成方法 |
CN101916175A (zh) * | 2010-08-20 | 2010-12-15 | 浙江大学 | 自适应于投影表面的智能投影方法 |
CN101930620A (zh) * | 2009-06-18 | 2010-12-29 | 晨星软件研发(深圳)有限公司 | 使二维影像呈现出三维效果的影像处理方法及相关影像处理装置 |
CN103198494A (zh) * | 2013-04-03 | 2013-07-10 | 武汉海达数云技术有限公司 | 一种基于建筑外轮廓线及激光点云的建筑立面提取方法 |
-
2014
- 2014-01-21 CN CN201410027338.6A patent/CN104796649B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6331856B1 (en) * | 1995-11-22 | 2001-12-18 | Nintendo Co., Ltd. | Video game system with coprocessor providing high speed efficient 3D graphics and digital audio signal processing |
US20050030317A1 (en) * | 2003-08-06 | 2005-02-10 | Magic Earth, Inc. | System and method for applying accurate three-dimensional volume textures to arbitrary triangulated surfaces |
CN1624721A (zh) * | 2003-12-01 | 2005-06-08 | Lg电子株式会社 | 线段裁剪方法以及使用其显示三维图像的方法 |
CN101174331A (zh) * | 2006-11-01 | 2008-05-07 | 深圳市蓝韵实业有限公司 | 一种医学影像最大密度投影生成方法 |
CN101930620A (zh) * | 2009-06-18 | 2010-12-29 | 晨星软件研发(深圳)有限公司 | 使二维影像呈现出三维效果的影像处理方法及相关影像处理装置 |
CN101916175A (zh) * | 2010-08-20 | 2010-12-15 | 浙江大学 | 自适应于投影表面的智能投影方法 |
CN103198494A (zh) * | 2013-04-03 | 2013-07-10 | 武汉海达数云技术有限公司 | 一种基于建筑外轮廓线及激光点云的建筑立面提取方法 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105447812A (zh) * | 2015-11-10 | 2016-03-30 | 南京大学 | 一种基于线状阵列的三维活动图像显示及信息隐藏方法 |
CN105447812B (zh) * | 2015-11-10 | 2018-11-27 | 南京大学 | 一种基于线状阵列的三维活动图像显示及信息隐藏方法 |
CN107506572A (zh) * | 2017-07-24 | 2017-12-22 | 中国华能集团清洁能源技术研究院有限公司 | 获取目标点的高度的方法和装置 |
CN107506572B (zh) * | 2017-07-24 | 2020-09-29 | 中国华能集团清洁能源技术研究院有限公司 | 获取目标点的高度的方法和装置 |
CN110503602A (zh) * | 2018-05-18 | 2019-11-26 | 杭州海康威视数字技术股份有限公司 | 一种图像的投影变换方法、装置及电子设备 |
CN108921779A (zh) * | 2018-07-13 | 2018-11-30 | 北京炬力北方微电子有限公司 | 一种三维投影映射方法及装置 |
CN109448040A (zh) * | 2018-10-22 | 2019-03-08 | 湖南机电职业技术学院 | 一种机械生产制造展示辅助系统 |
CN114727075A (zh) * | 2021-01-06 | 2022-07-08 | 成都极米科技股份有限公司 | 投影控制方法和装置、投影设备及存储介质 |
CN114727075B (zh) * | 2021-01-06 | 2023-09-08 | 成都极米科技股份有限公司 | 投影控制方法和装置、投影设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104796649B (zh) | 2017-12-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104796649A (zh) | 一种三维投影的方法及装置 | |
CN107274338B (zh) | 用于深度图的低等待时间变形的系统、方法和装置 | |
US6744442B1 (en) | Texture mapping system used for creating three-dimensional urban models | |
US7324706B2 (en) | System and method for representing a general two dimensional spatial transformation | |
US20170124761A1 (en) | Compression of a three-dimensional modeled object | |
US9501811B2 (en) | Resizing an image | |
US20080129734A1 (en) | Apparatus and method of ray-triangle collision detection for ray-tracing | |
EP1800245B1 (en) | System and method for representing a general two dimensional spatial transformation | |
JP5443482B2 (ja) | グラフィクス描画装置、グラフィクス描画方法、グラフィクス描画プログラム、グラフィクス描画プログラムを記録した記録媒体、グラフィクス描画用集積回路 | |
TWI249144B (en) | Single level MIP filtering algorithm for anisotropic texturing | |
CN111630560B (zh) | 用于校正失真输入图像的方法和系统 | |
CN109584366B (zh) | 一种地形渲染方法、装置、设备及可读存储介质 | |
JP5893445B2 (ja) | 画像処理装置、および画像処理装置の動作方法 | |
CN110428504B (zh) | 文本图像合成方法、装置、计算机设备和存储介质 | |
CN106355545B (zh) | 一种数字图像几何变换的处理方法及装置 | |
CN102063496A (zh) | 空间数据化简方法及装置 | |
JP2882465B2 (ja) | 画像生成方法およびその装置 | |
JP2005301758A (ja) | 画像生成装置および画像生成方法 | |
CN108986212B (zh) | 一种基于裂缝消除的三维虚拟地形lod模型的生成方法 | |
US6577776B1 (en) | Transforming video images | |
CN105205862B (zh) | 一种图像三维重建方法及系统 | |
CN101739696B (zh) | 用于对凸多边形进行栅格化的系统及方法 | |
CN105741335A (zh) | 一种基于分块组织的多层次兵棋地图快速绘制方法 | |
CN108629734B (zh) | 图像几何变换方法、装置及终端 | |
CN111260780A (zh) | 基于高度图高程的实时地形修改方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address |
Address after: No.701, 7th floor, No.10, Huayuan East Road, Haidian District, Beijing Patentee after: Beijing Juli North Microelectronics Co.,Ltd. Address before: Room 1601, No.27 Zhichun Road, Haidian District, Beijing Patentee before: BEIJING ACTIONS MICROELECTRONICS Co.,Ltd. |
|
CP03 | Change of name, title or address |