storage format

.asc

asc拓展名:它可以表示任何格式,通常是纯文本,这意味着不能从.asc扩展名中假设它内部是什么样子的。它是一种交换格式,这意味着它(通常)不用作分析或主存储的输入,而是用于与其他程序的交换。

.obj

以下内容来自于这里(作者写的好有条理呀)
OBJ是以纯文本的形式存储了模型的顶点、法线和纹理坐标和材质使用信息;

在计算机图形学中,考虑到图形求交等计算的问题,这个面通常选择三角形,即模型的表面由若干三角面构成。一个模型文件需要记录的信息就是这些三角面的信息,进一步讲,一个三角面又需要有顶点、法线、连接顺序等这些信息。

顶点位置信息——x,y,z坐标值——描述了三角面的位置,但光有位置信息还不够,我们还需要知道一个三角面的正面与背面,为什么要这样,直观的理解就是,由于模型体只有表面,内部是空腔(如果模型是封闭的话),内部的面是不可见的,然后背面朝着我们(摄像机)的面也是不可见的。那怎么标注这个正面与背面呢?就是靠法线了。

所谓面的法线就是垂直于此面的线,用一个向量表示,向量指向的一侧为正面,另一侧为反面。进一步地说,法线用处还是在光照模型中确定一个面的颜色。

obj文件内容解析:

# "#"号开头是注释行
# v(vertex)数据段: 模型顶点列表
# 顶点位置信息,是xyz三维坐标
# v开头的每一行描述一个顶点,行数等于顶点数。8个顶点所以有8行
v  1.00  -1.00  -1.00
v  1.00  1.00  1.00
......
# vt(vertex texture)数据段:模型顶点的纹理坐标列表
# 顶点的纹理坐标信息,是xy二维坐标
# vt开头的每一行描述一个纹理坐标,行数大于等于顶点数,因为一个模型顶点在贴图的UV坐标系中很可能对应多个顶点/纹理坐标。且坐标值范围是在0~1之间,这个模型中有14行。
# 关于纹理坐标看图,本文不多解释纹理坐标,可参考文献[2]或自行百度
vt  0.74  0.75
vt  0.29  0.55
# vn(vertex normal)数据段:顶点法线列表
# 三维法向量,xyz
# vn开头的每一行描述一个法向量,行数大于等于顶点数。 前面介绍了,法线是与面相关的概念,但是现在的面是靠顶点来描述,拿示意图中的点"1"为例,它与参与构成了三个面,所以"顶点1"对应有3条法线
# 可能你已经发现了,在这个立方体模型中,共面顶点的法向量的方向是相同的,也就是说这里面的数据会重复,所以在建模软件导出obj文件时有个优化的选项,勾选后的导出的法线列表数据中就不会有重复项,这里的例子优化后有6条法线*
vn  -1.00 0.00 0.00 
vn  1.00 0.00 0.00
vn  0.00 1.00 0.00
......
# f(face):模型的三角面列表
# f开头的每一行描述一个面 ,关键的来了,三个点组成一个面,怎样拿到这三个点呢?通过从1开始的索引,去前面的v、vt、vn列表中去取。
# 总结一下就是:每一行定义1个面,1个面包含3个点,1个点具有“顶点/纹理坐标/法线”3个索引值,索引的是前面3个列表的信息。
f  1/1/1  2/2/1  3/3/1      # 顶点1、顶点2、顶点3 组成的面
f  2/2/1  3/3/1  4/4/1      # 顶点2、顶点3、顶点4 组成的面
f  1/1/1  5/10/1  8/14/6  # 顶点1、顶点5、顶点8 组成的面
......

以上便是obj 文件的核心部分,此外还有一些数据段,记录如下。

  • o 对象名
  • g 组名
  • s 平滑组
  • usemtl 材质名
  • mtllib 材质库.mtl

.mtl

mtl文件(Material Library File)是材质库文件,描述的是物体的材质信息,ASCII存储,任何文本编辑器可以将其打开和编辑。一个.mtl文件可以包含一个或多个材质定义,对于每个材质都有其颜色,纹理和反射贴图的描述,应用于物体的表面和顶点。

以下是一个材质库文件的基本结构:
newmtl mymtl_1
材质颜色光照定义
纹理贴图定义
反射贴图定义
newmtl mymtl_2
材质颜色光照定义
纹理贴图定义
反射贴图定义
newmtl mymtl_3
材质颜色光照定义
纹理贴图定义
反射贴图定义
……

.mat 参考这里

mat文件
mat文件是matlab的数据存储的标准格式。mat文件是标准的二进制文件,还可以ASCII码形式保存和加载,在MATLAB中打开显示类似于单行EXCEL表格。

很多数据集的标签都是通过mat文件来存储的,为了解析出图片所对应的的标签信息,我们需要从mat文件中来解析出这些信息,这里我们利用人脸遮挡数据集MAFA为例,从中获取图片所对应的标签信息

mat文件解析
使用Python来解析mat文件其实是非常简单的,通过scipy库就可以了,没安装这个库的可以通过下面的命令进行安装

pip install scipy
  • 导包
import scipy.io as sio
  • 加载读取mat文件
mat_data = sio.loadmat(mat_path)
  • 获取mat文件中的相关信息
#直接输出mat文件的内容
print(mat_data)
#输出mat数据的key
print(mat_data.keys())

在这里插入图片描述
这里我们需要特别注意key,后面需要利用这个字段来进行进一步解析数据,像__***__这种是文件自带的属性,不用管,所以实际上我们字需要最后一个key: label_train

  • 解析数据
#获取key
key_name = list(mat_data.keys())[-1]
#根据key获取数据
data = mat_data[key_name]
#获取数据的shape,这里数据的shape是(1,25876)
#后面表示的是图片的数量
print(data.shape)
#遍历数据
for line in data[0,:]:
    #获取图片的名称
    img_name = line[1][0]
    #获取图片对应的标签信息
    img_info = line[2][0]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五月的天气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值