三维人脸重建(二)——Python生成ply文件

2023-11-12

引言

  本文主要以做坐标点为例。
  我们知道python对数据的处理主要是以numpy的形式
  一般三维空间坐标的矩阵在python中为

[[x1, y1, z1],
[x2, y2, z2],
...
...
...
[xn, yn, zn]]

  然后可以通过工具包绘制三维散点图,如下
在这里插入图片描述
  总归python只是一个数据处理工具,npy格式的数据并不能被专门的3D处理软件读取。因此我们需要将点云数据写入3D文件中,本文将介绍其中一种——ply

一、ply格式模型介绍

文件说明,有助于数据提取时的理解。这一部分借鉴3D基本知识PLY格式

参考:PLY格式介绍与读取

PLY是一种电脑档案格式,全名为多边形档案(Polygon File Format)或 斯坦福三角形档案(Stanford Triangle
Format)。

格式组成:

头:声明数据格式,规定和点和面片的数据内容

点:点的数据内容(坐标x,y,z 颜色r,g,b等)

线:线的数据内容(组成线的点序号索引,颜色等)

面片:面片的数据内容(组成面的点序号索引,颜色等)

举例:

ply                 
format ascii 1.0   
 //数据保存格式,三类
//format ascii 1.0
//format binary_little_endian 1.0
//format binary_big_endian 1.0
element vertex 8 //元素:顶点 个数为8
property float x    
property float y    
property float z    //顶点格式:依次为x,yz坐标
element edge 6  //元素:边 6条
property int vertex1
property int vertex2
property uchar red  
property uchar green
property uchar blue //边存储格式为: 顶点id 1,2,颜色r,g,b
end_header  //头,以end_header结束
0.194585 0.0202505 -0.654565
0.393574 0.0181872 -0.634588
0.196413 0.220227 -0.652125
0.174584 0.0180056 -0.455581
0.811062 -0.0294865 -0.551833
0.991697 -0.0650619 -0.473697
0.845413 0.167279 -0.541659
0.73238 -0.0252545 -0.368009  //点内容,8个顶点(x,y,z)坐标
0 1 255 0 0
0 2 0 255 0
0 3 0 0 255
4 5 255 0 0
4 6 0 255 0
4 7 0 0 255   //6条边,(id1,id2,r,g,b)

二、代码

import numpy as np
# Function to create point cloud file
def create_output(vertices, colors, filename):
    colors = colors.reshape(-1, 3)
    vertices = np.hstack([vertices.reshape(-1, 3), colors])
    np.savetxt(filename, vertices, fmt='%f %f %f %d %d %d')     # 必须先写入,然后利用write()在头部插入ply header
    ply_header = '''ply
    		format ascii 1.0
    		element vertex %(vert_num)d
    		property float x
    		property float y
    		property float z
    		property uchar red
    		property uchar green
    		property uchar blue
    		end_header
    		\n
    		'''
    with open(filename, 'r+') as f:
        old = f.read()
        f.seek(0)
        f.write(ply_header % dict(vert_num=len(vertices)))
        f.write(old)


if __name__ == '__main__':
    # Define name for output file
    output_file = 'Andre_Agassi_0015.ply'
    a = np.load("Andre_Agassi_0015.npy")
    b = np.float32(a)
#   43867是我的点云的数量,用的时候记得改成自己的
    one = np.ones((43867,3))
    one = np.float32(one)*255
#    points_3D = np.array([[1,2,3],[3,4,5]]) # 得到的3D点(x,y,z),即2个空间点
#    colors = np.array([[0, 255, 255], [0, 255, 255]])   #给每个点添加rgb
    # Generate point cloud
    print("\n Creating the output file... \n")
#    create_output(points_3D, colors, output_file)
    create_output(b, one, output_file)

  最终三维坐标就保存在ply中了
  代码中的color是每个坐标点对应的纹理色彩,可自行设置
  用meshlab打开我们生成的ply的效果如下:
  在这里插入图片描述

注:

  博主自2021年6月硕士毕业后将不再继续三维人脸方面的相关工作,同时edu邮箱也不再继续使用。即日起将不再为各位看官单独提供点云文件。现提供网盘下载方式:

链接:https://pan.baidu.com/s/1RQIyY2rC2jOXNyJ3zPxugQ 
提取码:rkby 

  若上述网盘无法下载,可向评论区的小伙伴寻求帮助,先前留言的同学,我都通过邮箱发送了相关文件。
  因签署了协议,手上的几个数据集都是不能公开的,不过同学们可以下载国内的一个免费数据集——CASIA-3D
  感谢大家一致以来的关注,之后会从事其他方面的研究,会继续分享我在实验中遇到的干货。

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

三维人脸重建(二)——Python生成ply文件 的相关文章

  • 【论文精读】360MVSNet

    今天读的是发表在WACV2023上的MVS文章 该文章提出了基于全景相机的MVS pipeline 文章链接 点击前往 代码链接 暂未开源 文章目录 Abstract 1 Introduction 2 Related works 3 Met
  • 正交变换——来龙去脉

    什么是正交变换 正交变换为何要满足下列条件 正交变换研究什么 1 表象 2 正交变换 研究 长度不变 3 性质 角度 长度 面积不变 4 基本形式 1 平移变换 2 旋转变换 3 轴反射变换 几种组合仍是正交变换 5 为何正交满足那样的表象
  • 计算机视觉之三维重建(三)(单视图测量)

    2D变换 等距变换 旋转平移 保留形状 面积 通常描述刚性物体运动 相似变换 在等距变换的基础增加缩放特点 射影变换 共线性 四共线点的交比保持不变 仿射变换 面积比值 平行关系等不变 仿射变换是特殊的射影变换 影消点与影消线 2D无穷远点
  • OpenMVS+Win10+VS2019+vcpkg编译及问题

    Win10 VS2019 OpenMVS1 1 1 Vcpkg 1 VS2019安装 2 git安装 3 vcpkg安装 3 1下载vcpkg 3 2安装vcpkg 3 3 配置环境变量 4 Vcpkg下载OpenMVS依赖的三方库 5 下
  • 【论文精读】CVRecon: Rethinking 3D Geometric Feature Learning For Neural Reconstruction

    今天读的是一篇发表在ICCV2023上的文章 试图使用mvs的方法来助力neural reconstruction 项目地址 点击前往 文章地址 点击前往 文章目录 Abstract 1 Introduction 2 Related Wor
  • 基于MATLAB的线激光三维彩色扫描仪

    暑期做的一个项目 开始并不是很熟悉 在网上查找的资料也不是很具体 但是自习学习了理论知识之后还是比较容易的做出来这个项目 现在开源整个项目 由于篇幅有限 本文适合稍微有点点基础的朋友 源码见底部 先显示下最后结果 一 硬件设计 主要有步进电
  • 神经辐射场 (NeRF) 概念

    神经辐射场 NeRF 概念 理论介绍 NeRF模型以其基本形式将三维场景表示为由神经网络近似的辐射场 辐射场描述了场景中每个点和每个观看方向的颜色和体积密度 这写为 F x
  • 从照片的三维重建(3D Reconstruction)——MVS系列(1)

    MVS multi view system从多视图的密集重建 SFM的重建成果是稀疏三维点云 为了进入更加深刻的领域 获得更好的结果 我们进入到MVS 如何理解密集点云的生成原理 MVS是生成密集点云的方法 事实上 为什么我们在SFM中不能
  • 三维重建(三)相机参数标定与光束平差法(Bundle Adjustment)

    一 针孔成像模型涉及到的坐标系 由于相机的参数总数相对于某种光学模型而言的 这里用到的比较广泛的光学模型就是小孔成像的模型 下面针对小孔成像的光学模型涉及到的坐标系一一介绍 1 世界坐标系 世界坐标系即为三维空间中物体的坐标 用 Xw Yw
  • Matterport3D:室内环境RGB-D数据的深度学习

    Matterport3D 室内环境RGB D数据的深度学习 Taylor Guo 2017年9月24日 Matterport3D Learning from RGB D Data in Indoor Environments Matterp
  • 医疗图像三维重建方法小结(python+VTK+ITK+Mayavi)

    医疗图像三维重建forpython 环境简介 方法 方法一 Poly3DCollection matplotlib 方法二 VTK ITK 方法三 Mayavi之contour3d 最终方法Mayavi TVTK 环境简介 语言是pytho
  • openmvg2.0编译与使用

    目录 写在前面 获取代码 github 网盘 编译 使用 稠密重建 参考 完 写在前面 1 openmvg是一个用于实现structure from motion的开源库 实现了完整的sfm pipeline 并有说明文档 https op
  • 【论文精读】Vis-MVSNet: Visibility-aware Multi-view Stereo Network

    今天属于是重读经典了 这是一篇发表在BMVC2020上的文章 试图解决MVS中可见性的问题 该文章最近在拓展之后被发表在了IJCV上 本文的解读是基于扩展之后的IJCV版本 期刊的版本内容更加详细一点 文章链接 BMVC2020版本和IJC
  • Colmap学习三:后端Initialization部分(基础矩阵F、本质矩阵E和单应矩阵H)

    算矩阵的基础知识 解析本质 基础 单应矩阵的自由度 1 寻找初始像对 1 1手动选择ID 1 2自动筛选 prior focal length存在情况下 开始筛选 匹配点数由小到大排序 第二张候选影像的匹配数目大于init min num
  • 基于opencv下的双目视觉三维重建与重投影残差计算

    一 重投影残差 1 1基本概念 重投影残差 按照字面意思解释就是在第二次重新投影的二维像素点与第一次投影得到的像素点之间的残差 欧式距离 大小 残差的大小反映的就是测量仪器的精度以及外界因素对测量结果的干扰 即测量误差的大小 如下图所示 假
  • 泊松曲面重建(基于PCL)

    Possion重建是Kazhdan等2006年提出的网格重建方法 Possion重建的输入是点云及其法向量 输出是三维网格 表面重建流程 1 构建八叉树 采用的是自适应的空间网格划分的方法 根据点云的密度调整网格的深度 根据采样点集的位置定
  • 使用openMVS对样例数据进行重建

    openMVS根据github上的步骤进行编译 注意 如果没有GPU 用不了CUDA的话 那么需要在openMVS目录下找到CmakeLists txt文件 把CUDA设置为OFF SET OpenMVS USE CUDA OFF CACH
  • RealityCapture场景建模笔记

    Unity Photogrammetry Workflow 5 2 8 着色和贴纹理 Colorize or Texture 5 2 10 网格输出 Mesh export 输出附有颜色信息的Mesh 点云 5 2 8 着色和贴纹理 Col
  • 【三维重建】Ubuntu18.04安装COLMAP

    Ubuntu18 04安装COLMAP 文章目录 Ubuntu18 04安装COLMAP 前言 安装COLMAP 安装CUDA cuDNN 安装依赖项 安装Ceres优化库 安装glog 可选 配置并编译COLMAP 运行COLMAP 总结
  • 【论文精读】IGEV-MVS:Iterative Geometry Encoding Volume for Stereo Matching

    今天读的是发表于CVPR2023的文章 作者全部来自于华中科技大学 文章链接 Iterative Geometry Encoding Volume for Stereo Matching 项目地址 GitHub 目录 Abstract 1

随机推荐

  • 无线传感网络

    第一 二章 无线传感网络的定义 无线传感网络是大量的静止节点或移动的传感器以自组织和多跳的方式构成的无线网络 目的是协作地探测 处理和传输网络覆盖区域内感知对象的监测信息 并报告给用户 传感器节点的组成 数据处理 数据采集模块 传感器 A
  • 最好的网页浏览器_谷歌浏览器双击关闭标签的步骤_如何使Chrome能够双击关闭标签页...

    我们在使用浏览器浏览网页的时候 经常会打开多个书签 很多浏览器都支持双击标签页就可以直接关闭 但是有不少用户使用谷歌浏览器chrome却发现无法直接双击关闭标签页 那么如何使Chrome能够双击关闭标签页呢 我们需要借助扩展程序 现在随小编
  • 最短路径——迪杰斯特拉(Dijkstra)算法

    如果你要从一个城市到另一个城市 中途可以有很多种换乘方法 根据不同人的需求 怎么样才能实现价格最少 价格和路程成正比 怎么样能实现换乘次数最少 有很多种可能的情况 这时候怎么样找到合适的方案呢 这就需要研究图的最短路径问题 不过在网图和非网
  • 12、【创业必备企业架构,可开发任意项目】SpringCloud大型企业分布式微服务云架构源码之MySQL 排序

    MySQL 排序 我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据 如果我们需要对读取的数据进行排序 我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段哪种方式来进行排序 再返回搜索结果 语法
  • Shell-打印文件空行行号

    1 写一个 bash脚本以输出一个文本文件 nowcoder txt中空行的行号 可能连续 从1开始 awk s print NR nowcoder txt 2 去掉文件的空行输出 方法1 awk if 0 print 0 nowcoder
  • 【Python 3.7】河流:创建一个字典,在其中存储三条大河流及其流经的国家。其中一个键 — 值对可能是 'nile': 'egypt' 。

    Python 3 7 河流 创建一个字典 在其中存储三条大河流及其流经的国家 其中一个键 值对可能是 nile egypt 题目 河流 创建一个字典 在其中存储三条大河流及其流经的国家 其中一个键 值对可能是 nile egypt 使用循环
  • acwing算法基础课笔记7

    时间复杂度分析
  • easyui toolbar工具div form放外面表单无法清空重置

    form 一定要放在div内部才行 这也是我自己踩过的坑
  • Unity中的资源管理-使用Profile分析内存使用情况

    本文分享Unity中的资源管理 使用Profile分析内存使用情况 在上一篇文章中 我们介绍了Ab的加载和使用 并简单列举了其内存分布情况 今天我们继续探索Ab的内存 观察和实验其在各种阶段的分布情况 Profile性能分析工具 在一切开始
  • 掌握Python的X篇_17_循环语句(while;for var in ;range)

    文章目录 1 为什么需要循环 2 while循环 3 for in循环 4 range函数 1 为什么需要循环 循环语句方便我们做重复的事情 比如 for i in range 0 3 print 重要的事情说三遍 运行效果如下 Pytho
  • C++ 中内存分区总结

    背景 C 中最基本的存储单位是字节 C 中所有的数据都是由对象组成的 每一个对象都包含了一个或多个内存位置 C 中有多种不同类型的内存区域 不同区域存放不同的数据 赋予数据不同的生命周期 程序在执行时将供用户使用内存大致划分为以下区域 常量
  • 激光灯

    激光等中使用的通讯方式 简介 通讯介绍 DMX512通讯 DMX512通讯物理层 DMX512通讯应用层 ILDA通讯 ILDA通讯物理层 DMX512通讯应用层 Art Net 网络通讯 简介 本文作为起始书写的第一篇 但可能不是专栏中的
  • Error : Program type already present: android.support.design.widget.CoordinatorLayout$

    Error Program type already present android support design widget CoordinatorLayout 原因是在页面中使用recyclerView导致的 主要是design和co
  • Cache-Control max-age=0

    http blog csdn net ysdaniel article details 7969766 Cache Control no cache 强制每次请求直接发送给源服务器 而不经过本地缓存版本的校验 这对于需要确认认证应用很有用
  • 第二章 下载AOSP WiFi相关的代码

    第一章 国内下载AOSP最新源码的方法 文章目录 前言 一 需下载的仓库清单 二 下载命令 三 代码仓目录结构 总结 前言 WiFi相关的仓库包括Settings SettingsLib wifi service wpa supplican
  • micropython移植教程_Micropython移植篇——从点亮一个灯开始

    收到论坛申请的 MicroPython入门指南 已经两天了 看到了第四章 没有再往下看了 感觉应该先找个硬件移植 然后再往下看 跟着学习 这样才有意义 好了 先说下移植的过程吧 硬件采用的是STM32F429DISC 具体步骤 第一步 下载
  • Matlab 学习笔记 (部分内容系转载)

    由于要参加数学建模比赛的原因 我需要在不到一周的时间内初步地学习Matlab 因此 我希望把我在学习过程中阅读的资料记录下来 方便跟我一样需要在较短时间内速成Matlab的同学 基本上我记录的东西都是从网上的资料总结而来 所以这篇文章更偏向
  • MySQL读写分离实战

    1 MySQL读写分离概念 MYSQL读写分离的原理其实就是让Master数据库处理事务性增加 删除 修改 更新操作 create insert update delete 而让Slave数据库处理查询 select 操作 MySQL读写分
  • Java基础--------集合框架

    参考http blog csdn net zhongkelee article details 46801449 点击打开链接 以此为模板 自己做了整理 修改 目录 一 概念 二 集合框架的体系 2 1 Collection接口 2 1 1
  • 三维人脸重建(二)——Python生成ply文件

    目录 引言 一 ply格式模型介绍 二 代码 注 引言 本文主要以做坐标点为例 我们知道python对数据的处理主要是以numpy的形式 一般三维空间坐标的矩阵在python中为 x1 y1 z1 x2 y2 z2 xn yn zn 然后可