IMAGE 함수는 NG(New Graphics) 체계에서 이미지를 표출할 때 사용하는 기능입니다. 아마 유저들께서도 잘 아시고 자주 사용하시는 기능일 것으로 생각합니다. 제가 이 블로그에서 올린 여러 게시물들에서도 광범위하게 사용이 되었고 자주 언급도 했었습니다. 사실 오늘 소개하고자 하는 내용은 이 IMAGE 함수를 사용하여 이미지를 표출하는데 있어서 미처 간과하기 쉬운 유의사항에 관한 것입니다. 이 이슈는 표출의 대상이 되는 이미지 데이터의 자료형(Data Type) 및 값 범위(Range)와 직접적으로 관련된 것인데요. 지금부터 예제와 함께 살펴보도록 하겠습니다. 먼저 예제 데이터를 다음과 같이 생성합니다.
data = BYTE(HANNING(400, 400)*100)
HELP, data
PRINT, MIN(data), MAX(data)
여기서는 data라는 2차원 배열을 생성하고 관련 정보들까지 출력되도록 하였습니다. 출력된 내용을 보면 다음과 같습니다.
DATA BYTE = Array[400, 400]
0 100
이와 같이 크기는 400x400이고 자료형은 바이트(Byte)형이며 값 범위는 0~100입니다. 이제 IMAGE 함수를 이용하여 이 데이터를 이미지 형태로 표출해봅시다. 그 과정은 다음과 같습니다.
win = WINDOW(DIMENSIONS=[400, 500], /NO_TOOLBAR)
im = IMAGE(data, RGB_TABLE=34, MARGIN=[0, 0.2, 0, 0], /CURRENT)
cb = COLORBAR(TARGET=im)
여기서는 그래픽창을 먼저 띄우고 IMAGE 함수를 사용하여 표출하는데 있어서 34번 컬러테이블을 사용하였습니다. 그리고 컬러바를 하단에 표시하기 위하여 COLORBAR 함수도 사용하였습니다. 표출된 모습은 다음과 같습니다.
그냥 얼핏 봐서는 별로 주목할 부분이 없어보일 수도 있지만, 사실 이 그림에서는 몇가지 눈여겨봐야할 특징들이 있습니다. 가장 먼저 컬러바에서 보이는 색상들의 종류와 실제로 이미지 상에서 사용된 색상들의 종류를 비교해봅시다. 그러면 이미지 상에서 사용된 색상들의 종류가 컬러바 상에서 보이는 색상들에 비하여 훨씬 덜 사용되었음을 알 수 있습니다. 정확히 말하면 컬러바 상에서 0~100의 범위에 해당되는 색상들만 사용된 것입니다. 즉 이것은 34번 컬러테이블을 구성하는 0~255의 색상값들 중 0~100의 범위만 사용되었다는 뜻입니다. 그 이유는 표출 대상 데이터인 data라는 배열의 자료형이 바이트(Byte)형이기 때문입니다. 즉 바이트형의 배열을 IMAGE 함수로 표출할 경우에는 배열 값 범위 자체가 그대로 색상값 범위로 반영됩니다. 여기서는 data 배열의 값 범위가 0~100이기 때문에 색상값 역시 0~100의 범위만 반영된 것입니다. 만약 data 배열의 값 범위가 다를 경우에는 반영되는 색상들의 범위도 달라집니다. 예를 들어 맨 처음에 data 배열을 정의했던 부분을 다음과 같이 변경해봅시다.
data = BYTE(HANNING(400, 400)*230)
이렇게 하면 data 배열의 자료형은 여전히 바이트형이지만 값 범위는 0~230이 됩니다. 이후의 표출 과정은 그대로 사용하면 됩니다. 이 때 표출된 모습은 다음과 같습니다.
앞서 맨 처음에 값 범위가 0~100이었던 경우와 비교하면 색상들이 훨씬 더 많이 사용되었음을 알 수 있습니다. 여기서는 data 배열의 값 범위가 0~230이기 때문에 34번 컬러테이블에서 색상값 0~230의 범위가 반영된 것입니다. 그래서 색상값 230에 해당되는 오렌지색까지만 사용이 되었으며, 물론 그 너머에 있는 붉은색까지는 사용되지 않았습니다. 어쨌든 이와 같이 배열의 값 범위와 적용된 색상값의 범위가 일치하는 것은 배열 자체가 바이트(Byte)형 배열이기 때문입니다. 따라서 다시 정리한다면, IMAGE 함수에 투입되는 이미지 데이터 배열의 자료형이 바이트(Byte)형일 경우에는 배열 값 범위가 액면 그대로 색상값으로 반영된다는 점을 유념해야 합니다.
이번에는 IMAGE 함수에 투입되는 배열의 자료형이 바이트(Byte)형이 아닌 다른 경우들도 살펴봐야 합니다. 즉 정수형(Integer) 또는 실수형(Float)인 경우들인데요. 먼저 배열 data를 정의하는 부분을 다음과 같이 변경해봅시다.
data = HANNING(400, 400)*100
이 때 HELP 및 PRINT에 의하여 출력되는 내용을 보면 다음과 같습니다.
DATA FLOAT = Array[400, 400]
0.00000 100.000
이와 같이 이번에는 배열 data가 실수형 배열로 정의되었고 값 범위는 0~100입니다. 그리고 이후의 표출 과정은 역시 그대로입니다. 표출의 결과는 다음과 같습니다.
이 그림을 잘 보면 앞서 data가 바이트형 배열이었을 경우와는 분명히 다릅니다. 즉 이 그림에서는 34번 컬러테이블의 색상들이 모두 사용되었습니다. 즉 0~255 전체 범위의 모든 색상값들이 빠짐없이 사용된 모습입니다. 그리고 배열 data가 실수형이며 값 범위가 0~100이라는 점을 함께 주목해야 합니다. 결국 이것이 의미하는 것은, IMAGE 함수에 투입되는 이미지 데이터 배열의 자료형이 실수형일 경우에는 배열 값 범위가 원래 어떻든간에 컬러테이블의 모든 색상들(0~255)이 사용된다는 것입니다. 만약 data의 자료형은 그대로 실수형인 상태에서 값 범위만 달라진다면 어떻게 될까요? 이를 확인하기 위하여 배열 data를 다음과 같이 정의해봅시다.
data = HANNING(400, 400)*200
여기서 정의된 배열 data는 실수형 배열이고 값 범위는 0~200이 됩니다. 즉 앞선 예제에서는 범위가 0~100이었는데 이번에는 0~200으로 늘어난 것입니다. 실수형이고 값 범위가 0~200인 이 데이터가 표출된 모습은 다음과 같습니다.
이 그림을 보면 우리가 바로 앞서 값 범위가 0~100인 데이터를 표출했던 경우와 차이가 거의 나지 않습니다. 정확히 얘기하면, 이미지에서 사용된 색상들이 컬러테이블의 모든 색상들(0~255)이란 점은 동일합니다. 다만 하단의 컬러바에 표시된 데이터 값 범위가 아까는 0~100이었지만 이번에는 0~200이 되었다는 차이 뿐입니다. 결국은 앞서 이미 언급했듯이 IMAGE 함수에 투입되는 이미지 데이터 배열의 자료형이 실수형일 경우에는 배열 값 범위가 원래 어떻든간에 표출에 있어서 컬러테이블의 모든 색상들(0~255)이 사용된다는 규칙이 적용된 모습이라고 볼 수 있습니다. 그리고 이러한 특성은 이미지 데이터의 자료형이 정수형인 경우에도 마찬가지입니다. 즉 IMAGE 함수에 투입되는 이미지 데이터 배열의 자료형이 정수형일 경우에도 배열 값 범위가 원래 어떻든간에 표출에 있어서 컬러테이블의 모든 색상들(0~255)이 사용된다는 규칙은 동일하게 적용됩니다. 이러한 경우에 대해서는 다음과 같이 배열 data를 정수형 배열로 정의하여 테스트해볼 수 있습니다.
data = FIX(HANNING(400, 400)*100)
이 때 HELP 및 PRINT에 의하여 출력되는 내용은 다음과 같습니다.
DATA INT = Array[400, 400]
0 100
이와 같이 이번에는 배열 data가 정수형 배열로 정의되었고 값 범위는 0~100입니다. 그리고 이후의 표출 과정은 역시 그대로입니다. 표출의 결과는 다음과 같습니다.
이 그림을 잘 보면 앞서 data를 실수형 배열로 정의했던 경우와 동일합니다. 이 그림에서도 34번 컬러테이블의 색상들이 모두 사용되었습니다. 즉 0~255 전체 범위의 모든 색상값들이 빠짐없이 사용된 모습입니다. 그리고 배열 data가 정수형이며 값 범위가 0~100이라는 점을 함께 고려했을 때 결국 이것이 의미하는 것은, IMAGE 함수에 투입되는 이미지 데이터 배열의 자료형이 정수형일 경우에도 배열 값 범위가 원래 어떻든간에 컬러테이블의 모든 색상들(0~255)이 사용된다는 것입니다. 물론 값 범위를 변경한 배열을 사용하더라도 마찬가지입니다.
data = FIX(HANNING(400, 400)*200)
이 경우의 결과는 다음과 같습니다.
이미지 배열의 값 범위는 0~200으로 변경되었지만 IMAGE 함수로 표출된 이미지의 모습은 앞서 범위가 0~100인 경우와 동일합니다. 다만 하단의 컬러바에 표시된 값 범위가 0~200으로 변경되었다는 것 뿐입니다.
따라서 여태까지 살펴본 내용을 정리해보면 다음과 같습니다.
1) IMAGE 함수에 투입되는 이미지 데이터 배열의 자료형이 바이트(Byte)형일 경우에는 배열 값 범위가 액면 그대로 색상값으로 반영된다.
2) IMAGE 함수에 투입되는 이미지 데이터 배열의 자료형이 바이트(Byte)형이 아닐 경우에는 배열 값 범위가 원래 어떻든간에 컬러테이블의 모든 색상들(0~255)이 사용된다.
위에서 제시된 예제들은 이미지 배열의 자료형이 바이트형, 실수형, 정수형인 경우들로 나눠서 제시되었습니다. 하지만 배열 내 값들을 색상으로 반영하는데 있어서 IMAGE 함수가 작동하는 방식은 결국 이미지 배열의 자료형이 바이트형이나 또는 바이트형이 아니냐로 구분된다고 보면 됩니다. 그렇기 때문에 IMAGE 함수를 사용하여 배열 데이터를 이미지로 표출하는 작업을 하는데 있어서는 가장 먼저 그 배열 데이터의 자료형 및 값 범위가 어떠한가에 대하여 확인을 먼저 하는 것이 필수적입니다. 이러한 확인이 선행되지 않으면 이후에 표출된 결과를 해석하는데 있어서 엉뚱한 해석이 나올 수도 있습니다. 이러한 점을 꼭 유념하시기 바랍니다.
사실 프로그래밍이라는 작업에 있어서는 이미지 표출 뿐만 아니라 다른 종류의 처리 및 분석에 있어서도 이와 같이 대상 데이터에 대한 면밀한 사전 진단이 사전에 필요하다는 것은 어차피 마찬가지입니다. 그러한 일반적인 유의사항이 오늘 소개한 IMAGE 함수를 이용한 이미지 표출이라는 작업에 있어서도 반드시 필요하다는 점을 잘 기억해두시길 바랍니다.
'IDL > New Graphics' 카테고리의 다른 글
3차원 큐브 데이터의 등위면(Isosurface) 산출 및 표출 (0) | 2021.08.19 |
---|---|
NG 체계 플롯에서 타이틀 문자의 세부 설정 (0) | 2021.08.09 |
NG 체계에서 ConvertCoord 메서드의 활용 (0) | 2021.05.04 |
NG 체계에서 Select 메서드의 활용 (0) | 2021.03.23 |
색상을 채운 플롯(Filled Plot)의 표출 [3] (0) | 2021.03.03 |