dicom 파일 내 이미지에 환자정보등이 들어가서 지워야 할 상황에 사용할 수 있는 코드입니다.
주의
리눅스 환경에서 돌려야 하며, 아나콘다를 이용해 GDCM을 설치해야 합니다. (흑백은 그냥 잘 돌아갑니다. 색상이 들어간 이미지를 처리할 때 필요합니다.) GDCM 설치 : conda install gdcm -c conda-forge |
환경 세팅 순서
리눅스 : (아나콘다 설치 -> 가상환경에 명령어로 gdcm 설치 -> 커널 등록 -> 주피터 노트북이나 랩에서 해당 커널을 선택 후 사용) 윈도우 : docker 설치 -> 리눅스 이미지 받기 -> 8000번 포트(jupyter hub 기준)로/필요한 폴더 마운트 해서 이미지 run-> 위의 리눅스 과정 진행 |
저에게 도커 파일을 받으신 경우에는
1. 도커 데스크탑 설치 및 실행 2. 시작 -> 명령 프롬프트 -> cd [파일을 받은 폴더] 3. docker load -i bcy88/ubuntu_jupyter-image.tar 4. docker run -it -p 8000:8000 -v 윈도우와 공유할폴더:리눅스 내에서 보여줄 폴더 bcy88/ubuntu_jupyter-image.tar 5. ./jupyter.sh 6. 웹브라우저 켜기(크롬 추천) -> 주소창에 localhost:8000 |
코드
import pydicom
from PIL import Image
import matplotlib.pyplot as plt
%matplotlib inline
#파일명 부분 편집
f_dcm = pydicom.dcmread('/home/mount/docker_share/deidentify/test/Exported20200515/image-00000.dcm')
print(f'디바이스 시리얼 : {f_dcm.DeviceSerialNumber}')
print(f'이미지 크기 : {f_dcm.pixel_array.shape}')
# 이미지 확인
plt.rcParams["figure.figsize"] = (10.24,12.80)
plt.imshow(temp_img)
# 케이스별 필터 위치 지정 (상,하,좌,우)
def case_selector(dcm_file):
if case_router(dcm_file) == 1 :
return [
(100,240,0,200),
(650,750,1100,1280)
]
else :
return 999
# 케이스 판별 기준
# 이 코드에서는 장비 시리얼 번호와 이미지 크기를 이용함
def case_router(dcm_file):
if ((dcm_file.DeviceSerialNumber == '073-226') and (dcm_file.Rows == 1024) and (dcm_file.Columns == 1280) ):
return 1
else:
return 999
# 이미지를 자르는 모듈
def image_cutter(y_start,y_end,x_start,x_end):
if len(f_dcm.pixel_array.shape) == 3:
size_x, size_y, _ = f_dcm.pixel_array.shape
temp_img[y_start:y_end,x_start:x_end,:] = 0
else :
size_x, size_y = f_dcm.pixel_array.shape
temp_img[y_start:y_end,x_start:x_end] = 0
# 실제 작동 부분
for y_start, y_end, x_start, x_end in case_selector(f_dcm):
image_cutter(y_start,y_end,x_start,x_end)
# 결과물
plt.imshow(temp_img)
자르기만 하는건 그냥 슬라이싱이라서 패스함. 첨부한 ipynb 파일에는 들어가있음
'반치용 > 문제해결(trouble shooting)' 카테고리의 다른 글
리액트에서 json을 못불러 올 때 대처법 (0) | 2020.11.10 |
---|---|
도커 컨테이너 내부 시간 맞추기 (datetime / date / kst ) (0) | 2020.11.09 |
[파이썬]dicom 파일 헤더 비식별화 multi processing (0) | 2020.05.28 |
[파이썬]dicom 파일 비식별화 예제 (기본) (0) | 2020.05.28 |
convert voc to yolo (xml to yolo, xml to txt) (1) | 2020.05.13 |
댓글