http://eunchul.com/file_formats/HDF/
아리랑 1호 인공위성 영상 이미지 파일 포맷
1. 서론
다목적실용위성(KOMPSAT) 1호는 국가의 공공목적으로 정부에서 투자하여 개발한 국내 최초의 실용급 원격탐사용 위성이다. 따라서, 다목적위성 1호의 자료활용은 국가공공분야의 활용을 최우선으로 한다. 또한 위성자료의 사용을 확대하고 관련연구를 활성화하도록, 가능한 한 학계, 산업계 및 일반국민들도 누구나 저렴하고 용이하게 자료를 접근하고획득이 가능하도록 활용체계를 구축하고 있다.
다목적실용위성 1호기에는 지도제작, 해양관측, 과학실험 등을 위한 고해상도 전자광학 카메라(Electro-Optical Camera: EOC), 해양관측카메라(Ocean Scanning Multi-spectral Imager: OSMI), 과학실험 탑재체(Space Physics Sensor: SPS)를 탑재하고 있다. EOC는 한반도 표준지도 제작을 위한 위성영상정보 획득의 임무를 가지고 있으며, 가시광선 영역의 관측파장 대역 510~730 nm 로 주어지는 흑백 단일 채널을 통하여 수직촬영시 지상해상도 6.6 m 와 최소 15 Km 이상의 지상관측 폭을 갖고 push-broom 방식으로한 궤도당 800 Km 의 지상길이를 촬영한다. OSMI는 다중 스펙트럼 영상 카메라로서 800 Km 의 지상관측 폭과 1Km 이하의 해상도를 가지며, whisk-broom 주사방식으로400~900 nm 의 파장 범위 내에서 6개의 관측파장대역을 선정하여 칼라 영상을 획득한다. OSMI는 주로 해수색 관측을 통한 생물학적 해양지도 작성의 임무를 가지고 있으며, OSMI 관측자료는 전세계 해양자원 및 해양환경 관측에 활용된다.
이러한 탑재체를 통하여 획득된 위성자료는 국내외의 다양한 수요자에게 공급될 것이다. 특히 국내에서는 EOC 자료를 이용한 한반도의 지도, 수치고도모델 (Digital Elevation Model: DEM) 제작, 농업, 임업환경조사, 재해예방 등에 적용될 것이며, OSMI 자료는 해양 식생조사 등에 적용될 것이다. 이러한 다양한 분야의 수요자들에게 위성자료를 효율적으로 신속하게 전달할 수 있는 체계를 구축하는 것은 인공위성제작, 발사, 운용 등의 하드웨어적인 성공 못지 않게 중요하다.
다목적인공위성의 운용을 담당하는 항공우주연구소에서는 이러한 많은 수요자들에게 배포할 위성자료는 순수한 EOC 데이터를 카메라 자체에 의한 하드웨어적인 오차보정, 지구회전, 궤도 고도 변환 등에 의한 오차를 보정한 Level 1GR 수준의 EOC 데이터를 표준으로 공급하며, OSMI 데이터 또한 OSMI 자체의 오차보정, 경로에 의해 발생하는 오차 및남북축 상의 기하학적인 오차를 보정한 Level 2A 수준의 OSMI 데이터를 표준으로 공급한다.
이러한 많은 수요자들에게 배포될 위성자료의 표준 파일포맷(File Format)[1]은 HDF (Hierarchical Data Format) 이며, TIFF(Tag Image File Format) 혹은 GeoTIFF 포맷도가능하다. HDF[2]는 분산환경에서 과학용 데이터를 공유하기 위한 다중객체 파일형식으로서, 여러 분야에서 진행되고 있는 프로젝트를 수행하는 다양한 과학자들의 요구를 만족시키기 위하여 NCSA(National Center for Supercomputing Applications)에서 개발되었다. HDF 파일포맷은 기존의 JPEG, TIFF, BMP 등과 같이 하나의 이미지만을 저장하는 것이아니라, 적절한 HDF 자료구조를 사용하여 하나의 HDF 파일에 문자데이터, 수치데이터, 이미지데이터 등의 여러 종류의 데이터를 동시에 저장할 수 있다. 이러한 특성으로 인하여HDF 파일포맷은 기존의 다른 파일포맷보다는 상대적으로 매우 복잡할 뿐만 아니라, 많은 이미지 처리 소프트웨어에서는 HDF를 이미지 파일이 아니라 다양한 데이터를 수록하는과학용 데이터 파일 포맷으로 다루어서, 이러한 소프트웨어에서는 지원하지 않고 있다. HDF 파일포맷을 지원하는 소프트웨어들은 HDF 파일 처리전용의 소프트웨어나 일부 원격탐사 전용의 대형 소프트웨어에서 지원하고 있다.
2. HDF 파일 포맷
2.1 HDF 파일포맷 개요
일반적으로 과학자들은 다양한 종류의 컴퓨터에서 데이터를 만들거나 처리하고 있고, 데이터 파일을 처리하기 위하여 여러 가지의 소프트웨어 패키지들을 사용하고 있으며, 다른 컴퓨터와 소프트웨어를 사용하는 다른 과학자들과 데이터를 공유하기도 한다. 이러한 환경에서 여러 가지 종류의 정보가 하나의 파일 혹은 여러 개의 파일에 수록되며, 각 파일에저장되어 있는 서로 다른 정보의 혼합 정도도 각각 다르다. 여기서 어떤 데이터는 많은 파일에 분산될 수 있으므로, 파일들은 개념적으로는 서로 관계가 있을 수 있으나, 물리적으로는 서로 분리되어 있을 수 있다.
그림 1. HDF 자료구조
HDF(Hierarchical Data Format)는 이러한 분산환경에서 과학용 데이터를 공유하기 위한 다중객체 파일형식이다. HDF는 여러 분야에서 진행되고 있는 프로젝트를 수행하는 다양한 과학자들의 요구를 만족시키기 위하여 NCSA(National Center for Supercomputing Applications)에서 개발되었다. 특히 HDF는 다음과 같은 과학용 데이터를 기록하기 위한많은 요구조건을 만족시키도록 만들어 졌다.
- 과학자들에게 많이 사용되고 있는 데이터 형식과 메타데이터 형식을 지원한다.
- 큰 데이터를 읽고, 쓰는데 있어서 효율적이어야 한다.
- 컴퓨터의 기종에 관계없이 사용할 수 있어야 한다.
- 다른 표준형식과 무리없이 사용할 수 있어야 하며, 앞으로 기능향상에 대비하여 확장할 수 있어야 한다.
HDF 자료구조(HDF data structure)란 HDF에서 데이터를 저장하기 위한 주 구성요소들을 설명하는데 사용된다. 주 구성요소는 래스터 이미지(raster image), 팔레트(palette),과학용 데이터집합(scientific data set), 주석(annotation), 브이데이터(vdata), 브이그룹(vgroup)이다(그림 1 참조). 브이그룹은 여러 개의 HDF 자료구조를 하나로 묶어 표현하기위하여 사용된다. HDF 파일에는 이 파일에 저장된 각 HDF 자료구조에 관한 데이터와 파일 내에서의 위치를 나타내는 데이터 등의 메타데이터(metadata)가 존재한다. 또한 하나의HDF 파일에는 여러 종류의 데이터가 수록될 수 있는데, 예를 들면, 적절한 HDF 자료구조를 사용하여 하나의 HDF 파일에 문자데이터, 수치데이터, 이미지 데이터 등을 저장할 수있다.
HDF는 여러 상호접근(interactive) 계층의 관점에서 볼 수 있다. 최하위 층은 데이터를 저장하는 물리적인 파일 형식이며, 최상위 층은 HDF 파일에 수록된 데이터를 분석, 조작하고, 보여줄 수 있는 응용 프로그램들의 집합이다. 이 층들의 사이에서 HDF는 하위 층과 상위 층의 프로그래밍 인터페이스를 제공하는 소프트웨어 라이버러리이다. 또한 HDF는HDF 파일에 수록된 데이터를 기록하고, 꺼내고, 분석하기 쉽게 하기 위한 지원 소프트웨어를 포함한다(그림 2 참조).
그림 2에서와 같이 최하위 물리적 계층 바로 위에는 기본 인터페이스 계층 혹은 하위 계층 API(low-level API)로서, 이는 소프트웨어 개발자들을 위한 것이다. 이 계층은 데이터를 직접적인 파일 I/O를 통하여 접근하거나, 에러 처리, 메모리 관리, 물리적인 데이터 기록 등을 위하여 디자인되었다. 이런 기능은 상위 계층의 인터페이스에서 제공하는 이상으로HDF를 사용하고자 하는 숙련된 HDF 프로그래머들을 위한 소프트웨어 툴킷이다. 이 하위 계층의 프로그램은 C 언어만을 통하여 사용 가능하다.
하위계층 API 상위에는 그림 2에서와 같이 HDF 응용 프로그래밍 인터페이스 (application programming interfaces: API) 이며, API는 여러 가지의 독립된 프로그램의 집합으로 구성되어 있다. 각각의 프로그램 집합은 과학적 데이터, 팔레트, 주석, 8-bit 래스터, 24-bit 래스터 등의 한 가지 형식의 데이터를 저장하거나 읽기 위한 작업을 단순화하도록 디자인되었다. 각각의 인터페이스는 세세한 프로그래밍이 필요하지만 모든 세부적인 것은 무시될 수 있다. 즉 대부분의 경우에 있어서는 적절한 시점에서 정확한 함수를 호출하기만 하면 되고, 나머지 모든 것은 인터페이스가 알아서 처리해 준다. 모든 HDF 인터페이스 프로그램들은 FORTRAN-77, C, Java 언어가 사용 가능하다.
그림. HDF파일의 계층적 구조
가장 상위 계층인 일반 응용 프로그램(general applications)에서 HDF 는 HDF 파일을 조작하거나 시각화하기 위한 다양한 줄-명령 유틸리티(command-line utilities)와, 데이터시각화 혹은 분석을 지원하는 다양한 NCSA 응용 프로그램(NCSA applications) 및 제 3자 제공 응용 프로그램(third-party applications)을 포함하고 있다.
2.2 상위계층 HDF API
HDF API는 다중파일 인터페이스(새로운 기능)과 단일파일 인터페이스(구 기능) 2 가지로 분류된다. 다중파일 인터페이스는 하나의 응용 프로그램으로부터 여러 개의 HDF 파일을 동시에 접근할 수 있도록 해주는 인터페이스로서, 이 기능은 단일파일 인터페이스에서는 제공되지 않는 중요한 기능이다.
HDF I/O 라이브러리는 데이터, 데이터에 관련된 정보 등에 접근하기 위한 C, FORTRAN-77 언어의 루틴들로 구성되어 있다. 데이터 형식에 따라 중복되는 것이 약간은 있지만, 이러한 루틴들은 기본적으로 하나의 형식의 데이터에만 적용할 수 있다. 그러므로 HDF 파일의 특정 데이터에 접근하기 위해서는 데이터 형식에 맞는 API를 사용하여야 한다.
다음은 현재 사용 가능한 HDF 인터페이스와 각 인터페이스가 지원하는 모든 데이터를 나열한 것이다. 새로운 다중파일 인터페이스(multifile API)는 다음과 같다.
(1) SD API: 한 개 이상의 파일에 저장된 문자, 수치 데이터의 다차원 배열, 이들 데이터의 차원 및 속성을 저장하거나, 읽거나, 처리한다. 주로 과학적 데이터 집합(Scientific Data Sets)을 위하여 사용된다.
(2) VS API: 테이블의 레코드 형식으로 저장된 multivariate 데이터를 저장하거나, 읽거나, 처리한다. 주로 브이데이터(Vdatas)를 위하여 사용된다.
(3) V API: 어떤 종류의 HDF 파일 구조들의 그룹을 만든다. 주로 브이그룹 (Vgroups) 데이터 구조를 위하여 사용된다.
(4) GR API: 한 개 이상의 파일에 저장된 래스터 이미지와, 이미지의 차원 및 팔레트를 저장하거나, 읽거나, 처리한다. 주로 일반 래스터 이미지(General Raster Images)를 위하여 사용된다.
(5) AN API: 하나의 파일을 설명하거나, 그 파일에 저장된 데이터 구조를 설명하는데 사용되는 문자들을 저장하거나, 읽거나, 처리한다. 주로 주석(Annotations)을 처리하는데 사용된다.
구 기능인 단일파일 인터페이스(single-file API)는 다음과 같다.
(1) DFR8 API: 주로 8-bit 래스터 이미지를 처리하는데 사용되는 인터페이스로서, 한 개의 파일에 저장된 8-bit 래스터 이미지와, 이미지의 차원 및 팔레트를 저장하거나, 읽거나,처리한다.
(2) DF24 API: 주로 24-bit 래스터 이미지를 처리하는데 사용되는 인터페이스로서, 한 개의 파일에 저장된 24-bit 이미지와, 이미지의 차원을 저장하거나, 읽거나, 처리한다.
(3) DFP API: 주로 팔레트를 처리하는데 사용되는 인터페이스로서, 한 개의 파일에 저장된 8-bit 팔레트를 저장하거나 읽는다.
(4) DFAN API: 주로 단일파일 주석(Single-file Annotations)을 처리하는데 사용되는 인터페이스로서, 하나의 파일을 설명하거나, 그 파일에 저장된 데이터 구조를 설명하는데 사용되는 문자 스트링들을 저장하거나, 읽거나, 처리한다.
(5) DFSN API: 단일파일 과학적데이터 집합(Single-File Scientific Data Sets)을 처리하는데 사용되는 인터페이스로서, 하나의 파일에 저장된 정수, 실수 데이터의 다차원 배열과 이 배열의 차원 및 속성을 저장하거나, 읽거나, 처리한다.
2.3 HDF 파일 구조
HDF 파일은 한 개의 파일 헤더(file header)와 적어도 한 개의 데이터 설명자 블록(data descriptor block), 및 0 개 이상의 데이터 구성요소(data elements)로 이루어진다(그림3 참조).
그림 . 한 개의 데이터 객체를 가지고 있는 HDF 파일의 물리적 구조
HDF 파일의 첫 번째 구성요소는 파일 내에서 첫 네 바이트를 차지하는 파일 헤더로서, 이 네 바이트는 차례로 Control-N, Control-C, Control-S, Control-A(^N^C^S^A)인 네 개의 ASCII 문자로 구성되어 있다. 이 파일 헤더를 통하여 현재의 파일이 HDF 파일인지를 확인할 수 있게 된다.
데이터 설명자 블록(data descriptor block)은 여러 개의 데이터 설명자를 가지고 있는데, 이들 데이터 설명자와 데이터 구성요소(data element)가 합쳐져서 HDF 파일에서 데이터를 묶는 가장 기본적인 집합체인 데이터 객체(data object)를 구성한다. 데이터 설명자는 데이터 구성요소의 형식, 위치, 그리고 크기에 관한 정보를 가지고 있다. 데이터 구성요소는 실제 데이터를 가지고 있다. 이렇게 HDF 데이터 조직이 구성되어 있으므로, HDF파일은 파일에 저장된 데이터 구성을 스스로 설명해 줄 수 있다.
그림 . Data 설명자
모든 데이터 설명자는 그림 4와 같이 총 길이가 12 바이트로서 4개의 필드로 구성된다. 4개의 필드는 각각 16-비트 택(tag), 16-비트 참조번호(reference number), 32-비트 데이터 옾셑(data offset), 그리고 32-비트 데이터 길이(data length)이다.
택은 데이터 구성요소에 저장된 데이터 형식을 알려주는 데이터 설명자 필드이다. 이 택은 1-65,353 사이의 16-비트의 정수로서, 문자이름과 연결되어 사용자 프로그램에서 사용하기 쉽게 해준다. 데이터 설명자가 데이터 구성요소를 가지고 있지 않으면, 택의 값은 0이 된다. 택은 HDF의 사양의 일부로서 HDF 그룹에 의하여 지정된다.
HDF 파일에 택이 만들어 질 때마다, 라이버러리에 의하여 데이터 설명자 내에 택과 함께 유일한 참조번호가 부여된다. 참조번호는 16-비트의 음이 아닌 정수로서 참조번호가 지정하는 데이터 객체가 존재하는 동안에는 그 값을 변경할 수 없다. 택과 참조번호가 합쳐져서 파일내의 대응되는 데이터 객체를 유일하게 지정한다. 참조번호는 일련번호로 할당될필요가 없으므로, 참조번호의 값은 같은 택을 가지고 있는 데이터 객체를 구분하는 기능 이외에 특별한 다른 의미가 없다. 응용 프로그램에서는 필요에 따라서 참조번호에 특별한 의미를 부여할 수 있지만, 이러한 의미가 HDF 라이버러리에서는 통하지 않는다.
데이터 옾셑은 파일의 처음으로부터 데이터 구성요소가 시작하는 곳까지의 바이트 수를 저장함으로써 파일 내에서 데이터 구성요소의 위치를 가리켜 준다. 데이터 길이는 데이터 구성요소의 크기를 바이트 수로 나타낸 것이다. 데이터 옾셑과 길이는 32-비트의 음이 아닌 정수이다. 데이터 구성요소는 데이터 객체의 실제 데이터 부분이다.
데이터 설명자는 데이터 설명자 블록이라는 블록의 리스트(linked list)에 저장된다. 데이터 설명자 블록과 HDF 파일 내의 다른 구성요소와의 관계는 그림 3에 나타난다. 데이터설명자 블록 내의 각 데이터 설명자는 한 개의 데이터 구성요소와 연결된다. 그러나 택의 값이 0 인 경우는, 연결된 데이터 구성요소가 없음을 의미한다. 기본적으로 데이터 설명자블록은 16개의 데이터 설명자로 이루어져 있으나, 사용자가 HDF 파일을 만들 때, 이 제한을 없앨 수 있다. 또한 데이터 설명자 블록에는 데이터 설명자 헤더(data descriptor header)가 있다. 이 헤더는 블록 크기(block size)와 다음 블록(next block)의 두 필드로 구성된다. 블록 크기는 16-비트의 음이 아닌 정수로서 데이터 설명자 블록 내의 데이터 설명자의 수를 나타내고, 다음 블록 필드는 32-비트 음의 정수로 표현되는 다음 데이터 설명자 블록의 옾셑을 나타낸다. 데이터 설명자 블록 리스트에서 가장 마지막 블록 데이터의 설명자 헤드 내에 있는 다음 블록의 값은 0을 가진다.
HDF 파일 내에서 관련 데이터를 가지고 있는 여러 개의 데이터 객체는 라이버러리에 의하여 묶여질 수 있다. 이러한 데이터 객체의 묶음을 데이터 집합(data set)이라고 한다.예를 들면, 8-비트 래스터 이미지 데이터 집합은 다음 세 가지 객체가 필요하다: 데이터 집합의 구성원소를 나타내는 그룹 객체(group object), 이미지 데이터를 수록하는 이미지 객체, 그리고 이미지의 크기를 나타내는 차원(dimension) 객체이다. 데이터 객체는 하나의 데이터 집합에 포함되어 있다고 하여도, 개별적으로 접근 가능하므로 데이터 객체는 여러개의 데이터 집합에 속할 수 있으며, 또한 데이터 집합도 더 큰 그룹에 포함될 수 있다. 예를 들면, 한 개의 래스터 이미지 집합에 속한 팔레트는 다른 래스터 이미지 집합에 속할 수있다. 이 경우에 두 번째 집합의 데이터 설명자 내에 팔레트의 택과 참조 번호가 포함되어 있어야 한다.
2.4 HDF 응용 소프트웨어
HDF 응용 소프트웨어는 앞의 절에서 설명한 FORTRAN-77, C API, HDF 파일을 읽거나 저장하는 과학적 시각화 및 분석 툴, 혹은 HDF 파일에 직접 적용되는 줄-명령어 유틸리티 등과 같은 3가지 종류이다.
현재 HDF 파일을 읽거나 저장하는 과학적 시각화 및 분석 소프트웨어가 많이 개발되고 있다. 이 소프트웨어에는 NCSA에서 개발된 툴인 JHV(Java-based HDF Viewer)[3], 사용자들에 의하여 개발된 소프트웨어, 상업용 패키지들이 포함되어 있다. HDF를 사용함으로써 이러한 툴들 사이에 상호적용성(interoperability)이 보장된다. 즉 어떤 툴은 래스터 이미지에만 적용되고, 또 다른 툴은 컬러 팔레트에만 적용되며, 또 다른 툴은 주석에 적용되는 식이다. 이를 위하여 HDF는 서로 다른 데이터 형식을 필요로 하는 각각의 툴들이 혼란없이 같은 파일에 적용될 수 있도록 다양한 데이터 형식을 제공하고 있다. 현재 HDF 파일전용의 소프트웨어는 대표적으로 Fortner Software에서 개발된 SciSpy 프로그램[4]이 있으며, HDF 형식의 파일을 처리하는 소프트웨어에는 원격탐사용 소프트웨어인 Better Solutions Consulting LLC 사의 ENVI 3.0[5], ERDAS 사의 ERDAS Imagine[6] 등이 있다. 그러나 Jasc 사의 Paint Shop Pro[7], Adobe 사의 Photoshop[8] 등과 같이 MS-Windows 시스템을 사용하는 PC에서 많은 사용자가 이용하는 대부분의 이미지 처리 소프트웨어는HDF 형식의 파일을 처리하지 못하고 있다. 이는 이들 소프트웨어들이 HDF 파일형식을 이미지 파일형식보다는 과학적 데이터형식의 파일로 분류하고 있음을 나타낸다.
가장 최신의 HDF 버전은 4.1r3 (HDF4)이며, 이 HDF 라이버러리의 소스코드, 설명서 및 다양한 종류의 컴퓨터에 적용 가능한 바이너리코드는 무료로 제공된다[9]. 이러한 자료는 NCSA의 ftp 서버인 ftp.ncsa.uiuc.edu 의 /HDF/ 디렉토리에 수록되어 있다. 최근 NCSA에서는 기존 HDF4의 단점을 보완한 HDF 버전 5 (HDF5)를 새로이 발표하였다[10]. 이는 HDF4 와는 전혀 호환성이 없는 새로운 파일 포맷으로서 HDF5 파일을 분석하고, 시각화하는 기능을 포함하는 C, Java, C++, Fortran90 언어 인터페이스를 제공한다.
3. EOC 화상처리 소프트웨어
항공우주연구소에서 배포하는 EOC 데이터 혹은 OSMI 데이터는 HDF 파일포맷을 표준으로 작성되므로, 이러한 데이터를 사용하는 사용자들은 기본적으로 HDF 파일포맷의파일을 처리할 수 있는 소프트웨어가 필요하다. HDF 포맷의 파일을 처리할 수 있는 소프트웨어로는 2 절에서 예시한 것과 같이 매우 제한적이다. 예를 들면 HDF 포맷의 파일만을전용으로 처리할 수 있는 소프트웨어로는 대표적으로 NCSA에서 개발한 JHV(Java-based HDF Viwer)[3]와 Fortner Software에서 개발된 SciSpy[4] 프로그램이 있다. 그러나JHV는 BMP, JPEG, TIFF 등과 같은 대표적인 다른 이미지 포맷과의 호환성이 부족하며, 그 기능 또한 매우 제한적이다. SciSpy는 공개 소프트웨어 이지만, BMP, JPEG, TIFF 등의 파일형식으로 입력/출력 변환하는 등의 고급기능을 사용하기 위해서는 소프트웨어를 구매하여야 한다. 또한 HDF 포맷의 파일을 처리할 수 있는 원격탐사용 소프트웨어인 ENVI 3.0 혹은 ERDAS Imagine 등은 원격탐사를 위한 방대한 기능을 가지고 있는 범용의 소프트웨어로서 매우 고가이므로 많은 사용자들이 쉽게 이용하지는 못하고 있다.
참고자료
[1] C. W. Brown, B. J. Shepherd, Graphics File Formats: Reference and Guide, Manning Pub., 1995.
[2] HDF Home Page: http://hdf.ncsa.uiuc.edu.
[3] NCSA Java HDF Viewer (JHV): http://hdf.ncsa.uiuc.edu/java-hdf-html/jhv/.
[4] Fortner Software: http://www.fortner.com.
[5] ENVI 3.0: http://www.envi-sw.com.
[6] ERDAS: http://www.erdas.com.
[7] Paint Shop Pro, Jasc: http://www.jasc.com.
[8] Photoshop, Adobe: http://www.adobe.com.
[9] HDF4 Home Page: http://www.ncsa.uiuc.edu/hdf4.html.
[10] HDF5 - A New Generation of HDF: http://www.ncsa.uiuc.edu/hdf5/.