伊万里瓷器文件格式设计允许快速的可视化非常大的图像。为此它不仅原始图像数据也存储低分辨率版本的原始数据。这允许可视化软件只有低分辨率数据加载,当这些就足够了。也为目的的快速可视化伊万里瓷器文件格式存储在相邻的3 d图像数据块(3 d区块hdf-terminology)只允许可视化软件加载那些领域的数据视图。多分辨率结构和chunk-wise存储布局是这样的基石高性能文件格式。
标准的文件格式是基于HDF5(分层数据格式5)发达国家超级计算应用中心,伊利诺伊大学香槟分校。bob综合app官网登录这允许广泛使用HDF5库和工具的使用。
伊万里瓷器5.5文件包括三个主要类型的组(或文件夹)的图片:
一个额外的组可能包含伊万里瓷器的场景:
在本文档中,集团、属性和数据集引用HDF5文档中给出的概念。只要给出一个路径(/数据/ ResolutionLevel 12)应该打开相应的组和子组。
前“伊万里瓷器经典”和“Imaris3”基于HDF5文件格式不规范,不会在本文档中描述。
从HDF组Bitplane使用HDF5库作为阅读和写作的后端HDF5文件。一个好的起点阅读关于HDF5 HDF5集团文件格式的网站http://www.hdfgroup.org/HDF5/。HDF集团提供的图书馆开源和免费的。建议利用图书馆而不是创建自己的HDF5阅读器/写入器。
HDF集团还提供了有用的工具和库。值得注意的是HDFView,基于java的HDF文件检查器。这里可以免费下载。
强烈建议使用IMS HDFView看一些例子文件以了解文件的格式。
伊万里瓷器5.5文件结构是由一根“文件夹”和三个主要群体,数据集,DataSetInfo和缩略图。
右边的屏幕截图的IMS HDFView文件显示HDF文件结构。形象的例子有两个频道和3水平分辨率。
数据集文件夹包含实际的图像数据。DataSetInfo文件夹包含描述性的参数。缩略图文件夹包含一个2 d图像的缩略图。
路径 | 属性 | 价值 | 描述 |
/ | ImarisDataSet | ImarisDataSet | 特定的格式 |
FormatVersion | 发送的 | 格式版本 | |
/ DataSetInfo | 包含数据集信息 | ||
/缩略图 | 包含了缩略图dataz |
伊万里瓷器5.5数据集具有以下结构。数据集由一个或多个3 d图像(2 d图像一维的大小等于1)。当一个或多个时间点数据集有多个渠道它存储为每个频道和3 d图像每个时间点。数据保存在文件中使用的块(见HDF5文档),可以使用GNU GZIP压缩。良好的阅读性能,块的大小必须存储在伊万里瓷器软件可视化的要求(见章节伊万里瓷器Datablocks下文)。
HDF5块机制意味着数据集的有效尺寸可以比原来的三维图像的大小。因此,属性ImageSizeZ ImageSizeY和ImageSizeX也与每个数据集保存。
数据集的类型需要类似类型的数据存储。在下表中列出有效类型。
HDF5数据类型 | 伊万里瓷器图像数据类型 |
H5T_NATIVE_UCHAR | 8位无符号整数(字符) |
H5T_NATIVE_USHORT | 16位无符号整数(短) |
H5T_NATIVE_UINT32 | 32位无符号整数 |
H5T_NATIVE_FLOAT | 32位浮点数 |
创建属性数据集应该分块、存储分配时间增量,填补价值没有,压缩没有或GZIP。如果GZIP压缩被激活,可以使用任何有效的GZIP参数(即压缩0到9是可以接受的,3者优先)。
随着每一个三维图像,保存相应的直方图(见下表)。直方图是HDF5 1 d 64位无符号整数类型的数据集。它的长度可以读出使用HDF5库。第一个值对应值的计数HistogramMin的形象。最后一个值的计数HistogramMax形象。
路径 | 属性 | 描述 |
/数据/ ResolutionLevel 0 0 0 /计算/频道 | 信息有关决议0,时间点0和通道0 | |
ImageSizeX = 285 | 尺寸X的像素分辨率级别0 | |
ImageSizeY = 218 | 在Y像素大小 | |
ImageSizeZ = 64 | 在Z像素大小 | |
ImageBlockSizeX = 64 | 大小的图像块在X的像素分辨率级别0 (alpha版本)-弃用 | |
ImageBlockSizeY = 256 | 在像素大小的图像块在Y (alpha版本)-弃用 | |
ImageBlockSizeZ = 64 | 在像素大小的图像块在Z (alpha版本)-弃用 | |
HistogramMin = 0 | 最小值对应的直方图的图像 | |
HistogramMax = 255 | 直方图的最大价值 | |
/数据/分辨率级别0 /计算/通道0 /数据 | 大小的图像,ImageSizeX * ImageSizeY * ImageSizeZ | |
/数据/分辨率级别0 /计算/通道0 /直方图 | 图像的直方图。第一本对应HistogramMin HistogramMax最后一本 | |
/数据/ ResolutionLevel 0 0 /通道1的计算 | 信息有关决议0,时间点0和1频道 | |
/数据/ ResolutionLevel 0 0 /通道0 /数据的计算 | 图像数据的分辨率0,时间点0和通道0 | |
/数据/ ResolutionLevel 0 /计算/通道0 /直方图 | 图像直方图解决0,时间点0和通道0 |
例子:
mFileId = H5Fopen (mFileName.c_str ()、H5F_ACC_RDONLY H5P_DEFAULT);hid_t vDataSetId = H5Gopen (mFileId,“数据集”);hid_t vLevelId = H5Gopen (vDataSetId分辨率级别0);hid_t vTimePointId = H5Gopen (vLevelId,“计算0”);hid_t vChannelId = H5Gopen (vTimePointId,“0”频道);hid_t vDataId = H5Dopen (vChannelId,“数据”);/ /读取属性ImageSizeX, Y, Z hsize_t vFileDim [3] = {ImageSizeZ、ImageSizeY ImageSizeX};hid_t vFileSpaceId = H5Screate_simple (3 vFileDim零);char * vBuffer = new vBuffer [ImageSizeZ * ImageSizeY * ImageSizeX);H5Dread (vDataId、H5T_NATIVE_CHAR H5S_ALL、vFileSpaceId H5P_DEFAULT, vBuffer);
在上面的例子中,整个三维图像分辨率对应0,时间点0和通道0是阅读。使用HDF5库也可能只读形象的一部分,内存或其他要求
DataSetInfo组包含所有从伊万里瓷器图像参数。的部分被存储为HDF5组、参数存储为HDF5属性。Hdf5属性可以使用H5Aopen_name打开并使用H5Aread读。所有属性都存储为字符串类型,即数字必须被转换成字符串。HDF5类型的属性是一个数组H5T_C_S1 (C字符串)。
在下面,“LSM”一词作为“激光扫描显微镜”的缩写。
集团/部分名称 | 属性/参数名称 | 描述 |
ImarisDataSet | 本节包含文件中的数据组织的信息。(总是) | |
创造者=伊万里瓷器 | ||
NumberOfImages = 1 | 目前只有一个multi-channel-time图像每个文件 | |
版本= 5.5 | 伊万里瓷器的版本创建这个文件 | |
伊万里瓷器 | 缩略图和伊万里瓷器的信息。(总是) | |
文件名= retina.ims | 原始文件的名称 | |
ManufactorString =通用伊万里瓷器3. x | Manufactor信息 | |
ManufactorType = LSM | Manufactor类型信息 | |
ThumbnailMode = thumbnailMIP | 缩略图的数据表示的类型。有效值是“thumbnailNone”、“thumbnailMiddleSection”、“thumbnailMIP”或“thumbnailNone”。 | |
版本= 5.5 | 伊万里瓷器的版本创建这个文件 | |
图像 | 数据集的信息。(总是) | |
描述=核 | 在纯文本图像的详细描述(可以多行) | |
ExtMax0 = 46.7464 | 最大的数据。扩展X(在给定单位:嗯,海里,…) | |
ExtMax1 = 35.7182 | 最大的数据。扩展Y | |
ExtMax2 = 12.6 | 最大的数据。扩展Z | |
ExtMin0 = -10.3 | 数据来源X | |
ExtMin1 = -1.5 | 数据来源Y | |
ExtMin2 = 3.4 | 数据来源Z | |
LensPower x = 63 | 反褶积参数 | |
Name = m1193.pic | 简短描述图像的(一些字符) | |
Noc = 2 | 数量的渠道 | |
RecordingDate = 1991-10-01 16:45:45 | “YYYY-MM-DD HH: MM: SS” | |
单位=嗯 | “米”、“毫米”,“嗯”或“纳米” | |
X = 285 | 图像尺寸X(压) | |
Y = 218 | 图像尺寸Y(压) | |
Z = 64 | 图像大小Z(压) | |
X频道 | 信息通道X(每个通道有一个部分)(总是) | |
颜色= 1 0 0 | 基本颜色(r, g, b浮点值从0.0到1.0) | |
ColorMode = BaseColor | “BaseColor”、“TableColor”见下面的例子的颜色表模式。 | |
ColorOpacity = 0.168 | 体绘制显示通道的不透明度(浮点值从0.0到1.0) | |
194.921 ColorRange = 0 | 显示“对比” | |
描述= Cy5 | 详细描述的通道 | |
获得= 0 | 反褶积参数 | |
LSMEmissionWavelength = | 发射波长 | |
LSMExcitationWavelength = | 激发波长 | |
LSMPhotons = | 反褶积参数 | |
LSMPinhole = | 针孔直径 | |
Max = 255 | 数据通道图像的最大价值 | |
MicroscopeMode = | 反褶积参数 | |
最小值= 0 | 数据通道图像的最小值 | |
Name = CollagenIV (TxRed) | 通道的简短描述(一些字符) | |
NumericalAperture = | 数值孔径 | |
抵消= 0 | 反褶积参数 | |
针孔= 0 | 反褶积参数 | |
RefractionIndexEmbedding = | 反褶积参数 | |
RefractionIndexImmersion = | 反褶积参数 | |
TimeInfo | 所有渠道的信息。(总是) | |
DataSetTimePoints = 1 | 时间点的数据集的数量 | |
FileTimePoints = 1 | 文件中的时间点的数量(目前DataSetTimePoints一样) | |
TimePoint1 = 1991-10-01 16:45:45.000 | 时间时间点1。时间点之间的时间必须严格增加。 | |
日志 | 任何信息的历史形象(特别是数据操作)。 | |
条目= 3 | 数量的条目(数量的图像数据的修改)。可以是零。 | |
Entry0 = | 第一次修改 | |
Entry1 = | 第二次修改 | |
Entry2 = | 第三次修改 |
注意,其他组/部分可用取决于原始文件格式(奥林巴斯,蔡司等)
读LSMEmissionWavelength通道3的例子
mFileId = H5Fopen (mFileName.c_str ()、H5F_ACC_RDONLY H5P_DEFAULT);/ /打开DataSetInfo集团hid_t vDataSetInfoId = H5Gopen (mFileId“DataSetInfo”);/ /打开通道3组hid_t vChannel3Id = H5Gopen (vDataSetInfoId“频道3”);/ /打开属性LSMEmissionWavelength hid_t vAttributeId = H5Aopen_name (vChannelId“LSMEmissionWavelength”);/ /获取数据空间hid_t vAttributeSpaceId = H5Aget_space (vAttributeId);/ /获得属性值大小hsize_t vAttributeSize = 0;H5Sget_simple_extent_dims (vAttributeSpaceId &vAttributeSize, NULL);/ /创建缓冲区char * vBuffer = new char [(bpSize) vAttributeSize + 1];vBuffer [vAttributeSize] = ' \ 0 ';/ /读取属性值H5Aread (vAttributeId、H5T_C_S1 vBuffer);
缩略图目录包含一个2 d,广场RGBA形象,任意大小的(典型值是128 x128或256 x256)。图像数据的缩略图大小W应该阅读使用unsigned char的缓冲区大小的W W x 4 (H5Dread)。HDF5数据集大小是W行和W x 4列。每个图像像素是存储为4 HDF5值,以红色、绿色、蓝色和α组件。
例子
/ /打开组缩略图的东西在哪里H5Gopen (mFileId“缩略图”);/ /获得数据集hid_t vThumbnailDataId = H5Dopen (vThumbnailId,“数据”);/ /得到dataspace hid_t vThumbnailSpaceId = H5Dget_space (vThumbnailDataId);/ /获得数据的大小hsize_t vThumbnailDims [2];H5Sget_simple_extent_dims (vThumbnailSpaceId vThumbnailDims, NULL);char * vBuffer = new char [(bpSize) (vThumbnailDims [0] * vThumbnailDims [1]));/ /读取缩略图数据H5Dread (vThumbnailDataId、H5T_NATIVE_UCHAR H5S_ALL, H5S_ALL, H5P_DEFAULT, vBuffer);/ /创建图像vThumbnail =新形象(vThumbnailDim [1] / 4, vThumbnailDim [0]);对于所有缩略图像素{vThumbnail [vPixel]。红色= vBuffer [vIndex];vThumbnail [vPixel]。Green = vBuffer[vIndex+1]; vThumbnail[vPixel].Blue = vBuffer[vIndex+2]; vThumbnail[vPixel].Alpha = vBuffer[vIndex+3];
多分辨率结构和chunk-wise存储布局是这样的基石高性能文件格式。
高效的数据访问的可视化伊万里瓷器5.5 3 d文件格式存储图像数据块。典型的块大小是128 x128x64或256 x256x16。最优块大小是由图像的几何形状,这是不容易为复制指定规则就是伊万里瓷器的块大小将写入hdf-file。也没有必要因为hdf图书馆非常有效地读取数据,只要布局不完全不同。如果你想为伊万里瓷器写图像文件阅读,尝试创建3 d大约1 mb的块大小。这将产生好结果呈现在伊万里瓷器。如果你需要调整性能,请联系Bitplane工程团队获得更详细的信息。
高效的可视化的伊万里瓷器5.5文件格式存储不仅原始数据,而且低分辨率版本的原始数据。文件的分辨率水平的数量是由下面的伪代码:
空白getMultiResolutionPyramidalSizes (const size_t [3] aDataSize, std::向量aResolutionSizes) {const浮动mMinVolumeSizeMB f = 1.;aResolutionSizes.clear ();size_t [3] vNewResolution = aDataSize;浮动vVolumeMB;做{vResolutionSizes.push_back (vNewResolution);size_t [3] vLastResolution = vNewResolution;size_t vLastVolume = vLastResolution [0] * vLastResolution * vLastResolution [1] [2];for (int d = 0;d < N;+ + d){如果((10 * vLastResolution [d]) * (10 * vLastResolution [d]) > vLastVolume / vLastResolution [d]) vNewResolution [d] = vLastResolution [d] / 2; else vNewResolution[d] = vLastResolution[d]; // make sure we don't have zero-size dimension vNewResolution[d] = std::max((size_t)1, vNewResolution[d]); } vVolumeMB = vNewResolution[0] * vNewResolution[1] * vNewResolution[2]) / (1024.f * 1024.f); } while (vVolumeMB > mMinVolumeSizeMB); }