1강 / 20강

지도 한 장 — 붉은 점이 림프구다

H&E 슬라이드가 격자가 되기까지

지도 한 장 — 붉은 점이 림프구다
병리 슬라이드를 조각으로 자르고, 조각마다 기계가 예·아니오로 답했습니다. 그 답을 색으로 칠한 것이 TIL 지도입니다.

암 조직을 얇게 저며 유리판에 붙이고 헤마톡실린·에오신(H&E) 으로 물들이면, 세포핵은 보라색으로 세포질은 분홍색으로 보입니다. 병리학자는 이 슬라이드를 현미경으로 보며 진단을 내립니다.

그 그림 속에는 암세포만 있는 것이 아닙니다. 림프구 — 몸이 종양을 공격하러 보낸 면역세포 — 가 함께 보입니다. 작고 진하고 동그란 핵이 촘촘히 모여 있는 자리, 그것이 림프구예요.

이 림프구가 얼마나 들어와 있는지가 오래전부터 중요한 표지였습니다. 많이 들어온 종양이 더 나은 예후를 보인다는 보고가 여러 암종에서 나왔거든요. 그런데 "얼마나" 를 어떻게 셀까요?

지도의 색은 세 가지뿐입니다.

색RGB뜻
검정(0, 0, 0)조직이 없다 — 빈 유리판
파랑(0, 0, 255)조직은 있는데 림프구는 없다
빨강(255, 0, 0)이 조각에 림프구가 있다

그러니까 이 파일은 사진이 아닙니다. 판정 결과를 칠해 놓은 표예요. 픽셀 하나가 조직 50 µm 짜리 조각 하나에 해당합니다.

정말 세 가지 색뿐입니다. 중간색이 없어요 — 이미 판정이 끝난 그림이기 때문입니다.
Python 브라우저에서 실행

색 세 가지를 0 · 1 · 2 로 바꾸면 다루기 쉬워집니다. 이 강의에서 계속 쓸 til 꾸러미의 read_map() 이 하는 일이 그것뿐이에요.

def read_map(path):
    a = np.array(Image.open(path).convert("RGB"))
    R, G, B = a[:, :, 0], a[:, :, 1], a[:, :, 2]
    code = np.zeros(a.shape[:2], np.uint8)
    code[(R == 0)   & (G == 0) & (B == 255)] = 1   # 조직
    code[(R == 255) & (G == 0) & (B == 0)  ] = 2   # 림프구
    return code
칸 하나가 50 × 50 µm 니까, 조직 25,197칸은 대략 63 mm² 입니다.
Python 브라우저에서 실행
두 장을 나란히 놓으면 왜 이 숫자가 중요한지 가 한눈에 보입니다.
Python 브라우저에서 실행
실려 있는 지도 여덟 장을 하나씩 열어 보세요. 조각 수와 침윤률이 함께 나옵니다.
불러오는 중…
🤔 확인 문제
TIL 지도의 픽셀 하나가 뜻하는 것은?
🤔 확인 문제
이 지도에 중간색(예: 연분홍)이 없는 까닭은?