IDL/Direct Graphics

특정 화소들만 강조한 이미지의 표출 (DG 체계)

이상우_idl 2024. 6. 17. 15:53
728x90
반응형

어떤 특정한 조건을 내걸고 그 조건을 만족하는 화소들을 판별한 후 이미지 상에서 이러한 화소들만 특별히 강조하는 표출 방식에 관한 내용이 바로 얼마전의 게시물에서 소개된 바 있습니다. 여기서는 2차원 데이터를 흑백 계열 색상의 컬러테이블로 표출해놓은 상태에서 특정한 화소들만 붉은색으로 강조하여 표시하는 예제를 소개하면서 NG 체계 기준으로 두가지의 구현 방법을 소개하였습니다.

 

그런데 이러한 방식의 표출을 DG 체계에서도 구현할 수 있을까요? 사실 불가능하지는 않습니다. 다만 앞서 NG 체계 기준의 방법들의 경우는 원본 이미지를 먼저 표출하고 그 위에 NaN 값들이 포함된 이미지를 중첩하는 방식이었는데, 일단 DG 체계에서는 이러한 방식이 먹히지 않습니다. 왜냐하면 이미지 배열 내에 NaN 값이 있다해도 DG 체계에서는 NG 체계에서처럼 NaN 값인 화소가 투명하게 처리되지는 않기 때문입니다. 따라서 완전히 다른 접근 방식이 필요합니다. 물론 구체적인 방법에 있어서는 여러가지 아이디어들이 있을 수 있겠지만, 일단 제 생각에는 PLOTS 명령을 사용하는 방식이 나름 괜찮을 것 같다는 생각이 들었습니다. 그래서 그 방법을 지금부터 소개해보고자 합니다. 먼저 예제 데이터의 생성 및 조건에 의한 화소들의 선별 과정은 지난번 게시물에서와 동일하게 처리합니다.

 

data = HANNING(500, 500)*40+30+RANDOMU(-1, 500, 500)*8-4

diffs = ABS(data-50)
ww = WHERE(diffs LE 3, count, COMPLEMENT=wwn, /NULL)

 

그 다음에는 data 배열을 이미지로 표출하는 과정을 DG 체계 기반으로 다음과 같이 처리합니다.

 

WINDOW, XSIZE=500, YSIZE=500
DEVICE, DECOMPOSED=0
LOADCT, 0
TVSCL, data

 

이러한 과정에 의하여 이미지가 표출된 모습은 다음과 같습니다.

 

이제부터는 WHERE 함수로 선별된 화소들만 강조하여 표출하는 과정으로 가야 하는데, 앞서 언급했듯이 이러한 표출을 위하여 PLOTS 명령을 사용하고자 합니다. PLOTS 명령을 사용하는 것은 선별된 화소들을 일정한 심볼 형태로 표시하는 방식으로서, 어떻게 보면 NG 체계에서 SCATTERPLOT 함수를 사용하는 경우와 유사한 측면이 있습니다. 다만 PLOTS 명령의 특성상 표시하고자 하는 포인트들의 X 방향 및 Y 방향 위치 좌표 값들로 구성된 배열을 인수로 부여해야 합니다. 그 과정은 다음과 같습니다.

 

coords = ARRAY_INDICES(data, ww)
wwx = REFORM(coords[0, *])
wwy = REFORM(coords[1, *])
HELP, coords, wwx, wwy

 

이와 같이 앞서 WHERE 함수로 얻었던 결과인 ww를 ARRAY_INDICES 함수에 투입하여 2차원적인 좌표값들로 구성된 결과인 coords를 얻고 이를 다시 처리하여 X 및 Y 방향의 좌표값 배열들인 wwx, wwy를 얻습니다. HELP에 의하여 출력된 내용을 보면 다음과 같습니다.

 

COORDS          LONG      = Array[2, 20111]
WWX             LONG      = Array[20111]
WWY             LONG      = Array[20111]

 

여기서 숫자 20111은 앞서 WHERE 함수로 선별된 화소들의 갯수입니다. 이제 이 결과를 이용하여 20111개의 화소들만 강조하여 표시해봅시다. 여기서 PLOTS 명령이 등장하는데 그 과정은 다음과 같습니다.

 

DEVICE, DECOMPOSED=1
PLOTS, wwx, wwy, COLOR='0000FF'x, PSYM=6, SYMSIZE=0.1, /DEVICE

 

여기서는 강조될 화소들이 작은 크기의 사각형 심볼로 표시하도록 하였습니다. 다만 그 색상을 붉은색(Red)로 설정하는데 있어서 COLOR 키워드에 '0000FF'x라는 값을 부여하였는데, 이러한 색상 설정을 위하여 DECOMPOSED의 값을 1로 설정하였음을 유의해야 합니다. 참고로 DG 체계에서 단일 색상을 이와 같은 방식으로 설정하는 방법에 관해서는 관련 게시물을 참조하시면 됩니다. 어쨌든 표출의 결과는 다음과 같습니다.

 

이 모습은 앞선 게시물에서 NG 체계 기반으로 표출되었던 결과 그림과 거의 유사하게 느껴질 것입니다. 물론 아주 세세하게 들여다보면 미세한 차이가 약간은 있는데, PLOTS 명령에서 심볼의 크기를 좀 더 조절해보는 것이 필요할 수도 있습니다. 참고로 DG 체계에서 그림을 표출한 후 이를 그림 파일로 저장하고자 할 경우에는 다음과 같이 처리하는 것이 무난합니다. 다음은 PNG 형식의 파일로 저장할 경우의 예입니다.

 

cap = TVRD(/TRUE)
WRITE_PNG, 'image_and_pixels_dg.png', cap

 

어쨌든 DG 체계에서는 이러한 방식으로 처리하는 것이 어떨까 싶어서 그 방법을 이와 같이 공유해봅니다.

반응형