Mesh deformation

如果我们想根据少量的约束来变形三角形网格,我们可以使用网格变形算法。Open3D通过[SorkineAndAlexa2007]实现了尽可能严格的方法,该方法优化了以下能量函数
∑i∑j∈N(i)wij∣∣(p′i−p′j)−Ri(pi−pj)∣∣2,∑_i∑_{j∈N(i)}w_{ij}||(p′_i−p′_j)−R_i(p_i−p_j)||^2, i∑​j∈N(i)∑​wij​∣∣(p′i​−p′j​)−Ri​(pi​−pj​)∣∣2,

RiR_iRi​是我们想要优化的旋转矩阵,pi,p′ip_i,p′_ipi​,p′i​分别是优化前后的顶点位置。 N(i)N(i)N(i)是顶点i的邻居的集合。权重wijw_ijwi​j是余切权重。

Open3D 在deform_as_rigid_as_possible中实现了此方法。此方法的第一个参数constraint_ids是一组引用三角形网格中的顶点的参数。第二个参数constrint_pos定义优化后这些顶点应位于哪个位置。优化过程是一个迭代方案。因此,我们还可以通过 max_iter定义迭代次数。

armadillo = o3d.data.ArmadilloMesh()
mesh = o3d.io.read_triangle_mesh(armadillo.path)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)

Smoothed ARAP 平滑的 ARAP

Open3D 还实现了 ARAP 目标的平滑版本,定义为

∑i∑j∈N(i)wij∣∣(p′i−p′j)−Ri(pi−pj)∣∣2+αA∣∣Ri−Rj∣∣2∑_i∑_{j∈N(i)}w_{ij}||(p′_i−p′_j)−R_i(p_i−p_j)||^2+αA||R_i−R_j||^2i∑​j∈N(i)∑​wij​∣∣(p′i​−p′j​)−Ri​(pi​−pj​)∣∣2+αA∣∣Ri​−Rj​∣∣2
,
这会惩罚相邻旋转矩阵的偏差。 α是正则化项的权衡参数,并且A是表面积。

平滑化的目标可以通过deform_as_rigid_as_possible将参数energy与参数Smoothed 一起使用。

https://zhuanlan.zhihu.com/p/25846219
https://zhuanlan.zhihu.com/p/25804146

Open3D Mesh deformation相关推荐

  1. Open3D Mesh 网格

    Mesh Open3D 有一个用于 3D 三角形网格的数据结构,称为TriangleMesh.下面的代码显示了如何从ply文件中读取三角形网格并打印其顶点和三角形. import open3d as ...

  2. CGAL 4.9 - Triangulated Surface Mesh Deformation

    Here, I would like to derive the formula (10) For triangle vjvivmv_jv_iv_m, we have the following th ...

  3. open3d剩余内容有关函数详情(笔记10)

    本次笔记包括网格变形(Mesh deformation).内在形状特征(Intrinsic shape signatures)ISS.光线投射(Ray Casting)和距离查询(Distance Q ...

  4. 三维点云:PCA(下)open3d

    三维点云之PCA应用下 在三维点云上的应用 主成分方向 降维 求解点云的法向量 拟合平面 AABB框 点云匹配 在三维点云上的应用 PCA 是有损的数据压缩方式,它常用于对高维数据进行降维,也就是把高 ...

  5. Open3d学习计划——4(网格)

    Open3d学习计划--4(网格) 欢迎大家关注"点云PCL"公众号,进入群聊一起学习. open3d有一种被称为TriangleMesh的3d三角网格的数据结构.下面的代码展示了 ...

  6. cfl3d linux 编译,CMake build system for cfl3d

    @@ -0,0 +1,379 @@ --- title: cfl3d+openmpi+gfortran编译和安装 --- #简介 cfl3d用intel的编译器和mpi会比较容易编译,不再详述.本文主 ...

  7. 17篇论文入选CVPR 2019,百度AI都在关注什么?(附论文地址)

    整理 | 阿司匹林 出品 | AI科技大本营(公众号id:rgznai100) 计算机视觉和模式识别大会CVPR 2019即将于6月在美国长滩召开,作为人工智能领域计算机视觉方向的重要学术会议,CVP ...

  8. 学术前沿 | 基于深度学习的视觉三维重建研究总结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 三维重建的意义 三维重建作为环境感知的关键技术之一,可用于自动驾驶 ...

  9. 计算机视觉方向简介 | 深度学习视觉三维重建

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|计算机视觉life 三维重建意义 三维重建作为环境感知的 ...

最新文章

  1. 首发 | 13篇京东CVPR 2019论文!你值得一读~ 技术头条
  2. 处理音频文件的python模块
  3. Java反射机制的基本概念与使用_Java进阶之reflection(反射机制)——反射概念与基础...
  4. 阿里可观测性数据引擎的技术实践
  5. ExtJs 入门 [窗体:Window组件]
  6. Maven常用的命令
  7. Java基础教程【第三章:Java运算符】
  8. H5页面快速搭建之高级字体应用实践
  9. 文件浏览器一定要有个向上级按钮
  10. 浅谈Netty相关概念
  11. 电子发票中数字签名的提取解析教程
  12. Linux内核编程《一》
  13. 25岁,上帝找你谈一次灵魂。——送给女孩,也送给男孩
  14. 传奇程序员云风:从创业到被招安,细数我这20年程序人生
  15. 空间两条直线段的最短距离及最近点计算
  16. android 判断 音乐是否播放,Android如何判断当前手机是否正在播放音乐并获取有关正在播放的音乐的信息...
  17. python 文件上传之---断点续传
  18. 快速有效查找和下载美国专利
  19. 游戏版号拿到了,可公司破产了
  20. 1080p笔记本哪个linux,System76经典Linux笔记本Lemur Pro回归 采用14.1英寸1080p显示屏

热门文章

  1. Cognos制作报表
  2. 2023 电脑PC 联想电脑风扇控制器软件工具
  3. Linux 中 隐藏History记录
  4. 服务器修改默认登录名,服务器默认登录名
  5. 有关《征途》的比较全面的评论
  6. Siemens Unigraphics NX (UG NX) 8.0.0.25 正式版简体中文 多国语言版
  7. iis提示“另一个程序正在使用此文件,进程无法访问。(异常来自HRESULT:0x80070020) ”
  8. C#挂机锁(禁用任务管理器,禁用windows键和组合键alt+f4等等)
  9. 六西格玛入门篇(一)-- 优思学院
  10. wrappers.php,PHP源码阅读笔记六:stream_get_wrappers函数