IDL/General

ENVI에 IDL로 만든 기능을 추가하는 방법에 관하여

이상우_IDL 2017. 5. 20. 11:00
728x90

아시는 분들은 아시겠지만 ENVI는 IDL의 제작사인 Harris Geospatial에서 제작 및 판매하는 원격탐사 데이터 처리용 패키지 소프트웨어입니다. Landsat, ALOS, Kompsat 등등 전세계 다양한 인공위성 데이터들을 읽고 처리하는 기능들을 내장하고 있어서 원격탐사 분야에서는 상당히 널리 사용되고 있습니다. ENVI는 사실 태생이 IDL입니다. 예전의 ENVI는 실제로 IDL의 Widget 프로그래밍 기법을 사용하여 원격탐사용 GUI 프로그램으로 개발되었고 상당 기간 동안 그러한 형태의 제품으로 존재해왔습니다. 요즘은 ENVI의 GUI는 그 형태로만 보면 예전과 같은 인터페이스의 Classic ENVI와 현대적인 인터페이스의 ENVI 두가지로 이원화되어 있지만, 내부 알고리즘들은 계속 IDL을 기반으로 합니다. 따라서 ENVI와 IDL은 항상 서로 붙어다니는 관계라고 보면 됩니다.


이러한 관계는 ENVI의 사용에 있어서 또 다른 가능성을 제공하는데요. 바로 기능의 확장입니다. 즉, ENVI에 IDL로 만든 새로운 기능을추가하는 것(Extending ENVI with IDL)이 가능하다는 얘기입니다. 물론 ENVI 자체적으로 상당히 다양한 많은 기능들이 존재하긴 하지만, 그럼에도 불구하고 유저가 특별히 필요로 하지만 ENVI 자체에는 지원되지 않는 커스텀 기능을 추가하는 것이 가능하다는 얘기입니다. 이렇게 유저가 커스텀 기능을 ENVI에 추가하기 위해서는 다음과 같이 몇가지 염두에 둬야 할 사항들이 있습니다.


(1) ENVI와 IDL을 모두 보유해야 함 (ENVI+IDL)

(2) 기본적인 IDL 코딩이 가능해야 함

(3) 추가되는 기능의 내용 및 규모에 따라서는 IDL에서 GUI를 개발하는 코딩이 필요할 수도 있음


사실 저는 유저들로부터 ENVI의 확장 기능을 IDL로 개발하여 추가하려면 어떻게 하는 것이 좋으냐에 대한 질문을 가끔 받습니다. 물론 저는 이런 작업을 해본 적이 있지만, 그 방법에 관하여 제대로 소개해 본 적은 아직은 별로 없습니다. 그래서 이러한 궁금증을 가진 유저들에게 어떤 내용을 소개해주는 것이 좋을까에 대하여 고민하던 차에 도움이 될 만한 웹 링크가 눈에 띄어서 한번 소개해 봅니다.


https://www.harrisgeospatial.com/docs/ToolboxExtensions.html


이 링크는 IDL, ENVI의 본사인 Harris 웹페이지에 있는 내용인데요. 비교적 간단한 예제를 사용하여 잘 설명이 되어 있습니다. 관심 있으신 분들은 이 내용을 한번 참조해보시면 좋을 것 같습니다. 이 링크에 있는 내용을 제가 여기서 또 자세히 설명드리긴 어렵습니다. 다만 혹시 실전 예제를 빨리 테스트해보고 싶은 분들은 하단에 있는 Example 부분을 보시면 됩니다. 여길 보면 예제 코드가 하나 있는데 대략적으로 다음과 같이 따라 해보시면 됩니다. 물론 이 예제를 직접 테스트해보기 위해서는 ENVI+IDL이 필요합니다.


(1) 예제 코드의 내용을 카피하여 IDL에서 emboss_band1.pro 파일로 저장한다.


emboss_band1.pro


(2) 저장 후 컴파일한다. 컴파일을 할 때에는 다음과 같이 콘솔창에서 먼저 .reset을 실행하여 깨끗한 상태에서 하는 것이 좋다.

.RESET_SESSION
  .COMPILE emboss_band1.pro


(3) 다음과 같이 콘솔창에서 RESOLVE_ALL 명령을 실행한다. 이 때 EnviRaster가 정의되어 있지 않다는 메시지가 나오는데 그냥 무시한다.

RESOLVE_ALL, /CONTINUE_ON_ERROR, SKIP_ROUTINES='ENVI'


(4) 다음과 같이 콘솔창에서 SAVE 명령을 실행한다. 그러면 작업 디렉토리 내에 emboss_band1.sav 파일이 생성된다.

SAVE, FILENAME = 'emboss_band1.sav', /ROUTINES


(5) 이 sav 파일을 ENVI 설치 디렉토리 안에 있는 extensions라는 하위 디렉토리 안으로 카피해 넣는다.


(6) ENVI를 실행한다. 그리고 다음과 같이 우측 하단의 Extensions 아래에 'Emboss Band 1'이라는 명칭의 아이콘 버튼이 생성되었음을 확인한다.



(7) 이 아이콘 버튼을 더블 클릭하면 이 기능이 실행된다. 이 때 입력 파일 선택창이 나타나는데, ENVI 설치 디렉토리 안에 있는 data라는 하위 디렉토리에 있는 qb_boulder_msi라는 이름으로 시작하는 파일 아무거나 선택한다.



(8) 그 다음에는 출력 파일 이름을 설정해야 하므로, 적당한 디렉토리에 적당한 이름을 적어주면 된다.



(9) 선택 후 처리 과정이 진행되고 최종 결과가 ENVI의 화면에 뜨는 것을 확인한다.



대략 이와 같은 과정이라고 보면 됩니다. 이 예제에서는 입력 및 출력 파일을 설정한 직후 처리 과정이 자동으로 진행된 다음 그 출력 파일을 ENVI 화면상에서 바로 보여주도록 되어 있습니다. 참고로 여기서 소개된 예제 코드의 내용을 보면 ENVI, ENVIRaster 등 IDL 프로그래머들 입장에서 볼 때 다소 생소한 항목들이 나옵니다. 이것들은 사실 ENVI API 프로그래밍에 대한 이해가 좀 필요한 부분입니다. 이와 관련해서는 ENVI의 도움말의 ENVI Programming 관련 내용 또는 아래 웹 링크의 내용을 참조하면 됩니다.


https://www.harrisgeospatial.com/docs/programmingguideintroduction.html

emboss_band1.pro
0.0MB
LIST