一种将照片批量融合到三维场景中的方法
技术领域
本发明涉及地图信息处理技术领域,特别涉及一种将照片批量融合到三维场景中的方法。
背景技术
照片把三维的事物以二维的方式记录了下来。一直以来,在三维场景中,照片通常以独立的平面展示,脱离场景、缺少与场景的呼应。使三维系统中二维与三维有着很明显的分割线。不能较好的融合。而把照片做成三维模型,又费时费力。也加大了储存空间的负担。
如中国发明专利CN201710497027.X公开了一种三维模型与照片融合方法。首先拍摄建筑环境,并记录照片相机参数;然后制作建筑工程三维模型,并加载到三维场景中;接着设置三维场景中的虚拟相机参数,输出三维模型图像;最后混合三维模型图像与照片,得到混合图像。
如中国发明专利CN201810834331.3公开了一种电子地图点位聚合方法及装置。该方法包括:建立包括N个图层的地图显示模型;设定各图层的聚合半径,且第1图层至第N图层的聚合半径逐层递减;从第M图层中选择一未标记点位作为聚合点位,同时基于第M图层对应的聚合半径确定聚合区域,M的初始值为1;将第M+1图层至第N图层定义为同步聚合图层,并基于聚合点位及各同步聚合图层对应的聚合半径,确定各同步聚合图层的聚合区域;将各图层中聚合区域内的所有未标记点位标记;判断第M图层中是否存在未标记的点位,若存在,则返回步骤S3,若不存在,则令M=M+1,返回步骤S3,直至各图层中的点位全部被标记。
现有技术中照片与三维场景的融合限制较多,步骤繁琐,效率低下,另外照片在平台或者系统中通常以poi点展示,而大量的poi点不仅在渲染方面给浏览器很大内存压力,重叠的poi图标也使用户的体验大打折扣。通常的poi点聚合可以解决图标重合的问题,但是聚合的方式太过单一,只使用屏幕像素点距离或者poi点之间的距离进行聚合在展示方面没有太好的效果。
发明内容
针对现有技术中照片与三维场景的融合效率低下,且最终显示方式单一的问题,本发明提供了一种将照片批量融合到三维场景中的方法,通过对照片参数的批量处理,提高了照片与三维场景的融合效率,另外通过视角高度分层,优化信息的显示,减少读取时的计算压力。
以下是本发明的技术方案。
一种将照片批量融合到三维场景中的方法,包括以下步骤:S01:获取所需的照片参数;S02:计算照片在三维场景中的高度和宽度;S03:在三维场景中设置立体矩形并将照片融合;S04:以视角高度为依据将三维场景分层,每一层显示特定信息。本发明通过获取照片参数并计算的形式,实现照片与三维场景的批量融合,同时根据视角高度进行分层,优化了显示方式,减少显示时的运算压力,提高整体的流畅性。
作为优选,步骤S01执行之前,需要预先采集所需范围内的倾斜摄影数据,并建立三维场景。例如可以通过自动化建模软件基于采集的倾斜摄影数据生成真实影像纹理的三维倾斜摄影模型。该步骤确定了三维坐标系,生成了照片融合必要的三维场景。另外步骤S01主要涉及到照片的分辨率、经纬度、高度、方向角、焦距等数据。
作为优选,步骤S02的过程包括:计算高度:H=hD/f,其中h为cmos传感器的宽度,D为拍摄地到所摄主体的距离,f为焦距;计算宽度:W=HA/B,其中A为照片横向分辨率,B为照片纵向分辨率,H为照片高度。这里的高度和宽度指的是照片在三维场景对应的高度和宽度,这些参数在后续的融合过程中需要用到。
作为优选,步骤S03的过程包括:A01:根据照片拍摄点的经纬度p(x,y)、与主体的距离d、照片的宽度W以及照片的方位角θ数据,计算得到三维场景中加载照片需要的两个坐标点;A02:在三维场景中添加立体矩形:矩形的左下顶点和右下顶点分别对应两个坐标点,立体矩形的高度为步骤S02中的高度,倾斜角度为照片的方向角;A03:给立体矩形添加照片纹理,完成图片与三维场景融合。根据照片拍摄点的经纬度、照片的宽度、照片的方位角数据,利用勾股定理可以算出三维场景中加载照片需要的两个坐标点。
作为优选,步骤A01的计算过程包括:
纬度:φ2=asin(sinφ1*cosδ+cosφ1*sinδ*cosθ);
经度:λ2=λ1+atan2(sinθ*sinδ*cosφ1,cosδ-sinφ1*sinφ2);
其中:λ2结果经度,弧度制;λ1起始经度,弧度制;φ2结果纬度,弧度制;φ1起始纬度,弧度制;θ方位角,从北方顺时针方向;R地球半径;δ表示角距离,即d/R;d距离;将转为弧度制的经纬度代入公式可求得照片中心点经纬度p2(x2,y2);根据p2(x2,y2)、照片的宽度的一半W/2和θ-90°,可以得到照片的一个端点经纬度p3(x3,y3);根据p2(x2,y2)、照片的宽度的一半W/2和θ+90°,可以得到照片的另一个端点经纬度p4(x4,y4);其中p3和p4就是三维场景中加载照片需要的两个坐标点。通过上述计算,可以将照片准确融合到三维场景中,不需要进行人工调整。
作为优选,步骤S04的过程包括:将视角高度从低到高分为三个层级;
当视角高度位于第1层级:获取当前视野范围内三维场景中各poi点的分类标签,把预设的聚合范围内标签相同或近似的poi点集合为若干个统一的聚合点;
当视角高度位于第2层级:获取当前视野中心点,记为点P,以点P为第一个聚合点中心,根据预设的聚合范围将视野范围内各个poi点聚合为若干聚合点;
当视角高度位于第3层级:隐藏poi点。除了以地理范围为准进行聚合外,在第一层级还以类型为准进行聚合,可以进一步减少加载和显示的计算量。
作为优选,判断视野范围的过程包括:获取当前三维场景矩形视角的4个坐标点,及4个坐标点中经纬度的最大及最小值,即当前视野范围为lon:[lonMin,lonMax],lat:[latMin,latMax];
判断三维场景中各个poi点是否在视野范围内,若poi点的经纬度在lon和lat两个集合内,则代表poi点在视野范围内,反之则不在视野范围内。
作为优选,步骤S04还包括三维场景中照片的优先显示方式:记录照片的上传时间与当前时间的差值T以及质量指数Q,通过计算K=-aT+Q,结果越大的排序越靠前,其中系数a为指定的大于0的实数,质量指数Q包括下载量及点赞量。由于同一场景可能涉及到多张照片,因此显示的顺序也会影响还原程度,而照片除了本身内容上的属性外,还有时间属性,当时间差越大,则照片与真实场景出现变化的几率越大,因此需要统筹照片的时间和质量进行排序,而系数a可以提供一定的自由度,因为自然环境随时间的变化程度远大于建筑物,因此对于不同的场景可以使用不同的系数。
作为优选,所述聚合范围为六边形。聚合的过程中,如果仅使用圆或者方形为准,则会出现缝隙较大或重叠的问题,而六边形由于其形状的特殊性,排布过程中不存在缝隙,且覆盖效果较好。
本发明的实质性效果包括:通过获取并计算照片的特定参数,并在三维场景中搭建对应的框架实现照片与场景的融合,融合效率高,同时通过视角的分层,在不同层次中针对性地显示信息,简化加载项目,提高运行速度。
具体实施方式
下面将结合实施例,对本申请的技术方案进行描述。另外,为了更好的说明本发明,在下文中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本发明同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未做详细描述,以便于凸显本发明的主旨。在本实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
实施例:
一种将照片批量融合到三维场景中的方法,包括以下步骤:
S01:获取所需的照片参数。
主要涉及到照片的分辨率、经纬度、高度、方向角、焦距等数据。
其中步骤S01执行之前,需要预先采集所需范围内的倾斜摄影数据,并建立三维场景。本实施例通过自动化建模软件基于采集的倾斜摄影数据生成真实影像纹理的三维倾斜摄影模型,确定三维坐标系,通过地图引擎加载倾斜摄影三维模型。
S02:计算照片在三维场景中的高度和宽度。
过程包括:计算高度:H=hD/f,其中h为cmos传感器的宽度,D为拍摄地到所摄主体的距离,f为焦距;计算宽度:W=HA/B,其中A为照片横向分辨率,B为照片纵向分辨率。这里的高度和宽度指的是照片在三维场景对应的高度和宽度,这些参数在后续的融合过程中需要用到。
S03:在三维场景中设置立体矩形并将照片融合。
步骤S03的过程包括:A01:根据照片拍摄点的经纬度p(x,y)、与主体的距离d、照片的宽度W以及照片的方位角θ数据,计算得到三维场景中加载照片需要的两个坐标点;A02:在三维场景中添加立体矩形:矩形的左下顶点和右下顶点分别对应两个坐标点,立体矩形的高度为步骤S02中的高度,倾斜角度为照片的方向角;A03:给立体矩形添加照片纹理,完成图片与三维场景融合。根据照片拍摄点的经纬度、照片的宽度、照片的方位角数据,利用勾股定理可以算出三维场景中加载照片需要的两个坐标点。
其中步骤A01的计算过程包括:
纬度:φ2=asin(sinφ1*cosδ+cosφ1*sinδ*cosθ);
经度:λ2=λ1+atan2(sinθ*sinδ*cosφ1,cosδ-sinφ1*sinφ2);
其中:λ2结果经度,弧度制;λ1起始经度,弧度制;φ2结果纬度,弧度制;φ1起始纬度,弧度制;θ方位角,从北方顺时针方向;R地球半径;δ表示角距离,即d/R;d距离;将转为弧度制的经纬度代入公式可求得照片中心点经纬度p2(x2,y2);根据p2(x2,y2)、照片的宽度的一半W/2和θ-90°,可以得到照片的一个端点经纬度p3(x3,y3);根据p2(x2,y2)、照片的宽度的一半W/2和θ+90°,可以得到照片的另一个端点经纬度p4(x4,y4);其中p3和p4就是三维场景中加载照片需要的两个坐标点。通过上述计算,可以将照片准确融合到三维场景中,不需要进行人工调整。
S04:以视角高度为依据将三维场景分层,每一层显示特定信息。
步骤S04的过程包括:将视角高度从低到高分为三个层级;其中第一层级的视角高度为0-1km,第二层级的视角高度为1km-2km,第三层级的视角高度为大于2km。
当视角高度位于第1层级:获取当前视野范围内三维场景中各poi点的分类标签,把预设的聚合范围内标签相同或近似的poi点集合为若干个统一的聚合点;
当视角高度位于第2层级:获取当前视野中心点,记为点P,以点P为第一个聚合点中心,根据预设的聚合范围将视野范围内各个poi点聚合为若干聚合点;
当视角高度位于第3层级:隐藏poi点。除了以地理范围为准进行聚合外,在第一层级还以类型为准进行聚合,可以进一步减少加载和显示的计算量。
其中本实施例的聚合范围为六边形。聚合的过程中,如果仅使用圆或者方形为准,则会出现缝隙较大或重叠的问题,而六边形由于其形状的特殊性,排布过程中不存在缝隙,且覆盖效果较好。
本实施例判断上述视野范围的过程包括:获取当前三维场景矩形视角的4个坐标点,及4个坐标点中经纬度的最大及最小值,即当前视野范围为lon:[lonMin,lonMax],lat:[latMin,latMax];
判断三维场景中各个poi点是否在视野范围内,若poi点的经纬度在lon和lat两个集合内,则代表poi点在视野范围内,反之则不在视野范围内。
另外步骤S04还包括三维场景中照片的优先显示方式:记录照片的上传时间与当前时间的差值T以及质量指数Q,通过计算K=-aT+Q,结果越大的排序越靠前,其中系数a为指定的大于0的实数,质量指数Q包括下载量及点赞量。由于同一场景可能涉及到多张照片,因此显示的顺序也会影响还原程度,而照片除了本身内容上的属性外,还有时间属性,当时间差越大,则照片与真实场景出现变化的几率越大,因此需要统筹照片的时间和质量进行排序,而系数a可以提供一定的自由度,因为自然环境随时间的变化程度远大于建筑物,因此对于不同的场景可以使用不同的系数。
本实施例通过获取照片参数并计算的形式,实现照片与三维场景的批量融合,同时根据视角高度进行分层,优化了显示方式,减少显示时的运算压力,提高整体的流畅性。
通过以上实施方式的描述,所属领域的技术人员可以了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中可以根据需要而将上述功能分配由不同的功能模块完成,即将具体装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的实施例中,应该理解到,所揭露的结构和方法,可以通过其它的方式实现。本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备或处理器(processor)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(readonlymemory,ROM)、随机存取存储器(randomaccessmemory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上内容,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。