麻烦理解.inr文件格式

时间:2016-01-20 17:23:06

标签: 3d file-format cgal

我正在尝试为cgal库创建一个灰度.inr图像,但我遇到了文件格式问题。
This seems to be the best description of the format,但看起来并不完整,只讨论标题,而不是数据本身 This seems to have a bit more information about the format,但不幸的是它是法语。

我要做的是将对象表示为一个填充了布尔值的3D数组,因此如果位于对象内部,则位置的值为1;如果位于对象内,则为0。

我现在所做的,基于第二个链接,如果我理解正确的话,就是在每个z平面的标题后写一行,下一个z平面在一个新行上。
所以我在一行代表第一行的列的x值,然后是同一行的第二行的x值,就像那个y次到最后一行一样。然后我为新的z平面跳线,并以相同的方式写入数据。

I have created the following .inr file,但是当我尝试对其进行网格化时,结果是一个立方体而不是一个圆柱体,好像cgal(我使用了mesh_optimization_lloyd_example)并不关心布尔值,只是将整个体积网格化。 / p>

我尝试查看示例提供的.inr文件(如skull_2.9.inr),但是虽然标题非常清晰,但没有文本编辑器可以读取图像数据,这让我觉得可能还有更多内容而不只是写0或1。

关于.inr的问题是错的吗?或者我使用cgal错了?

1 个答案:

答案 0 :(得分:1)

我终于设法让它发挥作用,这是帮助某人所需要的。

标题:它必须是256个字节的倍数,包括标题结尾后的回车符,这是一个例子。

#INRIMAGE-4#{ // format type
XDIM=150 // x dimension
YDIM=200 // y dimension
ZDIM=100 // z dimension
VDIM=1 // dimension of the data, here 1 for scalar or 3 for thing like RGB values
VX=5 // voxel size in x
VY=5 // voxel size in y
VZ=5 // voxel size in z
// a higher voxel size results in a more precise 3D mesh
TYPE=unsigned fixed // type of data written, can float, signed fixed or unsigned fixed, unclear if it makes a difference in my case
SCALE=2**0 // not used by most programs apparently
PIXSIZE=8 bits // size of a char, can be 8, 16, 32 or 64
CPU=pc // the type of cpu for little/big endianness, pc is little endian

// Fill with carriage returns until the header is a multiple of 256 bytes, including the end of the header (4 bytes including the line break)

##} // the line break is included in the header count

现在数据本身:
尽管文档似乎暗示了什么,但它没有换行符,一切都是连续的。 数据必须以二进制而不是ASCII编写(因此在我的C ++中,这将是static_cast(space [i] [j] [k])),将char替换为您使用的数据类型)。

最后一个怪癖,文件似乎是以列为主的顺序,所以如果你在C中有一个3d数组(这是行主要的),你需要在写入它们之前调换(x,y)平面。 / p>