Инструменты HDF

Составлено Полом Бурком

ноябрь 2010 года

Оригинал доступен на сайте: http://paulbourke.net/dataformats/hdf/

 

Ниже приведена некоторая (краткая) документация по инструментам HDF, подготовленная для работы с объемными данными, сохраненными в виде нескольких срезов в формате HDF. Если что-то из нижеследующего неясно, пожалуйста, не стесняйтесь просить о помощи/просвещении. Обратите внимание, что инструменты здесь делают много предположений о конкретных файлах данных и проблеме, если вам нужна более общая информация о дополнительных возможностях/функциях, то просто попросите.

Различные выходные объемные файлы, созданные здесь, отформатированы в соответствии с форматом Drishti raw. Он состоит из короткого заголовка, за которым следуют двоичные данные. Заголовок состоит из одного байта, указывающего на размер данных по объему (0 для беззнакового байта и 8 для плавающего), за которым следуют 3 целых числа (по 4 байта каждое), указывающие на размер тома (x,y,z). Далее следуют данные объема в формате данных, указанные и расположенные в виде z срезов, столбцов y и, наконец, x изменяется быстрее всего. Вывод для инструментов субдискретизации использует флоты, для пороговых данных используются беззнаковые графики. При использовании программного обеспечения, которое не умеет читать исходные данные, есть 13 байт, которые можно пропустить, чтобы проигнорировать заголовок.

 

Примечания

  • Инструменты можно найти в ~pbourke/bin/. Вы можете скопировать двоичные файлы, но было бы лучше добавить этот каталог в ваш путь, это будет означать, что вы автоматически получите пользу от исправления ошибок и других обновлений.
  • Затрагиваемые HDF-файлы фактически сохраняются как HDF версии 4.25. Поэтому вам необходимо загрузить модуль hdf4/4.2.5 (на данный момент это относится только к cognac).
  • Общее предположение для HDF-файлов заключается в том, что их имя содержит номер индексации, начинающийся с 0. Это предположение означает, что спецификация для фрагментов использует соглашения о форматировании C-строк, примеры приведены в строках использования ниже.
  • Большинство инструментов здесь предполагают, что коллекция HDF-файлов начинается с индекса 0, а значения индекса увеличиваются на 1 для каждого среза. Каждый срез должен иметь одинаковые размеры.
  • Инструменты здесь запрашивают размеры срезов и количество срезов. Хотя эта информация может быть получена из файлов HDF и их количества, принятый подход используется, чтобы (слегка) упростить программирование, но в основном служит в качестве теста, что каждый файл, как и ожидалось.

hdf2raw

При этом берется список HDF-файлов и генерируется один сырой двоичный файл тома. Субдискретизация выполняется простым сэмплированием в более низком разрешении. Предназначен в основном для быстрой проверки.

Usage: hdf2raw [options] nx ny nz hdffilemask

   The volume is expected to be nx by ny by nz.

   Where the input HDF files are images in nx by ny.

   And nz slices, numbering from 0 upwards.

   The hdf_file_mask is a C style descriptor.

   For example A01/rec_E06ty_%05d.hdf would identify

   hdf files in a directory called "A01" with names

   recE06ty00000.hdf, rec_EE06ty001.hdf, ... etc

   Options:

   -s n      degree of sub-sampling (default: 1 = none)

   -v        enable verbose mode

 

hdfsubsample

 

Та же функциональность, что и у hdf2raw, но это усредняет субдискретированные блоки, используется простой bx-фильтр. В основном он предназначен для того, чтобы перенести необработанные объемные данные в другие пакеты визуализации объемов, которые ожидают один двоичный файл объемных данных.

Usage: hdfsubsample [options] nx ny nz hdffilemask

   The volume is expected to be nx by ny by nz.

   Where the input HDF files are images in nx by ny.

   And nz slices, numbering from z0 upwards.

   The hdf_file_maskis a C style descriptor.

   For example A01/rec_E06ty_%05d.hdf would identify

   hdf files in a directory called "A01" with names

   recE06ty00000.hdf, rec_EE06ty001.hdf, ... etc

   Options:

   -s n      degree of sub-sampling (default: 4)

   -z0 n     index of first slice (default: 0)

 

hdfextract

 

Этот инструмент делает множество вещей, но основные из них - это извлечение подтомов и выполнение пороговой операции. Подтом определяется происхождением и размерами на каждой оси, с учетом того, что они могут быть разными. Пороговый набор данных - это набор, в котором результирующие воксели равны 0, если исходный воксел находится за пределами порогового диапазона, и 1, если он находится в пределах порогового диапазона. Нормализация, если выбрана, определяет глобальный диапазон объема источника и масштабирует диапазон каждого среза таким образом, что он имеет один и тот же диапазон.

Usage: hdfextract [options] nx ny nz hdffilemask

   The volume is expected to be nx by ny by nz.

   Where the input HDF files are images in nx by ny.

   And nz slices.

   The hdf_file_mask is a C style descriptor.

   For example A01/rec_E06ty_%05d.hdf would identify

   hdf files in a directory called "A01" with names

   recE06ty00000.hdf, rec_EE06ty001.hdf, ... etc

   Options:

   -t1 n     set the lower threshold value (default: 0)

   -t2 n     optionally set the upper threshold value (default: 1e+32)

   -dx n     size in x dimension of the subvolume (default: 128)

  -dy n     size in y dimension of the subvolume (default: 128)

   -dz n     size in z dimension of the subvolume (default: 128)

   -s n      set size in all dimensions of the subvolume (default: 128)

   -o n n n  origin of subvolume (default: 0 0 0)

   -n v1 v2  normalise the global range to a chosen range v1 to v2 (default: off)

   -v        enable verbose mode

 

hdfinfo

 

Генерирует статистику (диапазон, среднее, стандартное отклонение, гистограммы...) последовательности HDR-файлов. Предназначен для получения быстрого снимка фрагментов тома и проверки достоверности всех файлов.

Usage: hdfinfo [options] nx ny nz hdffilemask

   The volume is expected to be nx by ny by nz.

   Where the input HDF files are images in nx by ny.

   And nz slices, numbering from 0 upwards.

   The hdf_file_mask is a C style descriptor.

   For example A01/rec_E06ty_%05d.hdf would identify

   hdf files in a directory called "A01" with names

   rec_E06ty_00000.hdf, rec_E06ty_00001.hdf, ... etc

 

Исходный код

Код HDF, используемый в этих утилитах, вполне ориентирован на файлы, о которых идет речь, он приведен здесь для справки: readhdf.c и readhdf.h.