Open3d学习计划—高级篇 8(网格变形)
Open3D是一个开源库,支持快速开发和处理3D数据。Open3D在c++和Python中公开了一组精心选择的数据结构和算法。后端是高度优化的,并且是为并行化而设置的。
本系列学习计划有Blue同学作为发起人,主要以Open3D官方网站的教程为主进行翻译与实践的学习计划。点云PCL公众号作为免费的3D视觉,点云交流社区,期待有使用Open3D或者感兴趣的小伙伴能够加入我们的翻译计划,贡献免费交流社区,为使用Open3D提供中文的使用教程。
网格变形
如果我们想使用少量的约束使得三角网格变形,得使用相应的网格变形算法。Open3d实现了[SorkineAndAlexa2007] 中的尽可能严格的算法,以优化下面的能量函数:
这里的Ri表示 我们要优化的旋转矩阵,pi和pj分别表示优化前后的顶点位置。N(i)表示顶点i的邻域集合。权重wij表示余切权重(cot weights)。
Open3d实现的算法的接口是deform_as_rigid_as_possible。这个算法的第一个参数是一组constraint_ids,他是引用的三角网格的顶点。第二个参数constrint_pos定义了这些顶点优化后的位置。因为这个优化过程是一个迭代的过程,所以我们也能通过max_iter定义迭代次数。
mesh = o3dtut.get_armadillo_mesh()vertices = np.asarray(mesh.vertices)
static_ids = [idx for idx in np.where(vertices[:, 1] < -30)[0]]
static_pos = []
for id in static_ids:static_pos.append(vertices[id])
handle_ids = [2490]
handle_pos = [vertices[2490] + np.array((-40, -40, -40))]
constraint_ids = o3d.utility.IntVector(static_ids + handle_ids)
constraint_pos = o3d.utility.Vector3dVector(static_pos + handle_pos)with o3d.utility.VerbosityContextManager(o3d.utility.VerbosityLevel.Debug) as cm:mesh_prime = mesh.deform_as_rigid_as_possible(constraint_ids, constraint_pos, max_iter=50)
print('Original Mesh')
R = mesh.get_rotation_matrix_from_xyz((0,np.pi,0))
o3d.visualization.draw_geometries([mesh.rotate(R, center=mesh.get_center())])
print('Deformed Mesh')
mesh_prime.compute_vertex_normals()
o3d.visualization.draw_geometries([mesh_prime.rotate(R, center=mesh_prime.get_center())])
Original Mesh
Deformed Mesh
Smoothed ARAP
Open3d实现了ARAP目标的平滑版本,定义为:
这惩罚相邻旋转矩阵的偏差,α 是正则项的权衡参数,A是表面积。
通过将参数energy和Smoothed一起使用,可以在deform_as_rigid_as_possible中使用这个平滑目标。
资源
三维点云论文及相关应用分享
【点云论文速读】基于激光雷达的里程计及3D点云地图中的定位方法
3D目标检测:MV3D-Net
三维点云分割综述(上)
3D-MiniNet: 从点云中学习2D表示以实现快速有效的3D LIDAR语义分割(2020)
win下使用QT添加VTK插件实现点云可视化GUI
JSNet:3D点云的联合实例和语义分割
大场景三维点云的语义分割综述
PCL中outofcore模块---基于核外八叉树的大规模点云的显示
基于局部凹凸性进行目标分割
基于三维卷积神经网络的点云标记
点云的超体素(SuperVoxel)
基于超点图的大规模点云分割
更多文章可查看:点云学习历史文章大汇总
SLAM及AR相关分享
【开源方案共享】ORB-SLAM3开源啦!
【论文速读】AVP-SLAM:自动泊车系统中的语义SLAM
【点云论文速读】StructSLAM:结构化线特征SLAM
SLAM和AR综述
常用的3D深度相机
AR设备单目视觉惯导SLAM算法综述与评价
SLAM综述(4)激光与视觉融合SLAM
Kimera实时重建的语义SLAM系统
SLAM综述(3)-视觉与惯导,视觉与深度学习SLAM
易扩展的SLAM框架-OpenVSLAM
高翔:非结构化道路激光SLAM中的挑战
SLAM综述之Lidar SLAM
基于鱼眼相机的SLAM方法介绍
往期线上分享录播汇总
第一期B站录播之三维模型检索技术
第二期B站录播之深度学习在3D场景中的应用
第三期B站录播之CMake进阶学习
第四期B站录播之点云物体及六自由度姿态估计
第五期B站录播之点云深度学习语义分割拓展
第六期B站录播之Pointnetlk解读
[线上分享录播]点云配准概述及其在激光SLAM中的应用
[线上分享录播]cloudcompare插件开发
[线上分享录播]基于点云数据的 Mesh重建与处理
[线上分享录播]机器人力反馈遥操作技术及机器人视觉分享
[线上分享录播]地面点云配准与机载点云航带平差
点云PCL更多活动请查看:点云PCL活动之应届生校招群
扫描下方微信视频号二维码可查看最新研究成果及相关开源方案的演示:
如果你对Open3D感兴趣,或者正在使用该开源方案,就请加入我们,一起翻译,一起学习,贡献自己的力量,目前阶段主要以微信群为主,有意者发送“Open3D学习计划”到公众号后台,和更多热爱分享的小伙伴一起交流吧!如果翻译的有什么问题或者您有更好的意见,请评论交流!!!!
以上内容如有错误请留言评论,欢迎指正交流。如有侵权,请联系删除
扫描二维码
关注我们
让我们一起分享一起学习吧!期待有想法,乐于分享的小伙伴加入免费星球注入爱分享的新鲜活力。分享的主题包含但不限于三维视觉,点云,高精地图,自动驾驶,以及机器人等相关的领域。
分享及合作:微信“920177957”(需要按要求备注) 联系邮箱:dianyunpcl@163.com,欢迎企业来联系公众号展开合作。
点一下“在看”你会更好看耶
Open3d学习计划—高级篇 8(网格变形)相关推荐
- Open3d学习计划——高级篇 6(体素化)
Open3d学习计划--高级篇 6(体素化) 点云和三角网格是一种十分灵活的,但是不规则的几何类型.体素网格是通过规则的3D网格来表示的另一种3D几何类型,并且它可以看作是2D像素在3D上的对照物.O ...
- Open3d学习计划——高级篇 9(表面重建)
Open3d学习计划--高级篇 9(表面重建) 在许多场景下我们希望生成密集的3D几何形状,比如三角网格.然而从多视图立体算法和深度传感器中我们只能够获得非结构化的点云数据.我们需要使用表面重建算法来 ...
- Open3d学习计划—高级篇 7(颜色映射)
Open3D是一个开源库,支持快速开发和处理3D数据.Open3D在c++和Python中公开了一组精心选择的数据结构和算法.后端是高度优化的,并且是为并行化而设置的. 本系列学习计划有Blue同学作 ...
- Open3d学习计划—高级篇 6(体素化)
Open3D是一个开源库,支持快速开发和处理3D数据.Open3D在c++和Python中公开了一组精心选择的数据结构和算法.后端是高度优化的,并且是为并行化而设置的. 本系列学习计划有Blue同学作 ...
- Open3d学习计划—高级篇 5(RGBD融合)
Open3D是一个开源库,支持快速开发和处理3D数据.Open3D在c++和Python中公开了一组精心选择的数据结构和算法.后端是高度优化的,并且是为并行化而设置的. 本系列学习计划有Blue同学作 ...
- Open3d学习计划—高级篇 3(点云全局配准)
Open3D是一个开源库,支持快速开发和处理3D数据.Open3D在c++和Python中公开了一组精心选择的数据结构和算法.后端是高度优化的,并且是为并行化而设置的. 本系列学习计划有Blue同学作 ...
- Open3d学习计划—高级篇 2(彩色点云配准)
Open3D是一个开源库,支持快速开发和处理3D数据.Open3D在c++和Python中公开了一组精心选择的数据结构和算法.后端是高度优化的,并且是为并行化而设置的. 本系列学习计划有Blue同学作 ...
- Open3d学习计划—高级篇 4(多视角点云配准)
本文为转载文章,原创作者为blue同学,可关注他的博客:https://blog.csdn.net/io569417668 Open3D是一个开源库,支持快速开发和处理3D数据.Open3D在c++和 ...
- Open3d学习计划——4(网格)
Open3d学习计划--4(网格) 欢迎大家关注"点云PCL"公众号,进入群聊一起学习. open3d有一种被称为TriangleMesh的3d三角网格的数据结构.下面的代码展示了 ...
最新文章
- 工具安装===Sublime Text-安装
- pandas将表中的字符串转成数值型
- SQL进阶提升(疑惑篇order by)-学习sql server2005 step by step(十一)
- 给大家一个网站程序,fastmai网站源码
- Windows下搭建IOS开发环境(一)
- java 取对象的类_Java中通过Class类获取Class对象的方法详解
- 正在导出系统过程对象和操作 卡住_开会时CPU 飙升100%同事们都手忙脚乱记一次应急处理过程
- GetConsoleTitle 函数--获取控制台窗口标题
- Kafka从上手到实践-Kafka集群:重要配置和性能探讨 | 凌云时刻
- game-of-life-master jenkins部署
- Flink1.14.4 与 Flinkcdc 2.2.1 遇keng
- [运维|系统] 在飞腾FT2000上安装CentOS7
- 什么是网关,及其作用 (转载)
- Flutter Container 组件
- JAVA学习路01——使用JAVA将“.txt”文件拆分、合并
- 金半接触-肖特基接触(Schottky contact)-欧姆接触(Ohmic contact)
- Revit开发 - 创建梁(Beam)
- 中山大学路由器如何通过h3c认证上网(极路由设置方法)
- vivo计算机背景,怎么修改VIVO手机浏览器中的主题与背景颜色
- 2017年安徽计算机比赛,2017年“凌翔杯”安徽省机器人大赛圆满落幕
热门文章
- private关键字和构造方法
- luogu P1549 棋盘问题(2) 题解
- 洛谷P1550 [USACO08OCT]打井Watering Hole
- lambda表达式树
- 2022-2028年中国团购行业投资分析及前景预测报告
- PyTorch 笔记(06)— Tensor 索引操作(index_select、masked_select、non_zero、gather)
- Go 学习笔记(19)— 函数(05)[如何触发 panic、触发 panic 延迟执行、panic 和 recover 的关系]
- 02---控制移动底座1
- 在撤销“本地修改”之后再恢复
- 数据结构编程实战汇总