CN109388455B - 一种基于Opengl es支持多平台的鱼眼图像展开监控方法 - Google Patents
一种基于Opengl es支持多平台的鱼眼图像展开监控方法 Download PDFInfo
- Publication number
- CN109388455B CN109388455B CN201811075950.5A CN201811075950A CN109388455B CN 109388455 B CN109388455 B CN 109388455B CN 201811075950 A CN201811075950 A CN 201811075950A CN 109388455 B CN109388455 B CN 109388455B
- Authority
- CN
- China
- Prior art keywords
- unfolding
- image
- radius
- longitude
- model
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/04—Texture mapping
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- General Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明公开一种基于Opengl es支持多平台的鱼眼图像展开监控方法,所述方法包括:步骤A,初始化展开参数以及opengl ES的相关参数,并设置好显示的窗口尺寸;步骤B,根据立体几何关系,建立数学模型,计算原始图像与纹理坐标间的映射关系;步骤C,显示图像,该部分主要涉及图像数据的加载和纹理贴图。
Description
技术领域
本发明涉及立体几何技术,opengl ES技术,尤其涉及一种基于Opengl es支持多平台的鱼眼图像展开监控方法。
背景技术
随着摄像机和镜头的成本越来越低,人们对大范围视角的图像信息要求越来越高,全景技术在全球范围内发展为一种视觉新技术,360度全景全面展示了360度球型范围内的环视景象,它带给人们全新的体验和交互。基于多摄像机的全景系统,需要进行图像预处理与拼接等,由于摄像头个数太多,既增加成本,也增加了系统的复杂性,而基于鱼眼镜头的全景视觉系统,只需一个镜头就拥有360度全景视图,取代多台普通相机,做到无缝监控。
由于鱼眼镜头的超广视角,其镜头的焦距极短,因此畸变很严重,而这种畸变不符合人眼的观察,因此对畸变的校正显得非常重要。通过将鱼眼图像进行展开的方法对图像进行校正是一个不错的方法。由于全景技术几乎能一次性展现周围相机周围图像信息,图像视野更加宽阔,同时随着技术发展,其硬件成本也更低,而且可结合各种全景投影模型,方便图像的浏览和交互,因此有必要设计一套高效的全景展开算法。
发明内容
本发明针对现有技术中存在的问题,提供一种基于Opengl es支持多平台的鱼眼图像展开监控方法,所述方法包括:
步骤A,初始化展开参数以及opengl ES的相关参数,并设置好显示的窗口尺寸;
步骤B,根据立体几何关系,建立数学模型,计算原始图像与纹理坐标间的映射关系;
步骤C,显示图像,该部分主要涉及图像数据的加载和纹理贴图。
进一步地,所述步骤C具体包括:
步骤C1,创建opengl es着色器对象和程序对象;
步骤C2,创建并绑定纹理;
步骤C3,创建VBO(顶点缓冲区对象),用于存储顶点坐标,纹理坐标;
步骤C4,加载数据,所述数据包括顶点数据和纹理数据;
步骤C5,计算变换矩阵;
步骤C6,将矩阵和数据传到shader里,使用opengl es渲染,并显示。
进一步地,所述计算变换矩阵步骤包括视图变换,模型变换,投影变换,视口变换,其中视图变换相当于确定相机的位置,模型变换相当于确定物体的位置,投影变换相当于选择相机镜头,调整放大的参数,视口变换相当于确定照片的大小。
进一步地,所述步骤B中建立数学模型可以根据不同的展开模式建立数学模型,所述展开模式包括原始模型展开、半球模型展开、360度展开、圆柱形展开、以及经纬度展开,以及原始模型动画过渡到半球模型展开和圆柱模型动画过渡到360度全景展开。
进一步地,所述原始模型展开方式的展开方法为:绕圆的一周为360度,展开半径为R,将360度分为(nw-1)等分,步长记为stepA,半径分为(nh-1)等分,步长记为stepR然后计算图像顶点坐标,并求出此顶点对应的纹理坐标,alpha为此时角度,r为此时的半径,半径值每增加一次,就重新计算0到360度的坐标值,依次循环。
进一步地,所述360度展开模型的展开算法为:将半球面的点通过经纬度映射到一个长方形平面上,半球面的经度映射为长方形的横轴,经度范围为[0,2π],半球面的维度映射为长方形的纵轴,纬度范围为由于鱼眼图像越接近圆心部分,360展开后拉伸变形十分严重,因此360度展开可忽略圆心周围部分的展开,假设鱼眼图像的半径为R,则忽略部分记为ir=0.1*R。将360度经度角分为(nw-1)等分,步长记为stepA,将忽略ir后的鱼眼图像半径LR分为(nh-1)等分,其中,LR=R-ir,步长记为stepR然后计算图像顶点坐标。
进一步地,所述圆柱模型动画过渡到360度全景展开算法为:假设半球半径为r(r为固定值,100),则对应的圆弧长度为:l0=2π·r。假设圆柱形的半径呈指数级增加,此时圆柱形的半径为κ,则对应的圆弧长度为:l=2π·κ。则记小圆弧长对应大圆弧长比例为:圆柱形过渡到360经纬度展开动画过程顶点坐标计算切分方法与360经纬度展开切分方法一致。计算此时空间鱼眼坐标方法与圆柱形展开方法一致,假设此时空间坐标为(ρ,θ),经度角为α,此时半径为κ对应的经度角为α'=α*lc+π*(1-lc),将经度角范围转为[-π,π],即α′=α′-π。
进一步地,所述步骤B中数学模型为单位球面的投影模型,鱼眼相机按照选定的投影函数来设计。
进一步地,所述投影函数包括等距投影、正交投影、体视投影以及等立体角投影。
与现有技术相比,本发明提供的基于Opengl es支持多平台的鱼眼图像展开监控方法,通过建立数学模型,计算顶点坐标和纹理坐标,通过利用Opengl es的跨平台特性,在GPU端实现图像的渲染显示,并提供多种展开模式以及交互体验,方法可靠,并且展开效率高效,能支持移动端的实时高清视频图像渲染工作,并且监控模式多样化,用户交互体验佳。
附图说明
图1为本发明的基于Opengl es支持多平台的鱼眼图像展开监控方法的流程图;
图2为本发明的等距投影示意图;
图3为本发明的半球模型展开方式示意图;
图4为本发明的360度展开模型示意图;
图5为本发明的圆柱形展开方式示意图;
图6为本发明的经纬度展开方式示意图;
图7为利用本发明的原始模型与半球模型动画过渡展开方式示意图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
参考图1,本发明提供一种基于Opengl es支持多平台的鱼眼图像展开监控方法,所述方法包括:
步骤A,初始化展开参数以及opengl ES的相关参数,并设置好显示的窗口尺寸;
步骤B,根据立体几何关系,建立数学模型,计算原始图像与纹理坐标间的映射关系;
步骤C,显示图像,该部分主要涉及图像数据的加载和纹理贴图。
进一步地,所述步骤C具体包括:
步骤C1,创建opengl es着色器对象和程序对象;
步骤C2,创建并绑定纹理;
步骤C3,创建VBO(顶点缓冲区对象),用于存储顶点坐标,纹理坐标;
步骤C4,加载数据,所述数据包括顶点数据和纹理数据;
步骤C5,计算变换矩阵;
步骤C6,将矩阵和数据传到shader里,使用opengl es渲染,并显示。
进一步地,所述计算变换矩阵步骤包括视图变换,模型变换,投影变换,视口变换,其中视图变换相当于确定相机的位置,模型变换相当于确定物体的位置,投影变换相当于选择相机镜头,调整放大的参数,视口变换相当于确定照片的大小。
进一步地,所述步骤B中建立数学模型可以根据不同的展开模式建立数学模型,所述展开模式包括原始模型展开、半球模型展开、360度展开、圆柱形展开、以及经纬度展开,以及原始模型动画过渡到半球模型展开和圆柱模型动画过渡到360度全景展开。
进一步地,所述原始模型展开方式的展开方法为:绕圆的一周为360度,展开半径为R,将360度分为(nw-1)等分,步长记为stepA,半径分为(nh-1)等分,步长记为stepR然后计算图像顶点坐标,并求出此顶点对应的纹理坐标,alpha为此时角度,r为此时的半径,半径值每增加一次,就重新计算0到360度的坐标值,依次循环。
进一步地,所述360度展开模型的展开算法为:将半球面的点通过经纬度映射到一个长方形平面上,半球面的经度映射为长方形的横轴,经度范围为[0,2π],半球面的维度映射为长方形的纵轴,纬度范围为由于鱼眼图像越接近圆心部分,360度展开后拉伸变形十分严重,因此360度展开可忽略圆心周围部分的展开,假设鱼眼图像的半径为R,则忽略部分记为ir=0.1*R。将360度经度角分为(nw-1)等分,步长记为stepA,将忽略ir后的鱼眼图像半径LR分为(nh-1)等分,其中,LR=R-ir,步长记为stepR然后计算图像顶点坐标。
进一步地,所述圆柱模型动画过渡到360度全景展开算法为:假设半球半径为r(r为固定值,100),则对应的圆弧长度为:l0=2π·r。假设圆柱形的半径呈指数级增加,此时圆柱形的半径为κ,则对应的圆弧长度为:l=2π·κ。则记小圆弧长对应大圆弧长比例为:圆柱形过渡到360经纬度展开动画过程顶点坐标计算切分方法与360经纬度展开切分方法一致。计算此时空间鱼眼坐标方法与圆柱形展开方法一致,假设此时空间坐标为(ρ,θ),经度角为α,此时半径为κ对应的经度角为α'=α*lc+π*(1-lc),将经度角范围转为[-π,π],即α′=α′-π。
进一步地,所述步骤B中数学模型为单位球面的投影模型,鱼眼相机按照选定的投影函数来设计。
进一步地,所述投影函数包括等距投影、正交投影、体视投影以及等立体角投影。
下面结合实施例,对本发明进行详细说明。
1、初始化opengl es。Opengl ES是跨平台的处理图形显示软件,Opengl es需要本地视窗系统进行交互,这就需要一个中间控制层,最好与平台无关,因此EGL被独立设计出来,EGL是OpenGL ES(嵌入式)和底层Native平台视窗系统之间的接口。不同平台初始化EGL方法不一样,不同的系统,要实现自己的EGL。针对Android平台,使用GLSurfaceView类,它提供了Opengl ES的渲染环境和渲染线程,因此针对Android端初始化环境可简化为:创建GLSurfaceView实例,检查设备是否支持opengl es相应版本,并设置Opengl ES版本和设置Renderer以及创建Renderer渲染器,以后新的帧会在Renderer的执行onDrawFrame方法更新画面。针对IOS平台,首先创建一个相关的类继承于UIView,该类用于绘制Opengl ES资源,创建CAEAGLLayer层,创建EAGLcontext对象,指定Opengl es版本,创建颜色缓冲区以及帧缓冲区,并将颜色缓冲区绑定到帧缓冲区。针对Windows平台,则需要首先安装OPengl ES的模拟器,其初始化步骤为:获取显示设备句柄(EGLDisplays),初始化EGL,选择Config,即选择FrameBuffer的参数,之后构造Surface,即渲染的目的地,然后创建设备上下文(context),最后调用eglMakeCurrent函数将申请到的display,surface,context进行绑定,从而将context下的opengl指令将surface作为其渲染的最终目的地,而将display作为surface的前端显示。
2、根据立体几何关系,建立数学模型,计算原始图像与纹理坐标间的映射关系。鱼眼相机成像时遵循的模型可近似为单位球面的投影模型,鱼眼相机按照一定的投影函数来设计,常用的四种投影为:等距投影、正交投影、体视投影以及等立体角投影,其投影函数分别如下公式表示:
rd=fθ
rd=fsin(θ)
式中,rd表示鱼眼图像中的点到畸变中心的距离,f是鱼眼镜头焦距,θ为入射光线与相机光轴间的夹角。由于等距投影的视场角与其成像的高度成正比,方便信息的处理,符合当今信息化的需求,应该应用也最广泛,文中根据等距投影来建立数学模型,图2简单描述了等距投影如何将空间一点P,投影到图像平面上。
根据不同展开模式,建立不同的数学模型,分别计算原始图像坐标和目标坐标一一对应。本发明提供7种鱼眼展开算法,分别为原始模型展开、半球模型展开、360度展开、圆柱形展开、以及经纬度展开,以及原始模型动画过渡到半球模型展开和圆柱模型动画过渡到360度全景展开,同时提供了原始模型展开与半球模型展开联动算法。同时本发明的创新点是通过创建纹理矩阵使得计算原始图像坐标和目标坐标时不依赖图像本身的参数就能做到一一对应。这样就能接受不同的图像参数,而不需要重新计算图像坐标与目标坐标,大大提高了程序的执行效率。因此在计算坐标对应关系时,我们假定鱼眼图像固定半径为R=100。
原始模型展开方式,即对鱼眼图像有效区域的原图展示,展开方法为:绕圆的一周为360度,展开半径为R,将360度分为(nw-1)等分,步长记为stepA,半径分为(nh-1)等分,步长记为stepR然后计算图像顶点坐标,并求出此顶点对应的纹理坐标,alpha为此时角度,r为此时的半径,半径值每增加一次,就重新计算0到360度的坐标值,依次循环。就得到对应的原始模型顶点坐标及其纹理坐标,原始模型顶点坐标计算公式如下:
纹理坐标计算公式为:
上式中,x,y分别为此时的顶点坐标,R为假设的鱼眼图像半径。
半球模型展开方式,即将鱼眼图像展开成半球浏览模式。结合图3说明展开方法:图3中,Q点是P在xoy平面的投影,a是球面经度角,b是球面纬度角,在原图坐标中的O'P'对应半球坐标系中的弧长O1P,假设原图中鱼眼图像坐标为R,则在半球面坐标系中,球的半径为同原始模型展开方法划分等分值,并分别计算顶点坐标和纹理坐标。
球面顶点坐标公式为:
上式中,b的计算方法可由原图计算得到,假设此时原图像计算的半径为rp,则根据等距投影,得到rp映射到球面上对应弧度的角度如下公式:
则球面坐标b的角度为:
球面顶点坐标对应的纹理坐标,与原始模型展开纹理坐标一致。
由于鱼眼图像越接近圆心部分,360展开后拉伸变形十分严重,因此360度展开可忽略圆心周围部分的展开,假设鱼眼图像的半径为R,则忽略部分记为ir=0.1*R。与原始模型展开类似,将360度经度角分为(nw-1)等分,步长记为stepA,将忽略ir后的鱼眼图像半径LR分为(nh-1)等分,其中,LR=R-ir,步长记为stepR然后计算图像顶点坐标,360经纬度展开顶点坐标计算公式为:
其中alpha为经度值,_PI=π,H=(R-ir)/2,r为此时计算的迭代半径,r+=stepR,alpha+=stepA。
360度展开顶点坐标对应的纹理坐标,与原始模型展开纹理坐标一致。
圆柱形展开,其展开算法与360度展开一样,可以想象把360度展开卷起来,就变成了一个圆柱形,结合图5说明,与360度展开类似,由于圆心部分展开为圆柱形变形太严重,可忽略这部分半径的展开,假设忽略的半径同360度的相同,则忽略部分对应的角度记为itheta,则,圆柱形展开顶点坐标计算方法切分方法与360度展开切分方法一致,圆柱形顶点坐标计算方法如下:首先,根据图4的原始图像平面坐标计算出空间鱼眼坐标,公式如下:
此时对应的空间鱼眼坐标角度为:
经纬坐标计算公式为:
同样的,圆柱形顶点对应的纹理坐标与原始模型展开的纹理坐标一致。
经纬度展开,也就是将鱼眼图像通过经纬映射展开成目标平面横纵比例为1:1的平面,经纬度展开方式可分为横向经纬度展开与纵向经纬度展开,其中横向经纬度展开,垂直方向线会变直,适合横向监控,而纵向经纬度展开,水平方向线会变直,适合纵向监控。以横向经纬度展开为例,设计其展开算法如下:首先结合图6说明,将经纬度角和展开后的图像进行切分,纬度切分等分记为steplat=π/(nh-1),经度切分等分记为steplng=π/(nw-1),对目标平面进行切分,记横向切分为stepx=2*R/(nw-1),纵向切分记为stepy=2*R/(nh-1),依次遍历分别求顶点坐标和纹理坐标。假设此时遍历的索引记为(m,n),m取值为[0,nh-1],n取值为[0,nw-1],则顶点坐标计算公式为:
然后计算纹理坐标,首先,建立经纬度坐标系,如图6所示,假设球体的半径为1,p为球面上一点,q为p在坐标系xoz上的投影点,纬度角为op与y轴正方向的夹角,经度角为oq与x轴正方向的夹角,则p点球面坐标可表示为:
重新选择坐标系,将球面坐标转为极坐标,重取op与z轴的夹角为纬度角,重新计算新坐标系下的经纬度角,其公式为:
其中当y<0时,有α'=-α'。此时相对原图像的极坐标(ρ,a),有
纹理坐标计算公式为:
原始模型与半球模型动画过渡展开算法如下:结合图7说明,本方法通过球半径的变化而图像半径不变,使得图像由一个球形逐渐过渡成一个平面,半径每变化一次计算一次对应的顶点坐标。假设球的半径非常大,那么球面的xoy平面映射到xoz平面上就成了一条直线。球的半径衰减指数记为γ,假设某次球的半径为Rb,则计算此时的顶点坐标为:首先,计算有效弧在大圆中夹角θ,计算居中偏移量fz,fr,其中fz=Rb*cos(θ),fr=Rb*sin(θ)。然后将圆缩小一定的比例,使得图像的有效半径保持为该比例记为ratio,
对应的原始图像半径为R'=R*ratio,按原始模型展开的方法,将R'分为(nh-1)等分,将360度分为(nw-1)等分,依次遍历,计算出顶点坐标。假设此时遍历到的半径为r1,角度为a,则此时球面坐标对应的纬度角计算公式为:此时顶点坐标表示为:
此动画模型的纹理坐标与原始模型的纹理坐标一致。
圆柱形过渡到360经纬展开动画过程算法设计:与原始模式动画过渡到半球模式相似,通过计算n次不同半径顶点坐标达到逐渐动画过程。展开算法如下:假设半球半径为r(r为固定值,100),则对应的圆弧长度为:l0=2π·r。假设圆柱形的半径呈指数级增加,此时圆柱形的半径为κ,则对应的圆弧长度为:l=2π·κ。则记小圆弧长对应大圆弧长比例为:圆柱形过渡到360经纬度展开动画过程顶点坐标计算切分方法与360经纬度展开切分方法一致。计算此时空间鱼眼坐标方法与圆柱形展开方法一致,假设此时空间坐标为(ρ,θ),经度角为α,此时半径为κ对应的经度角为α'=α*lc+π*(1-lc),将经度角范围转为[-π,π],即α'=α'-π,纬度坐标与圆柱形展开模式的纬度坐标b计算方法相同。则此时对应的动画过渡模型顶点坐标为:
圆柱形展开过渡到360度展开动画过程的纹理坐标与原始模型的纹理坐标一致。
联动模式,即原始图像与半球展开模式间的画面联动,当点击半球画面时,此画面的可见区,与原始图像的画面某个区域对应,当旋转原始图像的某个区域画面时,半球画面可视区对应原始画面的此区域。实现方法如下:首先计算半球画面中的可见区域边界的所有投影,记投影点坐标为(xp,yp,zp),然后旋转视图,即将投影点旋转,建立数学模型,假设此时经纬角为(α,β),将投影点绕z轴旋转β角,再绕x轴旋转α角,旋转矩阵记为
将投影点乘以该矩阵得到新的坐标记为(x'p,y'p,z'p),计算旋转后的边界顶点坐标经纬坐标为:
将这些半球面的边界投影坐标映射到原始模型展开的坐标中,使得半球画面与原始模型画面区域一一对应,映射坐标具体方法如下:假设可视半球面区域边界某点经纬坐标(a,b),此时对应原始模型展开的坐标计算公式为:
3、显示图像,该部分主要涉及图像数据的加载和纹理贴图。其步骤主要是:(3.1)创建opengl es着色器对象和程序对象;(3.2)创建并绑定纹理;(3.3)创建VBO(顶点缓冲区对象),用于存储顶点坐标,纹理坐标等;(3.4)加载数据(顶点数据和纹理数据);(3.5)计算变换矩阵(视图变换,模型变换,投影变换,视口变换),其中视图变换相当于确定相机的放置位置,模型变换相当于确定物体的位置,投影变换则相当于选择相机镜头,调整放大的参数,视口变换相当于确定照片的大小;(3.6)将矩阵和数据传到shader里,使用opengl es渲染,并显示。对于移动视角,放大缩小图像的实现,通过用户的外部事件改变视图变换矩阵和投影变换矩阵来完成该操作。进一步地,可通过glViewport函数实现多分屏不同视角监控画面。在原始图像展开与半球模式展开的联动中,使用glBendFunc函数实现纹理混合功能,使得原始图像画面区域添加图层对应半球模式的可视区域,并提供该联动模式通过控制经纬度角来实现按照一定的速度移动到对应的区域功能。针对提供的展开模式通过控制经纬度角速度达到某个恒定值,从而改变匀速改变视角达到巡航画面功能。
更进一步地,在此巧妙地设计了纹理贴图矩阵M,,将此矩阵同样传进shader,并与纹理坐标作运算。其做法是:创建一张与原始图像大小一样的纹理图,使得我们在计算展开算法纹理坐标时,可以不依赖原始鱼眼图像本身的参数,并且创建的纹理图坐标转动时,贴图的画面也跟着转动,达到了动画的效果。具体方法如下:假设原始鱼眼图像的半径为Radius,圆心是(Cx,Cy),宽度为w,高度为h。首先创建一个单位圆,记为circle,假设纹理坐标此时旋转的角度为a,则以x轴为旋转轴,旋转矩阵表示为,
将circle放大Radius倍,其放大矩阵记为,
将M'与Mf相乘得到矩阵M”,最后通过缩放矩阵将纹理坐标范围限定在[0,1],缩放矩阵记为:
将Ms'与M”相乘,得到最终矩阵M。
得益于OPengl es的跨平台性,因此可以方便的共用C++大部分代码,Android端提供JNI对C/C++的调用,而ios端的objective-c++支持混编,而windows算法则直接可以编译C++代码,因此一份代码多平台使用,同时使用OPengl es在GPU里做图像处理工作,极大提高了图像的渲染能力,实现了高效的多平台鱼眼图像展开方法。
以上所述仅为本发明的较佳实施例,并不用于限制本发明,凡在本发明的精神和原则内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (4)
1.一种基于Opengl es支持多平台的鱼眼图像展开监控方法,其特征在于,所述方法包括:
步骤A,初始化展开参数以及opengl ES的相关参数,并设置好显示的窗口尺寸;
步骤B,根据立体几何关系,建立数学模型,计算原始图像与纹理坐标间的映射关系;
步骤C,显示图像,具体包括图像数据的加载和纹理贴图;
所述步骤B中建立数学模型可以根据不同的展开模式建立数学模型,所述展开模式包括原始模型展开、半球模型展开、360度展开、圆柱形展开、以及经纬度展开,以及原始模型动画过渡到半球模型展开和圆柱模型动画过渡到360度全景展开;
所述原始模型展开方式的展开方法为:绕圆的一周为360度,展开半径为R,将360度分为(nw-1)等分,步长记为stepA,半径分为(nh-1)等分,步长记为stepR然后计算图像顶点坐标,并求出此顶点对应的纹理坐标,alpha为此时角度,r为此时的半径,半径值每增加一次,就重新计算0到360度的坐标值,依次循环;
所述360度展开模型的展开算法为:将半球面的点通过经纬度映射到一个长方形平面上,半球面的经度映射为长方形的横轴,经度范围为[0,2π],半球面的维度映射为长方形的纵轴,纬度范围为由于鱼眼图像越接近圆心部分,360展开后拉伸变形十分严重,因此360度展开可忽略圆心周围部分的展开,假设鱼眼图像的半径为R,则忽略部分记为ir=0.1*R;将360度经度角分为(nw-1)等分,步长记为stepA,将忽略ir后的鱼眼图像半径LR分为(nh-1)等分,其中,LR=R-ir,步长记为stepR然后计算图像顶点坐标;
所述圆柱模型动画过渡到360度全景展开算法为:假设半球半径为r,r为固定值,则对应的圆弧长度为:l0=2π·r;假设圆柱形的半径呈指数级增加,此时圆柱形的半径为κ,则对应的圆弧长度为:l=2π·κ;则记小圆弧长对应大圆弧长比例为:圆柱形过渡到360经纬度展开动画过程顶点坐标计算切分方法与360经纬度展开切分方法一致;计算此时空间鱼眼坐标方法与圆柱形展开方法一致,假设此时空间坐标为(ρ,θ),经度角为α,此时半径为κ对应的经度角为α'=α*lc+π*(1-lc),将经度角范围转为[-π,π],即α'=α'-π;
所述步骤C具体包括:
步骤C1,创建opengl es着色器对象和程序对象;
步骤C2,创建并绑定纹理;
步骤C3,创建VBO(顶点缓冲区对象),用于存储顶点坐标,纹理坐标;
步骤C4,加载数据,所述数据包括顶点数据和纹理数据;
步骤C5,计算变换矩阵;
步骤C6,将矩阵和数据传到shader里,使用opengl es渲染,并显示。
2.根据权利要求1所述的基于Opengl es支持多平台的鱼眼图像展开监控方法,其特征在于,所述计算变换矩阵步骤包括视图变换,模型变换,投影变换,视口变换,其中视图变换相当于确定相机的位置,模型变换相当于确定物体的位置,投影变换相当于选择相机镜头,调整放大的参数,视口变换相当于确定照片的大小。
3.根据权利要求1所述的基于Opengl es支持多平台的鱼眼图像展开监控方法,其特征在于,所述步骤B中数学模型为单位球面的投影模型,鱼眼相机按照选定的投影函数来设计。
4.根据权利要求3所述的基于Opengl es支持多平台的鱼眼图像展开监控方法,其特征在于,所述投影函数包括等距投影、正交投影、体视投影以及等立体角投影。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811075950.5A CN109388455B (zh) | 2018-09-14 | 2018-09-14 | 一种基于Opengl es支持多平台的鱼眼图像展开监控方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811075950.5A CN109388455B (zh) | 2018-09-14 | 2018-09-14 | 一种基于Opengl es支持多平台的鱼眼图像展开监控方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109388455A CN109388455A (zh) | 2019-02-26 |
CN109388455B true CN109388455B (zh) | 2022-05-10 |
Family
ID=65418538
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811075950.5A Active CN109388455B (zh) | 2018-09-14 | 2018-09-14 | 一种基于Opengl es支持多平台的鱼眼图像展开监控方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109388455B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110399931B (zh) * | 2019-07-30 | 2021-07-06 | 燕山大学 | 一种鱼眼图像匹配方法及系统 |
CN111177431B (zh) * | 2019-12-18 | 2020-11-24 | 北京市水利规划设计研究院 | 基于MicroStation的数码照片管理方法、装置、处理器及储存介质 |
CN112308767B (zh) * | 2020-10-19 | 2023-11-24 | 武汉中科通达高新技术股份有限公司 | 一种数据展示方法、装置、存储介质以及电子设备 |
CN115272124A (zh) * | 2022-08-04 | 2022-11-01 | 北京斯年智驾科技有限公司 | 一种畸变图像校正方法、装置 |
CN116245748B (zh) * | 2022-12-23 | 2024-04-26 | 珠海视熙科技有限公司 | 环视镜头的畸变校正方法、装置、设备、系统及存储介质 |
CN117931120B (zh) * | 2024-03-22 | 2024-05-24 | 南京达道电子科技有限公司 | 一种基于gpu的摄像头图像视角调整方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6034691A (en) * | 1996-08-30 | 2000-03-07 | International Business Machines Corporation | Rendering method and apparatus |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101714213B1 (ko) * | 2015-09-09 | 2017-03-09 | 현대오트론 주식회사 | 렌즈 영상 왜곡 보정 장치 |
CN105957048A (zh) * | 2016-01-26 | 2016-09-21 | 优势拓展(北京)科技有限公司 | 鱼眼镜头拍摄图像的3d全景显示方法和系统 |
CN107527327B (zh) * | 2017-08-23 | 2018-05-15 | 珠海安联锐视科技股份有限公司 | 一种基于gpu的鱼眼校正方法 |
-
2018
- 2018-09-14 CN CN201811075950.5A patent/CN109388455B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6034691A (en) * | 1996-08-30 | 2000-03-07 | International Business Machines Corporation | Rendering method and apparatus |
Also Published As
Publication number | Publication date |
---|---|
CN109388455A (zh) | 2019-02-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109388455B (zh) | 一种基于Opengl es支持多平台的鱼眼图像展开监控方法 | |
CN104246795B (zh) | 用于超广角透镜图像的自适应透视修正的方法和系统 | |
US6320584B1 (en) | Method and apparatus for simulating movement in multidimensional space with polygonal projections from subhemispherical imagery | |
US7336299B2 (en) | Panoramic video system with real-time distortion-free imaging | |
EP3438919B1 (en) | Image displaying method and head-mounted display apparatus | |
KR20040050888A (ko) | 비평면 화상의 화상 처리 장치 및 화상 처리 방법, 기억매체 및 컴퓨터 프로그램 | |
US20040076340A1 (en) | Image processing apparatus and image processing method, storage medium and computer program | |
US20020041286A1 (en) | Method and apparatus for using a general three-dimensional (3D) graphics pipeline for cost effective digital image and video editing, transformation, and representation | |
WO2014043814A1 (en) | Methods and apparatus for displaying and manipulating a panoramic image by tiles | |
CN107563959A (zh) | 全景图生成方法及装置 | |
EP1008957A1 (en) | Image processing device and image processing method | |
CN106558017B (zh) | 球形显示图像处理方法及系统 | |
JP2002203254A (ja) | 曲面像変換方法及びこの曲面像変換方法を記録した記録媒体 | |
CN114549289A (zh) | 图像处理方法、装置、电子设备和计算机存储介质 | |
CN108765582B (zh) | 一种全景图片显示方法及设备 | |
JP2004152015A (ja) | 画像処理装置、画像処理プログラム、そのプログラムを記録する記録媒体、画像処理方法、シェーディング情報取得装置及びデータ構造 | |
CN111726594A (zh) | 一种高效优化渲染及与位姿反畸变融合的实现方法 | |
CN109461116B (zh) | 一种基于opengl的720全景展开监控方法 | |
CN106710000B (zh) | 一种基于离散全景图构建连续场景的图像投影方法 | |
CN113454980A (zh) | 全景拍摄方法、电子设备及存储介质 | |
JP2005115645A (ja) | シェーディング情報取得装置及び画像処理装置 | |
JP3387900B2 (ja) | 画像処理方法及び装置 | |
JP2002203237A (ja) | 曲面像変換方法及びこの曲面像変換方法を記録した記録媒体 | |
US11388336B2 (en) | Horizontal calibration method and system for panoramic image or video, and portable terminal | |
WO2019157923A1 (zh) | 一种环境贴图映射方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |