3D物体分类---ModelNet .OFF格式生成多视角图像(Mat方法之第二步)

强烈建议使用Blender方法!!!

- 授人以鱼不如授人以渔 -
写文章的初衷是我在处理ModelNet的.OFF文件时遇到太多困难,只为后来的你减少不必要的麻烦,思路和代码都是我历经千辛万苦才摸索出来的,百度很难找到,代码现已全部上传至GitHub。需要特别说明的是,代码不是拿来即用的,你需要仔细按照你自己的路径修改

说明

回顾一下ModelNet10/40 .OFF文件生成多视角图像的方法,我找到的有两种方法,实际推荐Blender方法!!!


两种方法具体步骤:


2. python将不同视角的.MAT文件转为多视角图片

2.1 数据格式说明

实际上经过步骤一得到的.MAT文件是这种的:

-ModelNet10_voxelized_mat

    |--bathtub

        |--- bathtub_0001.off

            |---- bathtub_0001_01.mat

            |---- bathtub_0001_02.mat

                        ...

            |---- bathtub_0001_32.mat

       |--- bathtub_0002.off

            |---- bathtub_0002_01.mat

            |---- bathtub_0002_02.mat

                        ...

            |---- bathtub_0002_32.mat

        .....

        |--- bathtub_0300.off

            |---- bathtub_0300_01.mat

            |---- bathtub_0300_02.mat

                        ...

            |---- bathtub_0300_32.mat

    |--bed

        |--- bed_0001.off

            |---- bed_0001_01.mat

            |---- bed_0001_02.mat

                        ...

            |---- bed_0001_32.mat

对于每一个.off文件都生成了32个视角的.MAT文件,虽然.MAT文件是三维结构,可以通过matlab显示,并可由鼠标进行操作旋转,但是如果只单单获取一个视角mat文件,对MAT2PNG的方法就会造成很大的麻烦,所以步骤一对每一个.off文件保存了32个不同视角的mat文件。

2.2 如何将三维MAT文件投影为图片格式呢?

  • 依赖库:
pip install mayavi

利用mayavi库实现对mat文件的显示和保存,具体代码如下:


def voxel_mat2img(mat_filepath, png_filepath):
	mlab.clf()
	mlab.contour3d(mat_filepath)
	f = mlab.gcf()
	mlab.savefig(png_filepath)

mat_filepath 是 xx.mat文件路径
png_filepath 是 转为png格式的路径
代码运行单个.mat文件转为的png格式图片:
在这里插入图片描述

实际上png_filepath可以由mat_filepath名字自动获取,我在演示代码中这么应用的


import numpy as np
import mayavi.mlab as mlab
from scipy.io import loadmat
import time, os

mat_filepath = 'bathtub_0107_16.mat'


# function: voxel mat 2 image(.png)
def voxel_mat2img(mat_filepath, png_filepath):
	mlab.clf()
	mlab.contour3d(mat_filepath)
	f = mlab.gcf()
	mlab.savefig(png_filepath)
	print(png_filepath, 'saved ##############')


if __name__ == '__main__':
	voxelmat_ = loadmat(mat_filepath)['instance']
	png_filepath = mat_filepath.split('.')[0] + '.png'
	voxel_mat2img(voxelmat_, png_filepath)

当然,为了更简单的让你运行这段代码,我上传了两个.mat文件,实测代码无误。

此外,为了能够对ModelNet整个数据集自动处理,我也上传了我的代码,代码名为Modelnet_mat2png_Modelnet10.py,但是我的代码太具有针对性,实际需要你更改的不少,所以建议你看一下上段代码,便于你修改路径。

2.3 你想要的代码地址

最直接粗暴的就是上代码,简单明了!
但是
但是
但是
但是,需要说明的是,其实这种方法是比较麻烦的,而且必须显示出图像来才能保存,呵呵哒,所以很麻烦,
强烈建议你们看blender方法!!!
强烈建议你们看blender方法!!!
强烈建议你们看blender方法!!!


Github地址
https://github.com/zeaggler/ModelNet_Mat2PNG

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值