1강 / 20강
지도 한 장 — 붉은 점이 림프구다
H&E 슬라이드가 격자가 되기까지
암 조직을 얇게 저며 유리판에 붙이고 헤마톡실린·에오신(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 지도의 픽셀 하나가 뜻하는 것은?
해설 지도는 슬라이드를 50 µm 격자로 자른 뒤 조각마다 판정을 받아 만든 것입니다. 세포 하나가 아니라 조각 하나가 단위예요. 이 단위가 얼마나 중요한지는 4강에서 봅니다.
🤔 확인 문제
이 지도에 중간색(예: 연분홍)이 없는 까닭은?
해설 CNN 이 내놓는 것은 0~1 사이의 확률입니다. 그것을 어떤 문턱으로 잘라 0/1 로 만든 뒤 색을 칠했어요. 문턱을 긋는 그 결정이 3강의 주제입니다.