IDL/Image Processing

영상 처리에서 ROI의 활용법 [1]

이상우_idl 2013. 2. 18. 15:12
728x90
반응형

IDL에서의 영상(Image)의 처리에 있어서 ROI를 설정하고 이용하는 방법에 관하여 소개를 해볼까 합니다. ROI는 Region of Interest의 약자인데 거창한 뜻은 아니고 그냥 이미지상에서 내가 관심있어하는 일부 영역을 뜻합니다. 예를 들어, 이미지의 전체 크기가 1024X1024라 하더라도 내가 정말 관심있는 부분은 한가운데 300X300의 크기를 갖는 일부분이라면 그 일부분이 나에게는 ROI가 되는 셈입니다. 물론 ROI의 형태는 이와 같은 사각형(Square)외에도 원형, 타원형, 불규칙형 등 여러 종류가 있을 수 있습니다. IDL에서는 이미지를 대상으로 하여 이와 같은 ROI를 사용자가 지정할 수 있는 기능을 제공합니다. 그리고 단순히 ROI를 선택하는 것에서 그치지 않고, ROI로 선택된 부분영역에 대한 각종 정보들을 끄집어낼 수도 있습니다. 예를 들면 ROI의 면적, ROI내 화소값들의 평균값 등이 이에 해당됩니다.


ROI의 선택에 있어서는 사용자가 직접 수동으로 지정하는 방식 및 특정한 조건을 만족하는 영역을 자동으로 지정하는 방식이 있습니다. 먼저 수동으로 지정하는 방식부터 살펴보겠습니다. 먼저 예제로 사용할 이미지 데이터를 다음과 같이 하나 생성해봅시다. 이 이미지의 크기는 300X300이고, 화소값의 범위는 0~1입니다. 이미지의 크기에 맞는 그래픽창을 띄우고, TVSCL 명령으로 표출해보면 그 모습은 다음 그림과 같습니다.


IDL> data = HANNING(300, 300)

IDL> sz = SIZE(data, /DIM)

IDL> WINDOW, XSIZE=sz[0], YSIZE=sz[1]

IDL> TVSCL, data



이제 ROI를 수동으로 지정하기 위하여 XROI라는 명령을 사용해봅니다. 그러면 ROI의 설정을 위한 사용자 인터페이스(GUI)가 뜹니다.


IDL> XROI, BYTSCL(data)


단 여기서 한가지 유의할 점은 XROI 명령의 인자를 그냥 data가 아닌 BYTSCL(data)로 사용한 점입니다. 즉 바이트스케일링(Byte Scaling)을 거친 이미지 데이터를 인자로 사용해야만 GUI상에서 이미지의 표출이 제대로 이루어진다는 점을 감안해야 합니다. 어쨌든 이와 같은 명령을 실행하면 다음 그림과 같은 GUI가 나타나게 됩니다.



여기서 GUI의 상단을 보면 사각형, 타원형 등의 그림이 그려진 버튼들이 보입니다. 이 버튼들은 사용자가 선택하게 될 ROI의 기본 형태를 결정합니다. 사각형 버튼을 누른 상태에서 이미지상에서 마우스 왼쪽 버튼을 클릭하고 드래그한 다음 버튼을 놓으면 사각형의 ROI가 설정됩니다. 타원형일 경우도 그에 맞는 방식으로 ROI가 선택되고, Freehand 버튼을 누른 경우에는 마우스 왼쪽 버튼을 누른채 드래그한 불규칙한 형태의 영역이 그대로 ROI가 됩니다. 어쨌든 원하는 방식으로 ROI가 설정된 직후에는 또 다른 GUI가 뜨면서, 앞서 선택한 ROI에 관한 기본적인 정보들을 표시해줍니다. 다음 그림은 불규칙한 형태의 ROI를 선택한 상황의 모습입니다.


 



새롭게 뜬 GUI는 타이틀바의 제목이 'ROI information'입니다. 말 그대로 선택된 ROI에 관한 기본적인 정보들을 보여줍니다. 그래서 ROI의 면적, ROI내 화소값들의 최대값, 최소값, 평균값, 표준편차 등의 값들이 표시되는 것을 확인할 수 있습니다. 유용한 기능이긴 하지만 사실 지금 상황에서는 이 정보들이 그다지 도움이 안될 수도 있습니다. 왜냐하면 애초에 XROI 명령을 사용할 때 그 인자가 원래 이미지 데이터인 data가 아니라 바이트스케일 처리를 한번 거친 data였기 때문입니다. 따라서 ROI내 화소값들의 최대, 최소, 평균 등의 값들은 모두 바이트스케일이 된 화소값을 기반으로 하기 때문에, 원래의 값과는 차이가 있습니다. 따라서 ROI information 창에 표시된 정보들은 그냥 참고용으로 사용하고, ROI 자체의 기하학적 정보를 따로 저장한 다음 나중에 IDL에서 활용하는 것이 더 나을 수도 있습니다. 원래 ROI 인터페이스의 상단 맨 왼쪽에 디스켓 아이콘 모양을 한 버튼이 있는데 이 버튼을 누르면 현재 설정된 ROI의 기하학적 정보를 따로 저장할 수 있습니다. 저장되는 파일의 형식은 IDL의 고유 포맷인 .sav입니다. 이 버튼을 눌러 현재 설정된 ROI를 저장합니다. 저장될 파일명은 'regions.sav'로 기본 설정은 되어 있지만, 이름은 사용자 마음대로 얼마든지 바꿀 수 있습니다. 일단은 기본 파일명을 사용하여 저장하겠습니다.


이제 앞서 XROI로 띄웠던 GUI는 닫아줘도 됩니다. 지금부터는 따로 그래픽창을 띄워서 작업을 하게 됩니다. 이미 앞에서 이미지 크기에 맞는 그래픽창을 따로 띄워 이미지를 표출해놓은 상태이므로 이어서 작업을 하기로 합니다. 우선 앞서 XROI에서 저장했던 ROI 저장 파일을 다음과 같이 RESTORE 명령을 사용하여 복원합니다. 그러면 지금은 XROI 인터페이스가 사라진 상태이지만 이 때 설정했던 ROI의 정보를 IDL에서 다시 인식하게 됩니다.


IDL> RESTORE, 'regions.sav'


인식된 ROI 정보는 oROIs라는 이름으로 존재하게 되는데, 이는 일반적인 변수가 아니라 객체(Object)입니다. 따라서 이러한 종류의 객체에 맞는 처리방식이 필요합니다. '객체'라는 용어때문에 굳이 겁을 먹을 필요는 없습니다. 우선은 다음과 같이 DRAW_ROI 명령을 사용하여 ROI를 그래픽창에 표시해봅니다. 그러면 다음 그림과 같이 우리가 앞서 설정했던 ROI의 위치 및 모양과 똑같음을 확인할 수 있습니다.


IDL> DRAW_ROI, oROIs, COLOR=0, /LINE_FILL, /DEVICE



이제 다음 단계에서는 이 ROI에 해당되는 영역에 대한 다양한 정보들, 즉 기하학적인 정보 및 화소값들과 관련된 통계적인 정보들을 끄집에낼 차례입니다. 이 내용은 조만간 이어질 다음 회 글에서 계속해서 소개하도록 하겠습니다.

반응형