Open3d之颜色映射优化

将颜色映射到从深度相机重建的几何形状。由于颜色和深度帧没有完全对齐,使用彩色图像进行纹理映射会导致颜色映射模糊。Open3D提供了基于[Zhou2014]中的颜色映射优化算法。下面的教程将会提供彩色映射优化算法的示例。

输入

下面的代码读取彩色和深度图像对,并且生成 rgbd_image。注意convert_rgb_to_intensity标志位设置为 False。这是为了保留8位彩色通道,而不是使用单通道浮点型图像。
在应用颜色映射优化之前,最好先对RGBD图像进行可视化。debug_mode选择是否可视化RGBD图像。

# -*- coding:utf-8 -*-import reimport osimport open3d as o3dimport Open3D.examples.python.open3d_tutorial as o3dtutdef sorted_alphanum(file_list_ordered):    """排序"""    convert = lambda text: int(text) if text.isdigit() else text    alphanum_key = lambda key: [convert(c) for c in re.split('([0-9] )', key)]    return sorted(file_list_ordered, key=alphanum_key)def get_file_list(path, extension=None):    """获取文件列表"""    if extension is None:        file_list = [            path   f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))        ]    else:        file_list = [            path   f            for f in os.listdir(path)            if os.path.isfile(os.path.join(path, f)) and            os.path.splitext(f)[1] == extension        ]    file_list = sorted_alphanum(file_list)    return file_list# 加载数据path = o3dtut.download_fountain_dataset()debug_mode = False# 生成rgbd图像rgbd_images = []depth_image_path = get_file_list(os.path.join(path, "depth/"), extension=".png")color_image_path = get_file_list(os.path.join(path, "image/"), extension=".jpg")assert (len(depth_image_path) == len(color_image_path))for i in range(len(depth_image_path)):    depth = o3d.io.read_image(os.path.join(depth_image_path[i]))    color = o3d.io.read_image(os.path.join(color_image_path[i]))    rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth(        color, depth, convert_rgb_to_intensity=False)    if debug_mode:        pcd = o3d.geometry.PointCloud.create_from_rgbd_image(            rgbd_image,            o3d.camera.PinholeCameraIntrinsic(                o3d.camera.PinholeCameraIntrinsicParameters.PrimeSenseDefault))        o3d.visualization.draw_geometries([pcd])    rgbd_images.append(rgbd_image)

下面的代码读取相机轨迹和网格数据

camera = o3d.io.read_pinhole_camera_trajectory(    os.path.join(path, "scene/key.log"))mesh = o3d.io.read_triangle_mesh(os.path.join(path, "scene", "integrated.ply"))

为了可视化出相机的姿态不适合颜色映射,下面的代码故意设置迭代次数为0,也就是不对其映射做优化。color_map_optimization使用对应的相机姿态和RGBD图像来绘制网格。如果没有优化的话,可以看到纹理很模糊。

# 在完全优化之前,让我们先用给定的几何体、RGBD图像和相机姿势来可视化纹理贴图。option = o3d.pipelines.color_map.ColorMapOptimizationOption()option.maximum_iteration = 0with o3d.utility.VerbosityContextManager(        o3d.utility.VerbosityLevel.Debug) as cm:    o3d.pipelines.color_map.color_map_optimization(mesh, rgbd_images, camera,                                                   option)# 可视化o3d.visualization.draw_geometries([mesh],                                  zoom=0.5399,                                  front=[0.0665, -0.1107, -0.9916],                                  lookat=[0.7353, 0.6537, 1.0521],                                  up=[0.0136, -0.9936, 0.1118])

刚性优化

下一步优化相机参数来获得清晰的彩色图像。
下面的代码设置最大迭代次数为300

# 优化纹理并保存网格为texture_mapped.ply# 实现的论文为:# Q.-Y. Zhou and V. Koltun,# Color Map Optimization for 3D Reconstruction with Consumer Depth Cameras,# SIGGRAPH 2014option.maximum_iteration = 300option.non_rigid_camera_coordinate = Falsewith o3d.utility.VerbosityContextManager(        o3d.utility.VerbosityLevel.Debug) as cm:    o3d.pipelines.color_map.color_map_optimization(mesh, rgbd_images, camera,                                                   option)o3d.visualization.draw_geometries([mesh],                                  zoom=0.5399,                                  front=[0.0665, -0.1107, -0.9916],                                  lookat=[0.7353, 0.6537, 1.0521],                                  up=[0.0136, -0.9936, 0.1118])

残差表示图像强度不一致,残差越低表示颜色映射质量越好。ColorMapOptimizationOption默认使用刚性优化,去优化相机的六维姿态。

非刚性优化

为了有一个更好的映射质量,需要使用非刚性优化。要启用非刚性优化只需要在调用color_map_optimization前将option.non_rigid_camera_coordinate设置为True。除了六维相机姿态以外,非刚性优化甚至考虑了由锚点表示的局部图像变形。这种方式更加灵活并且会有着更高的彩色映射质量。残差也会小于刚性优化的情况。

option.maximum_iteration = 300option.non_rigid_camera_coordinate = Truewith o3d.utility.VerbosityContextManager(        o3d.utility.VerbosityLevel.Debug) as cm:    o3d.pipelines.color_map.color_map_optimization(mesh, rgbd_images, camera,                                                   option)o3d.visualization.draw_geometries([mesh],                                  zoom=0.5399,                                  front=[0.0665, -0.1107, -0.9916],                                  lookat=[0.7353, 0.6537, 1.0521],                                  up=[0.0136, -0.9936, 0.1118])

来源:https://www.icode9.com/content-4-852001.html

(0)

相关推荐

  • CV之FE:基于TF进行FE——去除异常(被损坏)图像 和单通道图像

    CV之FE:基于TF进行FE--去除异常(被损坏)图像 和单通道图像 输出结果 去除了异常(被损坏)图像 .单通道图像 设计思路 1. 部分代码实现 import tensorflow as tf f ...

  • 老板让很快处理数百图片,我该辞职吗

    来源:Python 技术「ID: pythonall」 工作种常常会遇到一些棘手的问题,干好了名利双收,干不好就可能失去工作机会,特别是在疫情严重的现在,裁员压力很大:( 从天而降 小派同学,刚进公司 ...

  • Open3d学习计划—6(RGBD图像)

    Open3D是一个开源库,支持快速开发和处理3D数据.Open3D在c++和Python中公开了一组精心选择的数据结构和算法.后端是高度优化的,并且是为并行化而设置的. 本系列学习计划有Blue同学作 ...

  • Open3d学习计划—7(RGBD测程法)

    Open3D是一个开源库,支持快速开发和处理3D数据.Open3D在c++和Python中公开了一组精心选择的数据结构和算法.后端是高度优化的,并且是为并行化而设置的. 本系列学习计划有Blue同学作 ...

  • 【目标检测】制作YOLO开源项目常用的数据集

    【目标检测】制作YOLO开源项目常用的数据集

  • Open3d学习计划—高级篇 7(颜色映射)

    Open3D是一个开源库,支持快速开发和处理3D数据.Open3D在c++和Python中公开了一组精心选择的数据结构和算法.后端是高度优化的,并且是为并行化而设置的. 本系列学习计划有Blue同学作 ...

  • 香港云服务器影响国内网站优化吗?

    香港云服务器影响国内网站优化吗?香港云服务器一直以来都以免备案.省时省力.开通即用等优势被大众喜爱,大多数企业或者个人使用香港云服务器都是为了优化,以在互联网上接单为主,但近年由于国内政策让很多优化人 ...

  • 绩效优化--员工绩效调整建议

    某企业以前没有员工绩效管理体系,因为经济效益不好全员实行绩效管理,实施一段时间后,发现员工个体层面的绩效管理效率并不高,业务部门和HR部门花费了大量的时间和精力在员工个人的绩效计划及评估上,但结果并不 ...

  • 职位薪酬优化项目记实

    公司是主要从事电力设施.电力元器件.家用电工的研产销一体企业,是国内覆盖电工产品全领域的大型公司.近年来,围绕"以跨越式发展推动公司的转型升级,实现二次发展"的目标,对公司人力资源 ...

  • 招聘分析:优化招聘的3个层次

    招聘分析,也称为招聘分析,对招聘人员和招聘经理起着越来越重要的作用.招聘分析可以在采购,选择和雇用方面帮助做出更好的,数据驱动的选择.我们将分三步介绍什么是招聘分析,以及如何实现增值分析. 1.什么是 ...

  • HR优化绩效管理的10个步骤?

    我们都认为,绩效管理的当前状态不再适用于当今的现代组织,所以公司急切地寻求下一个伟大的解决方案,它将有助于推动组织在数字世界中保持竞争力.随着我们向数字化员工队伍过渡,集成的绩效管理解决方案将成为优化 ...

  • 职能部门绩效考核优化方案

    职能部门绩效考核一直是企业绩效考核的难点,主要场景如下:1.职能部门绩效指标不好量化,主观评价比较多:2.业务线绩效得分一般都比较低,非业务线(职能部门)的绩效得分都很高:3.业务线(职能部门)的绩效 ...

  • 如何基于价值链设计和优化组织架构

    Part1 背景 由于顾客需求的变化和增加.互联网的冲击以及企业之间的高度竞争,企业要想在竞争中处于不败之地,就需要制定明确的企业战略,并通过组织结构的设计和调整优化实现目标战略.到目前为止,大多还是 ...

  • 10个CSS简写/优化技巧整理

    CSS简写就是指将多行的CSS属性简写成一行,又称为CSS代码优化或CSS缩写.CSS 简写的最大好处就是能够显著减少CSS文件的大小,优化网站整体性能,更加容易阅读. 下面介绍常见的CSS简写规则: ...

  • 小米手机运动内存不够怎么办,教你几个优化方法,轻松告别卡顿

    小米手机运动内存不够怎么办,教你几个优化方法,轻松告别卡顿