一种基于地基云图的三维云场景建模与可视化方法

文档序号:29633094发布日期:2022-04-13 16:28阅读:207来源:国知局
一种基于地基云图的三维云场景建模与可视化方法
238.),但遥感影像的时空分辨率较低,无法满足光伏发电应用场景中对云的准实时监测的实际需求。


技术实现要素:

5.为克服现有技术的不足,本发明旨在提出一种用于地基云图的基于gpu的三维云场景建模与可视化方法。对地基云图应用本发明方法,可以较准确的根据地基云图中的云状区域计算三维积云建模参数,结合地基云图成像的地理位置范围,在三维地理场景中实现快速的以体素为最小几何单元的三维积云建模,从而能够直观的研究云团对太阳辐射的影响。
6.本发明的技术方案包括以下过程,
7.首先,获取地基云图的拍摄时间,记为time;获取地基云图成像设备的地理位置,记为o;将地基云图校正为400
×
400像素的正方形图像;定义图像坐标系和云团坐标系;初始化顶点数组pointarray。
8.先基于cpu进行以下的云基高度和云团厚度的计算处理,
9.步骤a1,根据地基云图的拍摄时间time匹配相同时间点下的landsat8影像,根据landsat8影像的经纬度信息确定校正后的地基云图所覆盖的实际经纬度范围,该范围是以o为中心点的正方形区域,区域边界由最大经度maxlon,最小经度minlon,最大纬度maxlat,最小纬度minlat决定,进而建立图像坐标系;然后以(minlon,minlat)为原点建立云团坐标系,并建立图像坐标系下的像素坐标与地理坐标系下的经纬度坐标之间的函数关系。
10.步骤a2,使用图像检测处理opencv的自适应二值化方法从地基云图中分离云团和天空部分,提取云团部分。再使用图像检测处理opencv的轮廓检测算法,识别云团的外轮廓,根据外轮廓数量确定云团的数量,记为n;
11.步骤a3,对从地基云图中提取的n个云团,由cpu逐云团计算云基高度cbh和每个云像素代表的云团厚度信息t。
12.步骤a4,由cpu计算正方体体素的边长,记为l
voxel
。边长由地基云图在wgs84坐标下的区域边长和图像坐标系下的区域边长共同决定,
13.步骤a5,由cpu根据体素边长l
voxel
、云团厚度信息t、云基高度cbh计算每个体素中心点在云团坐标系下的空间位置,并存放在顶点数组pointarray中,完成后顶点数组pointarray传入gpu。
14.顶点数组pointarray从cpu传输到gpu中进行积云体素的绘制,gpu的绘制处理包括以下步骤,
15.步骤b1,使用opengl创建一个fbo和一个二维纹理densitytexture2d,二维纹理绑定到fbo上。将顶点数组传入gpu可编程渲染管线的顶点着色器中,通过矩阵转换从云团坐标系转换到标准纹理坐标系,纹理坐标系下的顶点数组记为npcpointarray;
16.步骤b2,将npcpointarray传入gpu的几何着色器中,在几何着色器中定义顶点索引数组,记为vindexarray;定义以体素中心点为原点的体素顶点数组,记为pointarray。采用顶点索引绘制的方法绘制正方体体素。
17.步骤b3,二维纹理densitytexture2d传入gpu的片段着色器中,计算云团坐标系下
每个顶点与云团中心点的距离,根据距离计算每个体素的密度值,将结果存储在densitytexture2d中。
18.步骤b4,在gpu的片段着色器中,根据密度值ρ设置每个体素颜色的透明度,透明度alpha=ρ,每个体素颜色color.rgba=(0.8,0.8,0.8,ρ),完成后从gpu中输出,实现基于体素的三维积云建模和可视化渲染。
19.而且,步骤a1中,对于图像坐标系和云团坐标系的定义如下:
20.图像坐标系为以地基云图的左上角为原点,水平向右为x轴正方向,垂直向下为y轴正方向的二维坐标系;图像范围由(0,0)、(0,v)、(u,v)、(u,0)确定,u、v分别为地基云图在x轴、y轴上的最大图像范围,本发明中u、v均为400像素。
21.云团坐标系定义为以(minx,miny)为原点,平行地面水平向右为x轴正方向,地面上垂直于x轴方向为y轴,垂直向上为z轴正方向的三维坐标系。这里的maxx、maxy分别为地基云图范围的最大经度maxlon、最大纬度maxlat通过坐标转换得到的wgs84世界坐标。
22.而且,步骤a1中,图像坐标系下的像素坐标与地理坐标系下的经纬度坐标之间的函数关系定义如下:
23.设地基云图中任意像素点(x,y)在地理坐标系下表示的经纬度位置为(lat,lon),
[0024][0025]
其中,maxlon,minlon,maxlat,minlat分别为地基云图区域范围的最大经度、最小经度、最大纬度、最小纬度。u、v分别为地基云图在图像坐标系下的最大长度、最大宽度,本发明里u、v均为400像素。
[0026]
而且,步骤a3中,云基高度cbh的计算方法如下:
[0027]

获取云团中心点在地基云图中的坐标,记为c(x,y);通过函数关系式将图像坐标转换为经纬度坐标,记为worldc(lat,lon);获取地基云图中心点的坐标,记为o

(x0,y0);通过函数关系式将图像坐标转换为经纬度坐标,记为worldo

(lat0,lon0)。根据haversine公式计算worldc和worldo’之间的距离,记为d0。
[0028]

根据公式计算该云团的方位角az:根据公式计算该云团的高度角alt:其中,d为地基云图中o

和c之间的距离。
[0029]

根据高度角alt和d0计算该云团的地基高度cbh:cbh=d0×
tan(alt)
[0030]
而且,步骤a3中,单个云团对象中每个像素点代表的厚度值计算方法如下:
[0031]

对图像中的云团构建包围盒,得到图像坐标系下的包围盒宽度,记为w,通过坐标转换转换为wgs84坐标系下的长度,记为w
world

[0032]

使用图像检测处理opencv的rgb图像转hsl图像的算法将rgb格式的地基云图转为hsl格式的图像,提取l通道的值,记为l。
[0033]

计算每个像素代表的云团厚度,云团厚度记为t,
[0034]
而且,步骤a5中,体素中心点在云团坐标系下的位置计算方法如下:
[0035]
读取当前云团对象的云像素值,设第i个像素的图像坐标为pi(ui,vi)i∈[1,m],m代表该云团的总像素数量。将pi从图像坐标转换到云团坐标系下,记为worldpi(xi,yi),根据该云团的云基高度cbh和体素边长l
voxel
,计算第i个像素所代表的实际体素个数numi和每个体素中心点在云团坐标系下的高程hk:
[0036][0037]hk
=cbh+k
×
l
voxel
(0≤k≤numi)
[0038]
地基云图中第i个像素所代表的第k个采样点在云团坐标系中的的坐标记为p
world
(xi,yi,hk)。
[0039]
而且,步骤b2中,顶点索引数组和顶点坐标的定义如下,
[0040]
顶点索引数组定义为vindexarray={0,1,2,3,2,3,4,5,4,5,6,7,6,0,4,2,1,7,3,5,0,6,1,7};以顶点数组pointarray中的坐标为中心的正方体体素共8个顶点坐标,本发明采用opengl的顶点索引绘制方法绘制体素,顶点数组定义为vec3array=(-l,l,-l,l,l,-l,-l,l,l,l,l,l,-l,-l,l,l,-l,l,-l,-l,-l,l,-l,-l)。其中
[0041]
而且,步骤b3中,体素密度值的计算和存储方法如下,
[0042]
在云团坐标系下,获取云团中心点的坐标,记为centerp(x
p
,y
p
,z
p
),逐体素获取体素中心点的坐标,计算该体素中心点到centerp的直线距离,记为d,根据距离d和云团的最大厚度w
world
计算该体素的云密度,记为ρ:然后,根据该体素中心的纹理坐标(u,v)对应的存储到二维纹理densitytexture2d的纹理空间中,记为(u,v,ρ)。
[0043]
本发明基于地基云图提取的云基高度和云团厚度为建模参数,以体素作为积云的最小几何单元,基于gpu实现了三维积云的快速建模和积云密度参数存储。该方法不仅有效的解决了由云团不规则复杂外形而造成的建模复杂、建模时间长的问题,实现了指定区域内三维云场景的准实时建模,而且在体素中存储了云的密度信息,为进一步研究云团对太阳辐射强度的削弱作用提供了模型基础。此外,基于gpu可视化三维积云模型,能够在三维地理场景中实现流畅的漫游等人机交互,从而满足构建稳定流畅的三维地理系统的需要。
附图说明
[0044]
图1为本发明实施例的图像坐标系示意图。
[0045]
图2为本发明实施例的云团坐标系示意图。
[0046]
图3为本发明实施例的体素坐标系示意图。
[0047]
图4为本发明实施例的流程图。
[0048]
图5为本发明实施例的可视化效果图。
具体实施方式
[0049]
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实时方式作进一步的详细描述。
[0050]
相关术语:
[0051]
gpu 图形处理器
[0052]
cpu 中央处理器
[0053]
opencv 开源的跨平台计算机视觉和机器学习软件库
[0054]
opengl 开放图形库,是行业领域中最为广泛接纳的2d/3d图形api
[0055]
wgs84 世界大地测量系统1984,是一种坐标系统
[0056]
fbo 帧缓冲区对象
[0057]
实施例采用本发明的方法,采用opengl和glsl着色语言,基于opencv和osgearth三维渲染引擎实现了基于地基云图的三维积云建模和基于三维地理场景的可视化。
[0058]
本发明实施例提供的一种基于地基云图的三维积云建模与可视化方法包括以下过程,
[0059]
首先,获取地基云图的拍摄时间,记为time;获取地基云图成像设备的地理位置,记为o;将地基云图校正为400
×
400像素的正方形图像;定义图像坐标系和云团坐标系;初始化顶点数组pointarray。
[0060]
设当前时刻为t,获取该时刻下的地基云图,根据地基云图的地基成像设备参数获得该设备的地理位置,记为o;由opencv的球面透视投影图像校正方法将地基云图校正为400
×
400像素的图像;定义图像坐标系和云团坐标系;初始化用于存储云团坐标系下的体素中心点的顶点数组pointarray。
[0061]
先基于cpu进行以下三维积云建模的云基高度和云团厚度参数的计算处理,
[0062]
步骤a1,根据地基云图的拍摄时间time匹配相同时间点下的landsat8影像,根据landsat8影像的经纬度信息确定校正后的地基云图所覆盖的实际经纬度范围,该范围是以o为中心点的正方形区域,区域边界由最大经度maxlon,最小经度minlon,最大纬度maxlat,最小纬度minlat决定;以(minlon,minlat)为原点建立云团坐标系,建立图像坐标系下的像素坐标与地理坐标系下的经纬度坐标之间的函数关系。
[0063]
步骤a2,从地基云图中分离云团和天空部分,提取云团部分,再使用轮廓检测算法识别云团的外轮廓,根据外轮廓数量确定云团的数量,记为n;
[0064]
步骤a3,对从地基云图中提取的n个云团,由cpu逐云团计算云基高度和每个云像素代表的云团厚度信息;
[0065]
步骤a4,计算正方体体素的边长,记为l
voxel
,边长由地基云图在wgs84坐标下的区域边长和图像坐标系下的区域边长共同决定;
[0066]
步骤a5,根据体素边长、云团厚度、云基高度计算每个体素中心点在云团坐标系下的空间位置,并存放在顶点数组pointarray中;
[0067]
然后将顶点数组pointarray从cpu传输到gpu中进行积云体素的绘制;
[0068]
步骤b1,创建一个帧缓冲区对象fbo和一个二维纹理densitytexture2d,二维纹理绑定到fbo上,将顶点数组pointarray传入gpu可编程渲染管线的顶点着色器中,通过矩阵转换从云团坐标系转换到标准纹理坐标系,纹理坐标系下的顶点数组记为npcpointarray;
[0069]
步骤b2,将npcpointarray传入gpu的几何着色器中,在几何着色器中定义顶点索引数组,记为vindexarray;定义以体素中心点为原点的体素顶点数组,记为pointarray。采用顶点索引绘制的方法绘制正方体体素;
[0070]
步骤b3,二维纹理densitytexture2d传入gpu的片段着色器中,计算云团坐标系下
每个顶点与云团中心点的距离,根据距离计算每个体素的密度值,将结果存储在densitytexture2d中;
[0071]
步骤b4,在gpu的片段着色器中,根据密度值ρ设置每个体素颜色的透明度,透明度alpha=ρ,每个体素颜色color.rgba=(0.8,0.8,0.8,ρ),完成后从gpu中输出,实现基于体素的三维积云建模和可视化渲染。
[0072]
具体实施时,可以采用计算机软件方式实现自动流程运行,提供以上一种基于地基云图的三维积云建模方法。
[0073]
为便于参考实施起见,提供实施例具体流程设计如下,参见图4:
[0074]
步骤1,设当前时刻为t,由opencv读取该时刻下的地基云图。根据地基云图的地基成像设备参数获得该设备的经纬度信息,记为o;由opencv的球面透视投影图像校正方法将地基云图校正为400
×
400像素的图像。初始化opengl绘制环境,定义图像坐标系和云团坐标系;初始化顶点数组pointarray。根据地基云图的拍摄时间time匹配相同时间点下的landsat8影像,根据landsat8影像的经纬度信息确定校正后的地基云图所覆盖的实际经纬度范围,定义云团坐标系和图像坐标系;
[0075]
初始化步骤可由cpu执行。
[0076]
本发明定义图像坐标系(如图1所示)和云团坐标系(如图2所示):
[0077]
图像坐标系为以地基云图的左上角为原点,水平向右为x轴正方向,垂直向下为y轴正方向的二维坐标系;
[0078]
云团坐标系定义为以(minx,miny)为原点,平行地面水平向右为x轴正方向,地面上垂直于x轴方向为y轴,垂直向上为z轴正方向的三维坐标系。这里的maxx、maxy分别为地基云图范围的最大经度maxlon、最大纬度maxlat通过坐标转换得到的wgs84世界坐标。
[0079]
实施例中,读取t时刻的地基云图,由opencv的球面透视投影图像方法校正地基云图。对校正后的图像构建图像坐标系,图像范围由(0,0)、(0,v)、(u,v)、(u,0)确定,u、v分别为地基云图在x轴、y轴上的最大图像范围,本实施例中u、v均为400像素。
[0080]
地基成像设备的位置为o(lon,lat),地基云图的实际范围是以o为中心点的正方形区域,区域边界由最大经度maxlon,最小经度minlon,最大纬度maxlat,最小纬度minlat决定;以(minlon,minlat)为原点建立云团坐标系,
[0081]
具体实施中,可以根据实际情况确定地基云图的位置信息。
[0082]
步骤2,基于t时刻下经过校正的地基云图计算每个云团的云基高度、云团厚度参数。
[0083]
本发明提出:
[0084]
首先建立图像坐标系下的像素坐标与地理坐标系下的经纬度坐标之间的函数关系,设地基云图中任意像素点(x,y)在地理坐标系下表示的经纬度位置为(lat,lon),
[0085][0086]
其中,maxlon,minlon,maxlat,minlat分别为地基云图区域范围的最大经度、最小经度、最大纬度、最小纬度。u、v分别为地基云图在图像坐标系下的最大长度、最大宽度,本
发明里u、v均为400像素。
[0087]
对于云基高度cbh,分别获取云团中心点和地基云图中心点在图像坐标系下的坐标,通过函数关系式分别转换为对应经纬度坐标,根据haversine公式计算两点之间的距离。再计算云团的方位角,进而计算云团的高度角,最终根据高度角和距离计算云团的地基高度。
[0088]
对于单个云团对象中每个像素点代表的云团厚度,首先对云团构建包围盒,得到图像坐标系下的包围盒宽度,记为w,通过坐标转换转换为wgs84坐标系下的长度,记为w
world
。进而使用图像检测处理opencv的rgb图像转hsl图像的算法将rgb格式的地基云图转为hsl格式的图像,提取l通道的值,记为l。计算每个像素代表的云团厚度,云团厚度记为t,
[0089]
实施例中具体实现如下:
[0090]

地基云图中心点的坐标,记为o

(x0,y0),通过函数关系式将图像坐标转换为经纬度坐标,记为worldo

(lat0,lon0)。基于地基云图提取所有积云区域,数量记为n;令i=0。
[0091]

第i个云团中心点在图像坐标系下的坐标为ci(xi,yi);通过坐标转换得到经纬度坐标worldci(lati,loni)。根据haversine公式计算worldci和worldo

之间的距离,记为di。根据公式计算该云团的方位角根据公式计算该云团的高度角其中di为o

和ci在云团坐标系下的距离。最后根据高度角alti和di计算该云团的地基高度cbhi=di×
tan(alti)。
[0092]

对第i个云团构建包围盒,令包围盒在图像坐标系的x轴上最大值为x
max
,在x轴上最小值为x
min
,计算包围盒宽度w=x
max-x
min
,通过坐标转换得到w在世界坐标系下的长度w
world
。由opencv的rgb图像转hsl图像的算法将rgb格式的地基云图转为hsl格式的图像,
[0093]

由opencv读取第i个云团的所有像素坐标和像素值,设在地基云图中第i个云团包含m个像素点,令j=1,当j≤m时,提取该像素在hsl格式图像的l通道的值,记为lj,根据计算该像素代表的云团厚度,记为tj。
[0094]

令j=j+1;若j≤m,重复

;若j》m,该云团的所有像素所代表的云团厚度值计算完毕。
[0095]

令i=i+1;若i≤n,重复
②‑⑤
;若i》n,n个云团的云基高度和云团厚度均计算完毕。
[0096]
具体实施时,可以根据实际情况确定云团的数量、云团高度和云团厚度信息。
[0097]
步骤3,由cpu计算正方体体素的边长,边长由地基云图在wgs84坐标下的区域边长和图像坐标系下的区域边长共同决定,记为l
voxel
:根据体素边长l
voxel
、云团厚度信息t、云基高度cbh计算每个体素中心点在云团坐标系下的坐标,将所有顶点坐标存入顶点数组中。
[0098]
本发明提出,体素中心点在云团坐标系下的位置计算方法如下:
[0099]
读取当前云团对象的云像素值,设第i个像素的图像坐标为pi(ui,vi)i∈[1,m],m代表该云团的总像素数量。将pi从图像坐标转换到云团坐标系下,记为worldpi(xi,yi),根
l,l,l,l,l,l,-l,-l,l,l,-l,l,-l,-l,-l,l,-l,-l)。其中
[0118]
实施例中具体实现如下:
[0119]

将顶点数组pointarray传入gpu的顶点着色器中,由opengl获取着色器内置的矩阵变量gl_modelviewprojectionmatrix,顶点数组乘以该矩阵转换到纹理坐标系下的标准纹理坐标阵列,记为gl_position。
[0120]

将gl_position传入gpu的几何着色器,定义顶点索引数组vindexarray={0,1,2,3,2,3,4,5,4,5,6,7,6,0,4,2,1,7,3,5,0,6,1,7};定义顶点数组vec3array=(-l,l,-l,l,l,-l,-l,l,l,l,l,l,-l,-l,l,l,-l,l,-l,-l,-l,l,-l,-l),其中计算gl_modelviewprojectionmatrix的逆矩阵,记为inversemat,gl_position乘以inversemat得到云团坐标系下的坐标,记为vec3array。根据顶点索引数组vindexarray依次索引顶点数组vec3array中的对应顶点,直到索引结束,完成体素绘制。
[0121]
具体实施时,可以根据实际情况绘制云的体素。
[0122]
步骤5,在片段着色器中计算每个体素的密度值,存储在二维纹理中。根据密度值设置体素颜色透明度。
[0123]
本发明提出,在gpu的片段着色器中,根据云团的纹理坐标阵列gl_position计算云团坐标系下的云团中心点的坐标,记为centerp(x
p
,y
p
,z
p
);再计算每个体素中心点在云团坐标系下的坐标到centerp的直线距离,记为d,根据距离d和云团的最大厚度w
world
计算该体素的云密度,记为ρ:然后,根据该体素中心的纹理坐标(u,v)对应的存储到二维纹理densitytexture2d中,记为(u,v,ρ)。根据ρ设置每个体素的颜色透明度,透明度alpha=ρ,每个体素颜色color.rgba=(0.8,0.8,0.8,ρ),完成后从gpu中输出,实现基于体素的三维积云建模和可视化渲染。
[0124]
实施例中具体实施如下:
[0125]
在gpu的片段着色器中,根据云团的纹理坐标阵列gl_position计算云团坐标系下的云团中心点的坐标,记为centerp(x
p
,y
p
,z
p
)。设体素个数为n,令i=1,
[0126]
第i个体素的中心点在云团坐标系下的坐标为pi(xi,yi,zi),根据两点间直线公式计算pi与centerp的直线距离di。再根据距离di和云团的最大厚度w
world
计算该体素的云密度ρi::根据该体素中心的纹理坐标(ui,vi),将云密度存储在二维纹理densitytexture2d的(ui,vi)处,值为ρi。根据ρi设置该体素纹理的颜色,color.rgb=(0.8,0.8,0.8,ρi)。
[0127]
令i=i+1;若i≤n,重复上述操作,若i》n,结束云密度和云的色彩计算。从gpu中输出,实现基于体素的三维云场景可视化。当可视化模拟结束时,释放fbo。在三维地理场景中的可视化效果如图5所示。
[0128]
通过以上具体实施可以看出,基于地基云图提取的云基高度和云团厚度为建模参数,以体素作为积云的最小几何单元,在gpu中实现了三维积云的快速建模和积云密度参数存储。实现了指定区域的准实时三维云场景建模,在三维场景漫游浏览中也表现出良好的系统流畅度。
[0129]
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1