IDL/Image Processing

COLORTABLE 함수를 이용한 컬러테이블의 생성 [1]

이상우_idl 2016. 4. 29. 17:28
728x90
반응형

오늘 소개할 COLORTABLE 함수는 IDL 8.2.1 버전에서 처음 등장한 함수로서, 컬러테이블의 생성과 관련된 각종 편의성 기능을 제공하는 역할을 합니다. 사실 이 함수에 관해서는 전에도 한번 언급이 된 적이 있는데, 컬러테이블의 색상 순서를 뒤집어서 활용하는 방법에 관한 게시물에서 언급이 된 바 있습니다. 오늘은 이 함수의 또 다른 활용법을 소개하고자 합니다. 컬러테이블을 구성하는 주요색상들을 내가 직접 설정하여 컬러테이블을 생성하는 방법에 관한 내용인데, 커스텀 컬러테이블을 만드는 또 다른 방법이라고 보면 됩니다. 예를 들어, 컬러테이블을 구성하는 주성분이 되는 색상들이 노란색(Yellow)과 파란색(Blue) 두 개면서, 그 사이의 색상들은 이 두 색상을 부드럽게 이어주는 느낌으로 구성되는 컬러테이블을 만들어 볼 수 있는데요. COLORTABLE 함수를 사용하면 다음과 같이 간단하게 만들 수 있습니다.

 

ctb = COLORTABLE(['yellow', 'blue'])

 

이렇게 생성된 컬러테이블의 색상 구성을 확인해보기 위하여, 다음과 같이 이 컬러테이블을 활용하여 이미지와 컬러바를 표출해보기로 합시다.

 

data = HANNING(400, 400)

win = WINDOW(DIMENSIONS=[400, 500], /NO_TOOLBAR)

im = IMAGE(data, RGB_TABLE=ctb, POSITION=[0, 0.2, 1, 1], /CURRENT)

 

cbar = COLORBAR(TARGET=im)

 

여기서는 HANNING 함수를 사용하여 가상의 2차원 데이터를 생성한 다음, IMAGE 및 COLORBAR 함수를 활용하여 이미지 및 컬러바를 표출하였습니다. IMAGE 함수의 RGB_TABLE 속성에 대하여 앞서 COLORTABLE 함수로 얻은 ctb가 부여되어 있음을주목하시기 바랍니다. 그 결과는 다음 그림과 같습니다.

 

 

 

이 그림을 보면 앞서 우리가 COLORTABLE 함수로 생성한 컬러테이블이 어떤 색상 구성을 하고 있는가를 확인할 수 있습니다. 컬러 인덱스가 0~255의 범위이므로, 주요 성분이 되는 두 색상이 각각 0과 255에 대응되고, 그 사이의 나머지 색상들은 두 주요 색상의 R, G, B 값을 각 성분별로 선형 내삽하여 계산됩니다. 실제로 이 컬러테이블의 컬러 인덱스 구성을 R, G, B 성분별로 나눠서 보면 다음과 같습니다.

 

 

 

즉, 노란색에 해당되는 RGB는 [255, 255, 0]이고, 파란색에 해당되는 RGB는 [0, 0, 255]이며, 그 사이는 각 성분별로 선형 내삽에 의하여 RGB값들이 부여된다는 것을 알 수 있습니다. 그리고 주요 성분이 되는 색상에 대한 명시는 위와 같이 Yellow, Blue와 같은 색상 고유명으로 설정해도 되고, 아니면 RGB triplet을 그대로 사용해도 됩니다. 따라서 다음과 같이 사용해도 결과는 마찬가지입니다.

 

ctb = COLORTABLE([[255, 255, 0], [0, 0, 255]])

 

위의 예제에서는 주요 성분이 되는 색상이 두 개였지만 더 많은 색상들을 활용할 수도 있습니다. 다음과 같이 네 개의 주요 색상들을 사용하여 컬러테이블을 생성하고, 나머지 표출 과정은 위와 동일한 방식으로 진행하면 그 결과는 다음 그림과 같습니다.

 

ctb = COLORTABLE(['yellow', 'lime', 'blue', 'red'])

 

 

 

여기서는 주요 색상이 네 개이므로, 사이사이 구간은 세 개가 존재합니다. 따라서 0~255의 범위를 갖는 컬러 인덱스 값의 구간을 세 개로 분할하면 각 구간별로는 대략적으로 0~85, 86~170, 171~255와 같은 방식으로 인덱스가 나눠집니다. 실제로 RGB 성분별 인덱스 구성을 보면 다음 그림과 같습니다.

 

 

 

이와 같은 방식을 이용하면, 내가 지정한 주요 색상들을 반드시 포함하되 나머지 색상값들은 내삽에 의하여 알아서 지정되는 컬러테이블을 얼마든지 만들 수 있습니다. 따라서 IDL에서 기본 지원되는 75개의 컬러테이블 중 내가 원하는 색상 구성의 컬러테이블이 없을 경우에는 이러한 방법을 활용하면 됩니다. 다음 두 그림은 또 다른 색상들을 활용하여 생성한 컬러테이블로 동일한 방식의 표출을 해본 결과들입니다.

 

ctb = COLORTABLE(['yellow', 'lime', 'violet', 'magenta'])

 

 

 

ctb = COLORTABLE(['gold', 'green', 'navy', 'crimson'])

 

 

 

그리고 이와 같이 생성된 컬러테이블은 위의 예제와 같은 NG 체계의 그래픽 뿐 아니라 DG 체계에서도 활용이 가능합니다. 컬러테이블을 생성하는 것은 COLORTABLE 함수로 똑같이 하되, 그 이후에는 TVLCT 프로시저를 사용하여 이 컬러테이블을 불러온 다음 TV나 TVSCL과 같은 프로시저들을 사용하여 이미지 표출을 하면 됩니다. 위의 맨 처음 예제 컬러테이블을 사용하여 DG 체계에서 이미지의 표출 과정에 대한 예제 코드는 다음과 같습니다.

 

DEVICE, DECOMPOSED=0

WINDOW, XSIZE=400, YSIZE=400

TVLCT, ctb

 

TVSCL, data

 

반응형