2022-02-21- 의료용 DCM file 변환

Jinwuk Admin이(가) 약 3년 전에 추가함

2022-02-21- 의료용 DCM file 변환

[toc]

  1. 목적

- 의료용 X-ray 영상인 dcm 파일 (DICOM image) 을 JPG 혹은 PNG로 무손실 암축해제하는 것이 목적
- 이를 Opensource로 무손실 압축 해제하도록 한다.

  1. Working Directory
    -Only Linux

~~
/Works/python_work_2022/ai_data/dcm_test/Sample/
/Works/python_work_2022/ai_data/dcm_test/Sample/mritopng-master
~
~

  1. dcminfo in Linux

ffmpeg 및 dcminfo를 사용하여 변경한다. 먼저 dcminfo를 Ubuntu에 설치한다1.

~~
sudo apt update
sudo apt install libgdcm-tools
~
~

설치는 안정적으로 되었다. 해당 홈 페이지2의 경우 더 많은 정보들이 있으면 Python과도 함께 사용이 가능한 것으로 보인다.
무엇보다 JPEG lossless, JPEG2000등과도 사용이 가능하다.

Ubuntu PC에 다음과 같이 설치 하였다.
- Working directory는 다음과 같다.
~~
/Works/python_work_2022/ai_data/dcm_test/Sample$
~~~

DICOM 사이트3 을 참조한다.
사용법은 간단하다.
~~
gdcminfo 01.dcm
~
~

결과는 다음과 같다.

~~
sderoen@sderoen-System-Product-Name:
/Works/python_work_2022/ai_data/dcm_test/Sample$ gdcminfo 01.dcm

MediaStorage is 1.2.840.10008.5.1.4.1.1.1 [Computed Radiography Image Storage]
TransferSyntax is 1.2.840.10008.1.2.1 [Explicit VR Little Endian]
NumberOfDimensions: 2
Dimensions: (1994,2430,1)
SamplesPerPixel :1
BitsAllocated :16
BitsStored :12
HighBit :11
PixelRepresentation:0
ScalarType found :UINT16
PhotometricInterpretation: MONOCHROME2
PlanarConfiguration: 0
TransferSyntax: 1.2.840.10008.1.2.1
Origin: (0,0,0)
Spacing: (0.175,0.175,1)
DirectionCosines: (1,0,0,0,1,0)
Rescale Intercept/Slope: (0,1)
Orientation Label: AXIAL
~~~

11 비트 시스템으로 된 전형적인 HighBit High Resolution 영상이다.
해상도가 거지 같다. 2로 밖에 나누어 지지 않는다.
채널은 1채널이므로, 추가 해석이 들어가는 2채널이 필요하다.

  1. dcmconv in Linux

gdcm에는 이것외에 gdcmconv tool이 존재한다4.
~~
gdcmconv [options] file-in file-out
~
~

이를 jpeg-LS으로 바꾸어 보자
~~
gdcmconv -l 01.dcm 01.jpg
~
~
바꾸어 지지 않는다. Output도 똑같은 .dcm 일때만 변경이 된다.

따라서 먼저 다음과 같이 Raw File로 변경한다.
~~
gdcmraw 01.dcm 01_YBR_full_422.raw
~
~

Raw File 변경은 잘 이루어졌다.

  1. ffmpeg 사용

다음의 ffmpeg 명령어를 사용하여 변환을 시도하였으나 잘 되지 않았다.
vf 옵션 이후의 if mod 부분에서 에러가 발생한다.
기록 차원에서 남겨둔다.

- Original
~~
ffmpeg -y -f rawvideo -pix_fmt yuyv422 -video_size 600x430 -i YBR_FULL_422.raw -vf format=yuv422p,geq=lum='if(mod(X,2),cb((X-1)/2,Y),p(X,Y))':cb='lum(X*2+1,Y)':cr='p(X,Y)' rgb24.ppm
~
~

- My Attempt
~~
ffmpeg -y -f rawvideo -pix_fmt yuyv422 -video_size 1994x2430 -i 01_YBR_full_422.raw -vf format=yuv422p,geq=lum='if(mod(X,2),cb((X-1)/2,Y),p(X,Y))':cb='lum(X*2+1,Y)':cr='p(X,Y)' rgb24.ppm
~
~

  1. mritopng : Python 기반

mritopng5를 사용하여 변환을 시도해본다,.

먼저 해당 github page에서 소개한 대로 install을 시도하자 에러가 뜬다.
pip 버전이 너무 낮아서였다.
- 다음과 같이 python3 -m pip install --upgrade pip 를 사용하여 업그레이드 한다.
~~
sderoen@sderoen-System-Product-Name:
/Works/python_work_2022/ai_data/dcm_test/Sample/mritopng-master$ python3 -m pip install --upgrade pip

Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: pip in /home/sderoen/.local/lib/python3.8/site-packages (21.2.4)
Collecting pip
Downloading pip-22.0.3-py3-none-any.whl (2.1 MB) |████████████████████████████████| 2.1 MB 11.5 MB/s
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 21.2.4
Uninstalling pip-21.2.4:
Successfully uninstalled pip-21.2.4
Successfully installed pip-22.0.3
sderoen@sderoen-System-Product-Name:~/W
~~~

- Python 가상 환경에서는 적절한 Package가 모두 깔려 있다.
- python 환경은 3.8.8 이어야 한다.
- Linux에서는 다음과 같이 pytorch17 환경이다.

~~
source /usr/bin/python-env3.8/pytorch17/bin/activate
~
~

- 해당 환경에서 다음과 같이 정상적으로 관련 package가 정상적으로 install 된다.
~~
pip3 install -r requirements.txt
~
~
- 결과
~~~
pip3 install -r requirements.txt Requirement already satisfied: numpy>=1.14.1 in /usr/bin/python-env3.8/pytorch17/lib/python3.8/site-packages (from -r requirements.txt (line 1)) (1.20.2)
Collecting pydicom==1.0.2
Using cached pydicom-1.0.2.tar.gz (6.7 MB)
Preparing metadata (setup.py) ... done
Collecting pypng==0.0.18
Downloading pypng-0.0.18.tar.gz (377 kB) |████████████████████████████████| 377 kB 12.2 MB/s
Preparing metadata (setup.py) ... done
Collecting nose
Downloading nose-1.3.7-py3-none-any.whl (154 kB) |████████████████████████████████| 154 kB 53.0 MB/s
Building wheels for collected packages: pydicom, pypng
Building wheel for pydicom (setup.py) ... done
Created wheel for pydicom: filename=pydicom-1.0.2-py3-none-any.whl size=6678818 sha256=92a65c008dd6e3157f1c6c62da3f29025ae944c4f3eeb1e5b280b4e8f0edc362
Stored in directory: /home/sderoen/.cache/pip/wheels/92/96/6b/5c87f9cca6a573e61098a7ee650a4379ce07d937620955ccc3
Building wheel for pypng (setup.py) ... done
Created wheel for pypng: filename=pypng-0.0.18-py3-none-any.whl size=31424 sha256=02144ddd33ef1328d60c8b4677202e38b8fbb61cf2b010a0114f6c57599a8910
Stored in directory: /home/sderoen/.cache/pip/wheels/fa/30/83/f204e214073bf4d84bb029093dade34f7521df92aed3faa313
Successfully built pydicom pypng
Installing collected packages: pypng, pydicom, nose
Successfully installed nose-1.3.7 pydicom-1.0.2 pypng-0.0.18
WARNING: You are using pip version 21.3.1; however, version 22.0.3 is available.
You should consider upgrading via the '/usr/bin/python-env3.8/pytorch17/bin/python3 -m pip install --upgrade pip' command.
~~~

- 다음 명령어로 python 코드를 setup 한다.
~~
python setup.py install
~
~

- 사용법은 간단하다.
~~
mritopng ../01.dcm ../01_mri2png.png
~
~

- 다음과 같이 변경된 png 파일을 볼 수 있다.
![](http://jnwhome.iptime.org/img/research/2022/01_mri2png.png)

  1. Note
    - Python으로 된 코드를 python Library 및 실행파일로 만들어 사용하는 방법을 해당 프로젝트6에서 잘 알 수 있다.

~~~
Using it as a Library
It's pretty easy to get up and running with mritopng in your own project

import mritopng

  1. Convert a single file with auto-contrast
    mritopng.convert_file('/home/user/DICOM/SCAN1', '/home/user/output.png', auto_contrast=True)
  1. Convert a whole folder recursively
    mritopng.convert_folder('/home/user/DICOM/', '/home/user/PNG/')
    ~~~
  1. Issues

- PNG 파일로 보내면서 8 bit RGB 변환은 가능하나, 실제로는 하나의 단일 channel 영상이므로 2개의 채널이 무의미하다.
- 12 비트 의료 영상에 대한 기존 인공지능 프레임 워크의 접근 검토
- 8 bit 3 ch 접근의 타당성 (실제로는 12비트 1 채널)
- 비트 심도(Bit depth)에 따른 AI 인식률의 감도는 어느 정도인가.
- 한 병원 내에서도 서로 다른 기기간의 특성을 Cover 할 수 있을지.
- 연합학습적 접근 필요
- 개인 유출 방지를 극대화 할 수 있는 연합학습 방법론 도출
- 병변 Segmentation 방법론 도출
- GAN + VAE 및 병변 Segmentation을 위한 추론 엔진 도출

- Python을 사용하여 해당 영상에 대한 1차적인 Processing이 가능함을 확인하였다.
- D:\Work_2022\ai_data\999_temp\test01.py 참조

  1. Reference
    [1] https://www.howtoinstall.me/ubuntu/18-04/libgdcm-tools/
    [2] http://gdcm.sourceforge.net/wiki/index.php/Main_Page
    [3] http://gdcm.sourceforge.net/html/gdcminfo.html
    [4] http://gdcm.sourceforge.net/html/gdcmconv.html
    [5] https://github.com/danishm/mritopng

클립보드 이미지 추가 (최대 크기: 977.563 MB)