Programming/AI & ML

[딥러닝을 활용한 의료 영상 처리 & 모델 개발] Part2-1. Pathology Data Reading with OpenSlide 실습 코드 리뷰

YeonJuJeon 2025. 1. 2. 18:35

목적: 병리학 데이터를 읽고 시각화


1. 라이브러리 설치 및 모듈 임포트

!apt-get install openslide-tools
!pip install openslide-python
import os
from pathlib import Path
from openslide import OpenSlide
from pprint import pprint
import matplotlib.pyplot as plt
  • openslide-tools: 병리학 데이터(W.S.I)를 읽기 위한 C 기반 도구.
  • openslide-python: OpenSlide 라이브러리의 Python 바인딩으로 이미지 데이터 처리 지원.
  • os: 파일 크기 확인 및 경로 작업에 사용.
  • Path: 파일 경로 탐색.
  • OpenSlide: 병리학 데이터(W.S.I) 파일 처리.
  • pprint: 메타데이터 출력 시 가독성을 높이기 위한 도구.
  • matplotlib.pyplot: 이미지 시각화 라이브러리.

2. 데이터 경로 설정 및 OpenSlide 객체 생성

BASE_PATH = Path('/content/drive/MyDrive/FastCampus/pathology_img')
path_img_path = list(BASE_PATH.glob('*/*'))[0]
slide = OpenSlide(path_img_path)
  • BASE_PATH 경로에서 모든 하위 디렉토리 탐색 후 첫 번째 파일을 OpenSlide 객체로 로드.
  • path_img_path: 탐색된 첫 번째 파일 경로.

3. 슬라이드 정보 출력 함수 정의

def show_path_info(slide):
    print("Patient's dimensions..:", slide.dimensions)  # 원본 이미지 크기(가로 x 세로).
    print("Patient's z level......:", slide.level_count)  # 해상도 레벨 개수.
    print("Patient's z dimension..:", slide.level_dimensions)  # 각 해상도 레벨의 이미지 크기.
  • 슬라이드의 주요 정보를 출력하는 함수 정의.

4. 파일 크기 및 슬라이드 정보 출력

print(f"file size: {round(os.path.getsize(path_img_path) / 1024 ** 2, 2)} MB")  # 파일 크기를 MB 단위로 출력.
show_path_info(slide)  # 슬라이드의 주요 정보 출력.
  • os.path.getsize: 파일 크기를 바이트 단위로 반환.
  • / 1024 ** 2: 파일 크기를 메가바이트(MB) 단위로 변환.

결과:

file size: 319.2 MB
Patient's dimentsions..: (69065, 68679)
Patient's z level......: 4
Patient's z dimentsion.: ((69065, 68679), (17266, 17169), (4316, 4292), (2158, 2146))

5. 메타데이터 출력

pprint(dict(slide.properties))  # 촬영 날짜, 장비 정보 등 메타데이터 출력.
  • slide.properties: OpenSlide 객체에 저장된 메타데이터를 딕셔너리 형태로 반환.

6. 최고 해상도에서 슬라이드 일부 읽기 및 시각화

region = (30000, 30000)  # 읽기 시작 좌표 (x, y).
level = 0  # 최고 해상도 레벨.
size = (255, 256)  # 읽을 영역의 크기 (가로 x 세로).
region = slide.read_region(region, level, size)

plt.figure(figsize=(20, 20))
plt.imshow(region)  # 이미지 시각화.
print(region.size)  # 읽은 이미지 크기 출력.
  • slide.read_region: WSI 데이터의 특정 영역을 읽는 메서드.
  • level=0: 최고 해상도로 이미지 읽기.


7. 중간 해상도에서 슬라이드 일부 읽기 및 시각화

region = (13000, 13000)  # 읽기 시작 좌표.
level = 2  # 중간 해상도.
size = (500, 500)  # 읽을 영역의 크기.
region = slide.read_region(region, level, size)

plt.figure(figsize=(20, 20))
plt.imshow(region)  # 이미지 시각화.
  • level=2: 중간 해상도로 이미지 읽기.
  • 읽은 영역이 고해상도보다 더 넓은 범위를 포함.


8. 최저 해상도에서 슬라이드 일부 읽기 및 시각화

region = (10000, 10000)  # 읽기 시작 좌표.
level = 3  # 최저 해상도.
size = (2158, 2146)  # 읽을 영역의 크기.
region = slide.read_region(region, level, size)

plt.figure(figsize=(20, 20))
plt.imshow(region)  # 이미지 시각화.
  • level=3: 최저 해상도로 이미지 읽기.
  • 더 넓은 영역을 포함하지만 세부 정보가 감소.