前言
本文将基于osgPotree实现都柏林地区大规模点云渲染,包含DublinCity数据集介绍与点云下载与基于osgPotree的点云展示两个部分,其中osgPotree的点云展示包含颜色、高程、高程均匀着色三种渲染模式。osgPotree参照osgPotree:基于OSG的插件,支持Potree点云读取-CSDN博客。 开源地址:osgPotree: 针对Potree 2.0转换的结果,在osg中直接显示,通过插件osgPotree实现。
目录
- 1 DublinCity数据集介绍与点云下载
- 2 基于osgPotree的点云展示
1 DublinCity数据集介绍与点云下载
DublinCity数据集于2019年发布(论文arxiv.org/pdf/1909.03613),其包含LiDAR点云、正射影像、倾斜影像、人工标注数据四种类型数据,可用于三维点云对象分类、基于图像的三维重建等任务。点云总点数超过15亿点,点云密度达250到348点/平米,其中大约2.6亿点云已分类标注。正射影像如下所示:
|----------------------------------------------------------------------------|
|
|
| 点云概览图(其中红框范围为已分类标注点云区域)[1] |
完整数据集获取可访问DublinCity -- V-SENSE,原始点云数据可访问2015 Aerial Laser and Photogrammetry Survey of Dublin City Collection Record - NYU Spatial Data Repository
数据集批量下载可访问JSON。本文根据JSON提供的点云下载地址,采用编写python脚本的形式进行批量下载,脚本如下:
python
import os
import requests
from concurrent.futures import ThreadPoolExecutor
from tqdm import tqdm
# 下载地址列表
urls = [
"https://archive.nyu.edu/retrieve/79789/nyu_2451_38587_pc_T_314000_233500.zip",
"https://archive.nyu.edu/retrieve/79793/nyu_2451_38588_pc_T_314000_234000.zip",
"https://archive.nyu.edu/retrieve/79797/nyu_2451_38589_pc_T_314500_233000.zip",
"https://archive.nyu.edu/retrieve/79801/nyu_2451_38590_pc_T_314500_233500.zip",
"https://archive.nyu.edu/retrieve/79805/nyu_2451_38591_pc_T_314500_234000.zip",
"https://archive.nyu.edu/retrieve/79962/nyu_2451_38592_pc_T_314500_234500.zip",
"https://archive.nyu.edu/retrieve/79813/nyu_2451_38593_pc_T_315000_233000.zip",
"https://archive.nyu.edu/retrieve/79817/nyu_2451_38594_pc_T_315000_233500.zip",
"https://archive.nyu.edu/retrieve/79822/nyu_2451_38595_pc_T_315000_234000.zip",
"https://archive.nyu.edu/retrieve/79827/nyu_2451_38596_pc_T_315000_234500.zip",
"https://archive.nyu.edu/retrieve/79831/nyu_2451_38597_pc_T_315000_235000.zip",
"https://archive.nyu.edu/retrieve/79835/nyu_2451_38598_pc_T_315500_232500.zip",
"https://archive.nyu.edu/retrieve/79839/nyu_2451_38599_pc_T_315500_233000.zip",
"https://archive.nyu.edu/retrieve/79843/nyu_2451_38600_pc_T_315500_233500.zip",
"https://archive.nyu.edu/retrieve/79848/nyu_2451_38601_pc_T_315500_234000.zip",
"https://archive.nyu.edu/retrieve/79771/nyu_2451_38586_pc_T_315500-234500.zip",
"https://archive.nyu.edu/retrieve/79853/nyu_2451_38602_pc_T_315500_235000.zip",
"https://archive.nyu.edu/retrieve/79858/nyu_2451_38603_pc_T_316000_232500.zip",
"https://archive.nyu.edu/retrieve/79862/nyu_2451_38604_pc_T_316000_233000.zip",
"https://archive.nyu.edu/retrieve/79887/nyu_2451_38605_pc_T_316000_233500.zip",
"https://archive.nyu.edu/retrieve/79891/nyu_2451_38606_pc_T_316000_234000.zip",
"https://archive.nyu.edu/retrieve/79895/nyu_2451_38607_pc_T_316000_234500.zip",
"https://archive.nyu.edu/retrieve/79899/nyu_2451_38608_pc_T_316000_235000.zip",
"https://archive.nyu.edu/retrieve/79902/nyu_2451_38609_pc_T_316000_235500.zip",
"https://archive.nyu.edu/retrieve/79905/nyu_2451_38610_pc_T_316500_232500.zip",
"https://archive.nyu.edu/retrieve/79908/nyu_2451_38611_pc_T_316500_233000.zip",
"https://archive.nyu.edu/retrieve/79911/nyu_2451_38612_pc_T_316500_233500.zip",
"https://archive.nyu.edu/retrieve/79915/nyu_2451_38613_pc_T_316500_234000.zip",
"https://archive.nyu.edu/retrieve/79919/nyu_2451_38614_pc_T_316500_234500.zip",
"https://archive.nyu.edu/retrieve/79923/nyu_2451_38615_pc_T_316500_235000.zip",
"https://archive.nyu.edu/retrieve/79927/nyu_2451_38617_pc_T_317000_232500.zip",
"https://archive.nyu.edu/retrieve/79929/nyu_2451_38618_pc_T_317000_233000.zip",
"https://archive.nyu.edu/retrieve/79932/nyu_2451_38619_pc_T_317000_233500.zip",
"https://archive.nyu.edu/retrieve/79935/nyu_2451_38620_pc_T_317000_234000.zip",
"https://archive.nyu.edu/retrieve/79938/nyu_2451_38621_pc_T_317000_234500.zip",
"https://archive.nyu.edu/retrieve/79993/nyu_2451_38625_pc_F_150326_115601.zip",
"https://archive.nyu.edu/retrieve/79998/nyu_2451_38644_pc_F_150326_120025.zip",
"https://archive.nyu.edu/retrieve/80003/nyu_2451_38645_pc_F_150326_120403.zip",
"https://archive.nyu.edu/retrieve/80008/nyu_2451_38646_pc_F_150326_120854.zip",
"https://archive.nyu.edu/retrieve/80013/nyu_2451_38647_pc_F_150326_121253.zip",
"https://archive.nyu.edu/retrieve/80018/nyu_2451_38648_pc_F_150326_121724.zip",
"https://archive.nyu.edu/retrieve/80023/nyu_2451_38649_pc_F_150326_122222.zip",
"https://archive.nyu.edu/retrieve/80028/nyu_2451_38650_pc_F_150326_122941.zip",
"https://archive.nyu.edu/retrieve/80033/nyu_2451_38651_pc_F_150326_123430.zip",
"https://archive.nyu.edu/retrieve/80038/nyu_2451_38652_pc_F_150326_123922.zip",
"https://archive.nyu.edu/retrieve/80043/nyu_2451_38653_pc_F_150326_124415.zip",
"https://archive.nyu.edu/retrieve/80048/nyu_2451_38654_pc_F_150326_124922.zip",
"https://archive.nyu.edu/retrieve/80053/nyu_2451_38655_pc_F_150326_125429.zip",
"https://archive.nyu.edu/retrieve/80058/nyu_2451_38656_pc_F_150326_125917.zip",
"https://archive.nyu.edu/retrieve/80063/nyu_2451_38657_pc_F_150326_130401.zip",
"https://archive.nyu.edu/retrieve/80068/nyu_2451_38658_pc_F_150326_130840.zip",
"https://archive.nyu.edu/retrieve/80073/nyu_2451_38659_pc_F_150326_131220.zip",
"https://archive.nyu.edu/retrieve/80078/nyu_2451_38660_pc_F_150326_131440.zip",
"https://archive.nyu.edu/retrieve/80083/nyu_2451_38661_pc_F_150326_131905.zip",
"https://archive.nyu.edu/retrieve/80088/nyu_2451_38662_pc_F_150326_132400.zip",
"https://archive.nyu.edu/retrieve/80093/nyu_2451_38663_pc_F_150326_132905.zip",
"https://archive.nyu.edu/retrieve/80098/nyu_2451_38664_pc_F_150326_133445.zip",
"https://archive.nyu.edu/retrieve/80103/nyu_2451_38665_pc_F_150326_133955.zip",
"https://archive.nyu.edu/retrieve/80108/nyu_2451_38666_pc_F_150326_134430.zip",
"https://archive.nyu.edu/retrieve/80113/nyu_2451_38667_pc_F_150326_145143.zip",
"https://archive.nyu.edu/retrieve/80118/nyu_2451_38668_pc_F_150326_145523.zip",
"https://archive.nyu.edu/retrieve/80123/nyu_2451_38669_pc_F_150326_145809.zip",
"https://archive.nyu.edu/retrieve/80128/nyu_2451_38670_pc_F_150326_150215.zip",
"https://archive.nyu.edu/retrieve/80133/nyu_2451_38671_pc_F_150326_150519.zip",
"https://archive.nyu.edu/retrieve/80138/nyu_2451_38672_pc_F_150326_150906.zip",
"https://archive.nyu.edu/retrieve/80143/nyu_2451_38673_pc_F_150326_151147.zip",
"https://archive.nyu.edu/retrieve/80190/nyu_2451_38674_pc_F_150326_151542.zip",
"https://archive.nyu.edu/retrieve/80195/nyu_2451_38675_pc_F_150326_154909.zip",
"https://archive.nyu.edu/retrieve/80200/nyu_2451_38676_pc_F_150326_155238.zip",
"https://archive.nyu.edu/retrieve/80205/nyu_2451_38677_pc_F_150326_155529.zip",
"https://archive.nyu.edu/retrieve/80210/nyu_2451_38678_pc_F_150326_155833.zip",
"https://archive.nyu.edu/retrieve/80215/nyu_2451_38679_pc_F_150326_160149.zip",
"https://archive.nyu.edu/retrieve/80220/nyu_2451_38680_pc_F_150326_160443.zip",
"https://archive.nyu.edu/retrieve/80225/nyu_2451_38681_pc_F_150326_160709.zip",
"https://archive.nyu.edu/retrieve/80230/nyu_2451_38682_pc_F_150326_161001.zip",
"https://archive.nyu.edu/retrieve/80235/nyu_2451_38683_pc_F_150326_161223.zip"
]
# 保存目录
SAVE_DIR = "dublin_pc_data"
def download_file(url):
"""单文件下载函数"""
try:
# 从URL中提取文件名
file_name = url.split('/')[-1]
file_path = os.path.join(SAVE_DIR, file_name)
# 检查文件是否已存在(断点续传简单版:跳过已下载文件)
if os.path.exists(file_path):
return f"Skipped: {file_name}"
# 发起流式请求
response = requests.get(url, stream=True, timeout=30)
response.raise_for_status() # 检查请求是否成功
# 写入文件
with open(file_path, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
if chunk:
f.write(chunk)
return f"Success: {file_name}"
except Exception as e:
return f"Error downloading {url}: {str(e)}"
def main():
# 创建保存目录
if not os.path.exists(SAVE_DIR):
os.makedirs(SAVE_DIR)
print(f"创建目录: {SAVE_DIR}")
print(f"准备开始下载 {len(urls)} 个文件...")
for i, url in enumerate(urls):
print(f"\n正在处理第 {i+1}/{len(urls)} 个文件:")
download_file(url)
print("\n所有任务已完成。")
if __name__ == "__main__":
main()
下载好的点云文件共13.38GB,可从如下网盘地址中获取:++++DublinCity_laz_免费高速下载|百度网盘-分享无限制++++。
2 基于osgPotree的点云展示
2.1 格式转换
参照之前博客中详述的步骤,将下载的 LAZ 数据转换为 Potree 点云格式(osgPotree:基于OSG的插件,支持Potree点云读取-CSDN博客,),具体执行命令如下。转换后的点云数据总体积为76.8GB。Potree 点云可通过以下百度网盘链接获取:DublinCity_potree_免费高速下载|百度网盘-分享无限制。
bash
PotreeConverter.exe -i pointcloud.las -o D:\out
2.2 结果展示
接着用osgPotree中的可视化工具osgPotreeViewer展示转换后的potree点云,结果如下:
|----------------------------------------------------------------------------|
|
|
| 普通显示(osgPotreeViewer DublinCity.potree) |
|
|
| 高程着色(osgPotreeViewer DublinCity.potree -h) |
|
|
| 高程均匀着色(osgPotreeViewer DublinCity.potree -he) |
详细代码参见osgPotreeViewer的实现。
引用:
1\] Zolanvari S M I , Ruano S , Rana A ,et al.DublinCity: Annotated LiDAR Point Cloud and its Applications\[J\]. 2019.DOI:10.48550/arXiv.1909.03613.