IDL에서 hdf5읽을때 offset 값

게시판 IDL Q&A IDL에서 hdf5읽을때 offset 값

2 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #5670 Reply
      rjh4352
      회원

      안녕하세요,

      hdf5을 읽어야 하는데요.
      자료를 읽는 건 문제없이 읽는데

      scale_factor와 add_offset을 읽는 방법을 도무지 모르겠습니다..
      구글에 검색해도 제대로 나오질 않네요 ㅠ
      제가 읽으려는 변수가 파일들에 따라 add_offset 값이 제각각이라서.. 반드시 읽어야 하는 상황입니다

      혹시 읽어들이는 방법 있을까요?

      알려주시면 감사하겠습니다!

    • #5672 Reply
      Sangwoo
      회원

      어떤 종류의 데이터가 담긴 파일인지는 모르겠으나, HDF5 형식으로 된 파일로부터 Group이나 Dataset이 아닌 Attribute에 해당되는 항목들을 읽어야 하는 경우인 것으로 보입니다. 아마도 Group이나 Dataset에 해당되는 항목들을 읽어오는 작업은 이미 하신 것 같습니다. 언급하신 scale_factor나 add_offset은 아마도 Attribute의 범주에 해당되는 항목들일 것으로 보이는데요. HDF5 형식의 파일로부터 Attribute에 해당되는 항목들을 추출하는 과정은 약간 복잡합니다. 저도 이 방법에 대하여 완벽하게 이해를 하고 있지는 못하지만 그냥 제가 아는 한도 내에서 답을 드려보겠습니다. 대략적인 과정은 다음과 같습니다. 예제 HDF5 파일은 IDL 디렉토리 내에 딸려오는 hdf5_test.h5인 경우로 가정합니다.

      file = FILEPATH(‘hdf5_test.h5’, SUBDIRECTORY=[‘examples’,’data’])
      fid = H5F_OPEN(file)
      gid = H5G_OPEN(fid, ‘images’)
      did = H5D_OPEN(gid, ‘Eskimo’)

      Attribute라는 것은 각 데이터셋마다 존재하기 때문에, 여기서는 한 예로서 예제 파일 내에서 images 그룹에 속하는 Eskimo라는 데이터셋을 대상으로 합니다. 그러면 위와 같은 과정을 거쳐서 특정 데이터셋에 해당되는 id 정보를 did라는 변수로 뽑아냅니다. 이 상황에서 먼저 다음과 같이 attribute가 총 몇개가 있는지 확인합니다.

      n_att = H5A_GET_NUM_ATTRS(did)
      PRINT, n_att

      이 예제에서는 실제로 7개라고 나옵니다. 인덱스로는 0~6이 존재한다는 것입니다. 이제는 인덱스를 하나 정하고 해당되는 attribue의 고유 id 번호를 뽑아내야 합니다. 예를 들어 네번째 attribute에 대해서 이러한 작업을 하려면 다음과 같은 명령을 실행해야 합니다.

      aid = H5A_OPEN_IDX(did, 3)

      그리고 이 attribute의 이름을 보기 위하여 다음과 같은 명령을 실행합니다.

      att_name = H5A_GET_NAME(aid)
      HELP, att_name

      그러면 이 예제에서는 다음과 같이 해당 attribute의 이름이 출력됩니다.

      ATT_NAME STRING = ‘IMAGE_COLORMODEL’

      사실 모든 attribute들의 목록을 한꺼번에 뽑아낼 수 있으면 좋은데, 그럴 수 있는 방법이 보이지 않습니다. 따라서 이와 같이 인덱스별로 이름을 출력하다보면 사용자가 원하는 이름의 attribute가 있는지 확인이 가능할 것입니다. 여기서 원하는 attribute의 인덱스를 찾았다면 다음과 같은 명령을 실행하여 실제 그 attribute 정보를 추출합니다.

      att = H5A_READ(aid)
      HELP, att

      대략 이와 같은 방식이 될 것 같습니다. IDL에서 HDF5 형식의 파일을 다루는데 사용되는 코드들의 일람은 IDL 도움말에서 다음과 같은 섹션에서 볼 수 있습니다.

      Contents -> Routines (by Topic) -> Input/Output -> HDF5 Routines

      아마 파일로부터 데이터를 읽는 방법과 관련하여 이 내용을 이미 참조하셨을지도 모르겠습니다. 근데 HDF5의 경우는 netCDF 등과 같은 타 포맷과는 달리 루틴들의 종류가 많아서 내용을 파악하기가 쉽지는 않습니다. 일단 제가 알려드린 내용을 참조해보시길 바랍니다. 만약 제가 알려드린 내용만으로는 별 도움이 안된다면 아무래도 더 깊은 내용은 직접 찾아보셔야 할 것 같습니다.

    • #5678 Reply
      inmyta27
      회원

      ㄹㄹ

2 답변 글타래를 보이고 있습니다
'IDL에서 hdf5읽을때 offset 값'에 답변달기
글쓴이 정보: