ํด๋ ๋ด์ dicom ํ์ผ๋ค์ nifti ํ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
https://github.com/icometrix/dicom2nifti
์ด๋ ๊ฒ ํธ๋ฆฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์๋ค๋.. ์ญ์ ํ์ด์ฌ์ ์ฐพ์ผ๋ฉด ํธ๋ฆฌํ ๊ฒ๋ค์ด ๋๋ฌด ๋ง๋ค
๊ทธ๋์ ์ผ์ผ์ด ์ ์ฒ๋ฆฌํ๋๊ฑด ๋จธ๋ฆฌ๊ฐ ๋ฉ์ฒญํ๋ฉด ์์ด ๊ณ ์ํ๊ธฐ ๋๋ฌธ..
Install
conda:
conda install -c conda-forge dicom2nifti
pip:
pip install dicom2nifti
Usage
command line์์ ๋ค์๊ณผ ๊ฐ์ด ์ด์ฉํ ์ ์๋ค. ์ฌ์ฉ๊ฐ๋ฅํ option๋ค์ github์ด๋ [-h] option ์ฐธ๊ณ .
dicom2nifti dicom_directory output_directory
ํน์ Python ๋ด๋ถ์์ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.
import dicom2nifti
dicom2nifti.convert_directory(dicom_directory, output_directory)
dicom_directory
๋ dicom ํ์ผ๋ค์ด ๋ด๊ฒจ์๋ ๊ฒฝ๋ก, output_directory
๋ฅผ ๋ณํ๋ nifti ํ์ผ๋ค์ด ๋ด๊ธธ ๊ฒฝ๋ก๋ก ์ง์ ํด์ฃผ๋ฉด ๋๋ค.
Example
์คํ ์ฝ๋ :
import dicom2nifti
dicom_directory = './Data/1_01_P'
output_directory = './Data/nifti/1_01_P'
os.makedirs(output_directory, exist_ok=True)
dicom2nifti.convert_directory(dicom_directory, output_directory)
382๊ฐ์ dicom ํ์ผ๋ค์ด 3๊ฐ์ nifti ํ์ผ๋ก ์ ๋ฆฌ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
(์ฐธ๊ณ ) ์ผ๋ถ dicom ํ์ผ์ด ์ธ์์ด ์๋๋ ๋ฌธ์
์ฐธ๊ณ ๋ก ์๋ฌ log๋ฅผ ๋ณด๊ณ ์ถ์ ๊ฒฝ์ฐ๋ logging level์ INFO๋ก ๋ฎ์ถฐ์ฃผ๋ฉด ์ด๋ค file์์ ์ด๋ค ์ค๋ฅ๊ฐ ๋ฐ์ํ๋์ง ํ์ธํ ์ ์๋ค.
import logging
logging.basicConfig(level=logging.INFO)
CASE1. dicom ํ์ผ์ ์ ํจ์ฑ ๊ฒ์ฌ์์ failํ ๊ฒฝ์ฐ
๋๋ ์ฌ์ฉํ๋ค๊ฐ ๋ฌธ์ ๊ฐ ์๊ธด ์ง์ ์ด, ์ด 4๊ฐ์ nii ํ์ผ์ด ์์ฑ๋์ด์ผ ํ๋๋ฐ, 3๊ฐ๋ง ์์ฑ์ด ๋์๋ค..
๋ญ๊ฐ ๋ฌธ์ ์ธ๊ฐ ์ถ์ด ์ดํด๋ณด๋ ์ฝ๋ ์ค์ ์ ํจํ dicom image ํ์ผ์ธ์ง ๊ฒ์ฌํ๋ ๋ถ๋ถ์ด ์์๋ค.
...
์์ ๊ฐ์ด dicom header์ ๋ช ๊ฐ์ง attribute๋ค์ด ์๋์ง ๊ฒ์ฌํ์ฌ ์ ํจ์ฑ์ ๊ฒ์ฆํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋๋ฐ,
๋์ ๊ฒฝ์ฐ ํ๋์ InstanceNumber์ด ๋น ์ ธ ์๋ series๊ฐ ์์ด ๋ฐ๋ก ๊ฑด๋๋ฐ์ด๋ฒ๋ ธ๋ ๊ฒ์ด๋ค..
๊ฒฐ๊ตญ ํด๋น series์ dicom header์ InstanceNumber์ ๋ชจ๋ ์ถ๊ฐํด ์ค์ผ๋ก์จ ํด๊ฒฐํ๋ค.
dicom viewer์์๋ InstanceNumber์ด ์์ด๋ ์ ์ฝ๋๋ฐ ์ด๋ถ๋ถ์ ์ ๋ฐ์ดํธ๊ฐ ๋์์ผ๋ฉด.. ๐
(๋ช์๊ฐ ์ฝ์งํด์ ์ฌํ๋ค)
CASE2. SLICE_INCREMENT_INCONSISTENT error๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ
SLICE_INCREMENT_INCONSISTENT error๊ฐ ๋ฐ์ํ๋ฉฐ ํด๋น Series๋ฅผ ๊ฑด๋๋ฐ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋ slice ๊ฐ์ ๊ฐ๊ฒฉ์ด ์ผ์ ํ์ง ์์ ๋ ๋ฐ์๋๋ ์ค๋ฅ์ด๋ค.
์ด error์ ๋ฌด์ํ๊ณ convertํ๊ณ ์ถ์ผ๋ฉด setting์์ slice increment๋ฅผ ๊ฒ์ฌํ์ง ์๋๋ก ํ ์ ์๋ค.
์๋ ์ฝ๋๋ฅผ ํตํด setting์ ๋ณ๊ฒฝํ ์ ์๋ค. (์ถ์ฒ-https://github.com/icometrix/dicom2nifti/issues/36)
import dicom2nifti.settings as settings
settings.disable_validate_slice_increment()