728x90

Pseudo Color 처리는 시각적으로 미묘하게 구분하기 어려운 부분을 해석하기 쉽게 만들어 주는 방식입니다. 그레이 이미지나 온도 및 깊이 등 단일 채널 이미지를 색을 이용하여 명확하게 표현하고자 할때 사용하는 데이터 시각화 기법입니다.

 

인간의 시각은 색상 대비(contrast)에는 민감하지만 상대적으로 밝기 대비에는 둔감합니다. 기술적으로는 단순할 수 있지만 그림에서처럼 의료 흑백 CT와 MRI, 열화상 이미지나 위성 영상등에 많이 활용됩니다. Pseudo Color 기법에도 여러 방식이 있으며 개별 개발환경에 맞춰 정의하고 활용할 수도 있습니다.

 

1) Color Look up Table(CLUT)

그레이 값을 특정 RGB 색상표로 변환될 수 있도록 정의

 

2) HSV (색상 Hue, 채도 Saturation, 명도 Value)

채도와 명도는 고정하고 밝기값을 색상에 매핑하는 방식이며 정밀한 색 조절 가능 

 

3) Intensity Slicing

특정 밝기 구간에 대해 고정된 RGB 색상으로 매핑 방식이며 의료 영상에서 활용

 

4) Rainbow Mapping

전체 색상 스펙트럼을 이용해 연속적인 색상 표현, 위성 영상 처리에 활용

 

5) Heatmap Color Mapping

열화상 등에서 활용하는 방식으로 낮은 값일 수록 파랑, 높은 값일 수록 빨강으로 표현

 

 

예를 들어 Heatmap의 경우 그레이 스케일 0~50(파랑), 51~100(초록), 101~150(노랑), 151~255(빨강)으로 범위별 지정을 통해 칼라맵으로 표현이 가능합니다. OpenCV의 applyColorMap() 함수를 활용하여 Pseudo Color 처리를 테스트 해 볼수 있으며, 입력은 8-bit 단일 채널 이미지 입니다. 당연히 결과는 3채널 칼라(BGR) 이미지이며, Colormap은 OpenCV에 정의된 코드(Jet, Hot, HSV, ... Rainbow 등)로 활용할 수 있습니다. 아래는 applyColorMap을 활용한 파이썬 코드이니 참고해 보시면 활용에 도움이 될 수 있습니다.

 

import cv2

# gray image read
gray_img = cv2.imread('gray.tif', cv2.IMREAD_GRAYSCALE)

# color map
color_jet = cv2.applyColorMap(gray_img, cv2.COLORMAP_JET)
color_hot = cv2.applyColorMap(gray_img, cv2.COLORMAP_HOT)

# results
cv2.imshow('Original', gray)
cv2.imshow('Jet', color_jet)
cv2.imshow('Hot', color_hot)

cv2.waitKey(0)
cv2.destroyAllWindows()
728x90

+ Recent posts