IDL/Image Processing

컬러테이블 뒤집어 사용하기

이상우_idl 2015. 5. 22. 09:30
728x90
반응형

IDL에서는 총 75종의 컬러테이블들이 준비되어 있고 필요에 맞게 선택하여 사용할 수 있습니다. 그런데 어떤 경우에는 컬러테이블상의 색상 구성은 마음에 들지만 색상의 순서를 뒤집에서 사용하고 싶을 때가 있습니다. 즉, 흑백 컬러테이블의 경우라면 원래는 앞쪽이 검은색이고 뒤쪽이 흰색이지만 뒤집어서 앞쪽을 흰색으로 하고 뒤쪽을 검은색으로 하고 싶은 경우입니다. 그럴 경우에는 말 그대로 컬러테이블을 뒤집어서 사용하면 되는데, 비교적 간단한 방법으로 해결 가능합니다. 물론 Direct Graphics 체계에서와 New Graphics 체계에서의 방법이 서로 약간 다른데, 두 경우 모두에 대하여 소개를 해보겠습니다.


설명을 위하여 사용할 예제 데이터는 다음과 같이 HANNING 함수를 사용한 400X400의 2차원 데이터로 사용하겠습니다. 그래픽창의 크기 설정에 사용하기 위하여 다음과 같이 SIZE 함수로 가로 및 세로 크기를 가져옵니다. 먼저 DG 체계에서의 방법부터 소개를 해보기로 합니다. 다음과 같이 WINDOW 명령으로 그래픽창을 데이터의 크기에 맞게 띄우고 67번 컬러테이블을 사용하여 TVSCL로 표출을 하면 됩니다. 다만 여기서는 그래픽창을 가로 방향으로 길게 했는데, 잠시 후 컬러테이블을 뒤집은 결과를 그 옆에 표출하기 위하여 공간을 미리 마련해둔 것입니다. 하여간 일단 67번 컬러테이블의 색상 순서를 그대로 활용하여 표출한 모습은 다음 그림과 같습니다.


data = HANNING(400, 400)

sz = SIZE(data, /DIM)

DEVICE, DECOMPOSED=0

WINDOW, 0, XSIZE=2*sz[0], YSIZE=sz[1], RETAIN=2

LOADCT, 67

TVSCL, data, 0



이번엔 67번 컬러테이블의 색상 순서를 뒤집어보겠습니다. 이 과정은 다음과 같이 단 두 줄의 명령으로 해결됩니다.


TVLCT, r, g, b, /GET

TVLCT, REVERSE(r), REVERSE(g), REVERSE(b)


주목할 점은 두 줄 모두 TVLCT라는 명령이 사용된 것인데요. 첫번째 TVLCT에서는 현재 사용중인 67번 컬러테이블을 구성하는 색상들을 RGB로분해한 각 채널별 값들을 r, g, b라는 배열로 가져오게 되며 이를 위하여 /GET이라는 키워드가 함께 사용되었습니다. 그리고 두번째 TVLCT에서는 앞서 가져온 r, g, b를 REVERSE 함수를 사용하여 뒤집은 채로 다시 컬러테이블에 반영하게 됩니다. 즉 /GET이란 키워드를 사용하면 RGB 채널별 색상값들을 가져오지만, /GET를 사용하지 않을 경우에는 내가 직접 RGB 채널별 색상값을 적용하겠다는 의미입니다. 이와 같이 컬러테이블 셋팅을 뒤집은 후 그 결과를 그래픽창의 오른쪽에 다음과 같이 TVSCL로 표출하면그 결과는 다음 그림과 같습니다.


TVSCL, data, 1



이번에는 NG 체계에서의 방법을 소개해보겠습니다. 다음과 같이 WINDOW 함수를 사용하여 그래픽창을 가로로 길게 하여 띄운 다음, IMAGE 함수를 사용하여 그래픽창의 왼편에 67번 컬러테이블을 원래대로 사용한 결과를 표출합니다. NG 체계에서는 컬러테이블을 RGB_TABLE이라는 속성에 대하여 컬러테이블 번호를 부여하여 설정합니다. 그리고 LAYOUT이라는 속성은 그래픽창에서 섹터를 나누고 해당 섹터에 원하는 그래픽 개체를 표출하는 방법으로 사용됩니다. 여기서는 섹터를 2X1로 나누고 거기서 1번 섹터에 표출하란 의미입니다. 일단 여기까지의 결과는 다음 그림과 같습니다.


win = WINDOW(DIMENSIONS=[2*sz[0], sz[1]])

im1 = IMAGE(data, RGB_TABLE=67, MARGIN=0, /CURRENT, LAYOUT=[2, 1, 1])



이제 컬러테이블을 뒤집고 그 결과를 2번 섹터에 표출하기 위해서는 다음과 같이 해주면 됩니다. 보시다시피 단 한 줄입니다. 꽤 간단하죠?


im2 = IMAGE(data, RGB_TABLE=COLORTABLE(67, /REVERSE), MARGIN=0, $

  /CURRENT, LAYOUT=[212])


여기서 주목할 부분은 RGB_TALBE 속성에 부여된 값을 보니 그냥 숫자 67이 아닌 COLORTABLE이라는 요상한 함수가 등장하였다는 점입니다. 사실 이 함수는 IDL 8.2에서 처음 등장한 그래픽 함수로서 컬러테이블 설정과 관련한 다양한 기능을 수행하는데요. 일단 오늘은 이렇게 컬러테이블을 뒤집는 행위를 /REVERSE 키워드를 사용하여 간단하게 수행한다는 점만 언급해두기로 합시다. 이 COLORTABLE 함수에 관해서는 주목할만한 특징들이 좀 더 있으니 나중에 따로 다뤄보기로 하겠습니다. 어쨌든 이 표출 결과는 다음 그림과 같습니다.



오늘은 이와 같이 컬러테이블을 뒤집어서 사용하는 방법을 DG, NG 체계 모두에 대하여 소개해보았습니다.

반응형