点云PCL——移动立方体(Marching Cubes,MC)算法

2023-05-16

MC算法的优点:生成网格的质量好,具有很高的可并行性。
移动立方体算法的主要思想是在三维离散数据场中通过线性差值来逼近等值面。
体元是在三维图像中由相邻的八个体素点组成的正方体方格,体元中顶点值有三种情况:高于、等于或者低于。
若顶点的数据值大于等值面的值,则定义该顶点位于等值面之内。若小于则位于等值面之外。这样我们就可以知道,若一个体元内有的顶点大于等值面有的小于等值面,则等值面必经过此体元。
此处参考文章:
移动立方体(Marching Cubes,MC)算法
若等值面经过体元,则有256种剖分方式,一共有15中基本构型。
在这里插入图片描述

每一种体元状态中都含有若干三个面片,体元中三角面片顶点的具体位置需要根据等值面的值和所在边的两个顶点的值进行线性插值计算得到。通过遍历所有体元,找出其中的三角面片并将它们组合起来就可以构成最后的三角网格表面数据(Mesh)。

我的疑惑:剖分方式什么是256种?如何为三维模型确定一个等值面呢?如何得到网格三角形来进行曲面重建呢?
1,剖分方式什么是256种?
我们将包含体数据内容的体素点称为实点,而其外的背景体素点都称作虚点。这样一个三维图像就是由各种实点和虚点组成的点阵。从单个体元的角度出发,体元的8个体素点每个都可能是实点或虚点,那么一个体元一共有2的8次方即256种可能的情况。MC算法的核心思想就是利用这256种可以枚举的情况来进行体元内的等值三角面片抽取。
2,如何为三维模型确定一个等值面呢?
等值面是指空间中的一个曲面,在该曲面上函数F(x, y, z)的值等于某一给定值Ft,即等值面是由所有点S = {(x, y, z):F(x, y, z) = Ft}组成的一个曲面。这个等值面能够表征图像虚实部分的边界。点表示像素值为250的像素,绿点表像素值为0的点。结合等高线的思想,可以将250的区域想象成一片海拔为250的高原,而0的区域是海拔为0的平原。则等值线为128的线就必然处在每个红点和绿点之间。相当于在一个由0过渡到250的坡上。实际上,值为1~249的等值线也都基本处在红点和绿点之间的位置。那么只要求出这些值中其中一个值的等值线,相当于就获得了250像素与0像素在几何意义上的边界。
在这里插入图片描述

但是在三维点云数据中又是如何确定等值面呢?
先看实体元,虚体元和边界体元的概念。
若一个体元8个体素全是虚的,或者全是实的,我们把这些体元叫做虚体元和实体元;而若一个体元中既有实点也有虚点,这样的体元我们称其为边界体元。
在这里插入图片描述

在三维图像中想求出介于实点和虚点之间的表面,就要在他们的边界,也就是边界体元设法求出虚实体素之间的等值面。MC算法的另外一大思想就是使用三角片去拟合等值面。因为一个体元相对于图像是一个极小的局部,所以穿过该体元等值面就可以近似由小三角形片来拟合。例如下面的体元配置,我们就可以认为等值面的一部分就是以这样的方式穿过体元。
在这里插入图片描述

我的理解:
现有一点云数据集组成的三维模型,对空间划分很多体元(极小正方体)。每个体元有八个体素点,若一个体元内部包含有点云的数据点,则该体元的8个体素点为实点,否则全为虚点。但是由于一个体素点是被八个点云所共享的,所以就会出现有的体元里的8个体素点,有的是实点有的是虚点,利用这种边界体元分界面来拟合等值面。
3.如何根据等值面得到网格三角形来进行曲面重建呢?
上面提到了根据虚实点一个体元可能有256种配置,那么每一种体元配置中的等值面都可由若干三角形片组成。因为三角片分布情况是有限种类的,前人制作一个表来表示所有256种配置的三角形情况,如下面这个体元配置:我们将体元的体素点和边都进行标号。组成等值面的三角形的三个顶点一定是穿过体元的边的,所以可以用三条边的索引来表示一个三角形。实点为1,2,3,6,则其字节形式来表示8个体素的虚实情况为01001110,转为十进制为78。其等值面由4个三角形T1、T2、T3、T4组成。其中T1的顶点所在的边是e3,e11,e6。

所以可以得到该点云配置的三角形表为:

此处参考文章:
图像数据到网格数据-1——MarchingCubes算法
总结起来,PCL中移动立方体算法的操作步骤为:
1)对三维点云模型划分好体元及相应的体素点,我觉得这里可以根据最小包围盒来划分体元
2)遍历所有体元,根据该体元内部是否有点云数据点,分为实体元(相应的体素点全为实点),虚体元,边界体元(有实有虚)
3)对于边界体元,根据建立好的体元配置的三角形表确定三角形片
4)组合所有的三角形片形成点云模型的三角形重建模型。

一句话总结:遍历所有的体元,找出其中的三角片最后集合起来组成图像中实点表面的三角网格(Mesh)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

点云PCL——移动立方体(Marching Cubes,MC)算法 的相关文章

  • 科大讯飞总裁办实习第5周

    5 21 周一上班首先补充试点推广流程文件详细信息 xff0c 上午共导出5 xff0c 6 xff0c 7 xff0c 8四个流程文件 上午经理在群里下达最后截止日期 xff0c 所有的规范 xff0c 流程 xff0c 文件都要周五之前
  • 科大讯飞实习第八周日志

    0611早上欲打算与业务部门尽快完善流程 xff0c 大早上联系那边的流程设计人员 xff0c 不巧的是他早上有会 xff0c 然后就自己看华为变革及管理流程框架 xff0c 下午一点半和宇婴哥一起参加了销委会商机研讨会议 xff0c 回来
  • PostgreSQL数据库导出建表语句的方法

    pg dump U postgres d dbname s gt sql txt
  • spyder导入tensorflow包

    一 xff0e spyder介绍 Anaconda中自带的集成开发环境用于科学计算还是蛮好的 xff0e 它和其他的Python开发环境相比 xff0c 它最大的优点就是模仿MATLAB的 工作空间 的功能 xff0c 可以很方便地观察和修
  • ValueError: Disable frame-skipping in the original env. 解决方案

    问题描述 今天试图在Atari上运行以下代码时 xff0c 出现了题目中的bug xff1a env 61 AtariPreprocessing env grayscale obs 61 True scale obs 61 True ter
  • OpenKylin适配和虚拟打印机

    最近在测国产OS客户端部分 首先客户端程序在CentOS全部使用没毛病 xff0c 但是CentOS桌面体验比较差 然后就试了UOS xff0c 在UOS上测试到打印这块花了很多时间 xff0c 碰到问题是CUPS有反应 xff0c 但是没
  • 基础命令整理

    1 who显示的是当前真正登录系统中的用户 16 05 59 root 64 localhost who ZT tty2 2021 11 03 10 45 tty2 ZT pts 1 2021 11 05 08 28 10 0 0 1 2
  • ubuntu apache2 配置安装ssl证书,https

    1 申请免费阿里证书 2 配置证书 在这里 xff0c 我假设你已经会配置基本的 etc apache2 sites available 000 default conf这个文件来达到已经可以通过 http 的方式来访问你的站点 在 etc
  • 今日头条2018校招笔试题之字符串的问题

    今日头条 xff0c 很干脆 xff0c 直接就四个编程 xff0c 一个改错 做的很烂 xff0c 只能来写一个题 字符串S由小写字母构成 xff0c 长度为N xff0c 定义一种操作 xff0c 每次都可以挑选字符串中任意的两个相邻字
  • ios 瀑布流

    瀑布流 xff0c 又称瀑布流式布局 是比较流行的一种 页面布局 xff0c 视觉表现为参差不齐的多栏布局 xff0c 随着页面滚动条向下滚动 xff0c 这种布局还会不断加载 数据块并附加至当前尾部 说明 xff1a xff08 1 xf
  • 旧电脑变废为宝成为nas

    老台式机1台 可用任意电脑一台 xff0c 用来调试nas U盘1个 xff0c 64M以上 黑群晖安装包 显示器 下载黑群晖安装工具包 xff1a http pan baidu com s 1eRSAwAQ 使用ChipEasy检查并记录
  • debian的初始化操作

    设置默认的编辑器为vim uppdate alternatives config editor 输入你选择的编辑器即可 配置visudo z ALL ALL ALL NOPASSWD ALL 增加开启termial的快捷键 系统设置 快捷键
  • go调用本地python代码

    go调用本地python代码 1 mac环境下测试 目录结构 xff1a go代码 xff1a xff08 windows没有python3命令 xff0c windows的话改成python即可 xff09 span class toke
  • (四) Docker之Dockerfile编写与指令解析,自定义镜像实战

    Docker之编写Dockerfile 1 Dockerfile介绍1 1 docker build1 2 dockerignore文件1 3 Dockerfile格式 2 Dockerfile构建过程解析2 1 Dockerfile内容基
  • 如何安装指定版本Pytorch:

    如何安装指定版本Pytorch 使用conda安装指定版本 conda install pytorch 61 0 1 10 c soumith 使用pip安装指定版本 pip install pytorch 61 61 0 1 10 如何查
  • gym ValueError: too many values to unpack (expected 4) 解决方案

    问题描述 今天在执行以下代码时出现了题述错误 xff1a new obs rew done info 61 self env step action new obs rew done info 61 self env step action
  • linux查看openjdk的安装的路径(环境变量)

    前言 xff1a 现在基本上linux为了避免版权问题都会默认的为你安装开源的openjdk xff0c 而不是jdk 有些时候需要运行一些环境需要用到jdk的环境变量 xff0c 本文就是简单描述下如何查看openjdk的环境变量 1 e
  • linux图形界面基本知识(X、X11、Xfree86、Xorg、GNOME、KDE之间的关系)

    转载 xff1a http apps hi baidu com share detail 11596555 LINUX初学者经常分不清楚linux和X之间 xff0c X和Xfree86之间 xff0c X和KDE xff0c GNOME等
  • windows xp远程连接

    本节将用到windows网络共享 xff0c 实现外网可以远程连接局域网内的任意主机 实验环境 两台windows xp虚拟机 xff08 内网 43 外网 xff09 xff0c 一台主机 配置外网虚拟机 首先 xff0c 为虚拟机添加两
  • 系统架构之三(业务运营支撑系统)

    本人从事过3年的移动业务运营支撑系统开发 xff0c 行业术语叫做boss系统 xff0c 后又转入游戏行业进行游戏开发 现设计一个业务运营支撑系统的架构如下 xff1a 详细解释各模块如下 xff1a gateway dispatch x

随机推荐