Как читать данные hdf в Octave

Я делаю проект в области дистанционного зондирования. Работать с HDF в Matlab очень просто. Но я хочу реализовать это с помощью распределенных вычислений (Ubuntu). Поэтому я пытаюсь с октавой. У меня есть файлы HDF4 хлорофилла. Нормальная обработка изображения будет легко выполняться по октаве. Но я хочу знать о hdfread, hdftool в Octave. Я добавил пакеты изображений в пределах изображения октавы. Может ли кто-нибудь сказать мне, как читать и как работать с данными hdf. Есть ли какой-либо пакет для добавления. Пожалуйста, дайте мне знать об этом.

  • Как читать данные hdf
  • Как загрузить данные hdf
  • Как получить изображение из данных hdf

person prabu    schedule 29.07.2013    source источник
comment
hdfread и hdftool еще не реализованы в Октаве (смотрю версию 3.6.4)...   -  person Eitan T    schedule 29.07.2013


Ответы (4)


Для HDF5 Octave может загрузить его без дополнительного пакета.

Для HDF4 вы можете преобразовать его в файл NetCDF с помощью h4tonccf или OPeNDDAP hdf4_handler, а затем загрузить его с помощью вызова NetCDF через пакет octave Octcdf. Мы предоставляем полный пример с полными исходными кодами Octave здесь:

http://hdfeos.org/software/octave.php

Ниже приведен пример графика NASA HDF4, созданного Octave через OPeNDAP.

Сюжет Octave для продукта NASA AIRS HDF4

person HDFEOS.org    schedule 10.02.2014

Специальные функции hdf еще не реализованы в Octave. Однако Octave может обрабатывать этот формат с помощью более стандартной команды load. Просто выполните load path-to-hdf-file, и вы загрузите структуру в память.

См. следующие сообщения в архиве рассылки справки: Как чтение данных HDF и чтение данных подмножества из HDF5.

person carandraug    schedule 29.07.2013
comment
Спасибо за ваш ответ. Я уже сделал это. но приходит с ошибкой. Если октава поддерживает hdf4 и его операции, мне это будет очень полезно вместо использования матлаба. - person prabu; 30.07.2013
comment
@prabu вам нужно указать полученную ошибку (и версию Octave), если вы хотите, чтобы люди вам помогли. - person carandraug; 31.07.2013

Поддержка HDF5 в Octave ‹= 4.0 предназначена только для файлов, которые были записаны самой Octave с помощью функций Simple File IO. У этого есть много недостатков, если ваши данные поступают откуда-то еще, например, невозможно прочитать один произвольный набор данных или его часть.

На данный момент более полные и совместимые с Matlab функции, которые читают/записывают наборы данных и атрибуты, см. в модуле

https://github.com/stegro/hdf5oct

Редактировать: я внес свой вклад в этот проект.

person stegro    schedule 01.06.2015
comment
Пожалуйста, сообщите где-нибудь о своей принадлежности к проекту, иначе ваш пост может быть расценен как реклама или спам, что может быть ошибочным. - person skuntsel; 01.06.2015

Я считаю, что вы можете преобразовать данные hdf4 в hdf5 с помощью соответствующих инструментов преобразования, например. h4toh5.

В Octave загрузить файл .h5 (плюс проверка) так же просто, как:

octave:1> load secondhdf5.h5 
octave:2> whos
Variables in the current scope:

   Attr Name         Size                     Bytes  Class
   ==== ====         ====                     =====  ===== 
        dbldata      4x3                         96  double
        fltdata      4x3                         96  double
        intdata      4x3                         48  int32

Total is 36 elements using 240 bytes

octave:3> size(dbldata)
ans =

   4   3

Кстати, содержимое «secondhdf5.h5» было следующим:

$ h5dump secondhdf5.h5 
HDF5 "secondhdf5.h5" {
GROUP "/" {
   DATASET "dbldata" {
      DATATYPE  H5T_IEEE_F64LE
      DATASPACE  SIMPLE { ( 3, 4 ) / ( 3, 4 ) }
      DATA {
      (0,0): 1.1, 1.2, 1.3, 1.4,
      (1,0): 2.1, 2.2, 2.3, 2.4,
      (2,0): 3.1, 3.2, 3.3, 3.4
      }
   }
   DATASET "fltdata" {
      DATATYPE  H5T_IEEE_F32LE
      DATASPACE  SIMPLE { ( 3, 4 ) / ( 3, 4 ) }
      DATA {
      (0,0): 1.1, 1.2, 1.3, 1.4,
      (1,0): 2.1, 2.2, 2.3, 2.4,
      (2,0): 3.1, 3.2, 3.3, 3.4
      }
   }
   DATASET "intdata" {
      DATATYPE  H5T_STD_I32BE
      DATASPACE  SIMPLE { ( 3, 4 ) / ( 3, 4 ) }
      DATA {
      (0,0): 1, 2, 3, 4,
      (1,0): 5, 6, 7, 8,
      (2,0): 9, 10, 11, 12
      }
   }
}
}
person nathanielng    schedule 27.03.2015
comment
Я хотел бы добавить, что октава не поддерживает файл h5 с составным типом. Таким образом, каждый набор данных должен быть примитивного типа (int, double и т. д.). - person kstn; 29.07.2021