dicom2nii_batch_tool

dicom2nii_batch_tool是一个用于Windows的Python工具,它简化了使用dcm2nii.exe将DICOM图像批量转换为NII格式的过程。用户需要配置源目录、目标递归模式和dcm2nii.exe的位置,然后运行脚本来执行转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用dcm2nii.exe批量处理将dcm图像转换为nii图像的简单工具。(仅限Windows)如有任何疑问,请联系wuzhengx at stanford dot edu

脚步

1.确保安装了python
2.安装git
3.git clone https://github.com/frankaging/dicom2nii_batch_tool.git
4.打开配置文件并按照步骤进行配置
5.运行python dicom2nii.py

configuration

####################################################################################################

Configuration file for batch process dicom2nii

Caveat: If you have 100 folders for converting,

you have to name the folers in recursive

pattern: folder_1, foler_2, …

The recursive pattern here is “folder_xxx”.

If you have only one foler to convert,

just replace folder_xxx with actual folder name

in all three inputs.

Only use 3 xs in recursive foler placeholder

Example: (Windows Directory Path)

If you want consume files from:

Y:\a\b\c\folder_xxx\

Then, output converted files to:

W:\x\y\z\folder_xxx\x\y\z\

With recursive pattern: folder_xxx (x represent any arbitrary recursive numbers)

####################################################################################################

Only modify things after :: as the example

SOURCE_DIR::Y:\a\b\c\folder_xxx
TARGET_RECURSIVE_PATTERN::folder_xxx
OUTPUT_DIR::W:\x\y\z\folder_xxx\x\y\z
DICOM2NIIEXE_LOCATION::X:\a\b\c\dcm2nii.exe

dicom2nii.py

#!/usr/bin/python

-- coding: utf-8 --

###########################################################

Please Read Configuration File and Config Before Running

Author = wuzhengx@stanford.edu

Batch Process For dicom2nii.exe

###########################################################

-- coding: utf-8 --

import os
import re
import sys
import shutil
import subprocess

fname = "configuration"
config_source_dir = ""
config_output_dir = ""
config_recursive_pattern = ""
exe_location = ""
with open(fname) as f:
    for line in f:
        if line.startswith("SOURCE_DIR"):
            li = line.strip().split("::")
            config_source_dir = li[1].strip()
            if config_source_dir[-1] != "\\":
                config_source_dir += "\\"
            # config_source_dir = li[1].strip("\\")
            # config_source_dir = li[1].strip("/")
        if line.startswith("OUTPUT_DIR"):
            li = line.strip().split("::")
            config_output_dir = li[1].strip()
            if config_output_dir[-1] != "\\":
                config_output_dir += "\\"
        if line.startswith("DICOM2NIIEXE_LOCATION"):
            li = line.strip().split("::")
            exe_location = li[1].strip()
        if line.startswith("TARGET_RECURSIVE_PATTERN"):
            li = line.strip().split("::")
            config_recursive_pattern = li[1].strip()
            config_recursive_pattern_trim = config_recursive_pattern.strip("xxx")

if config_source_dir == "" or config_output_dir == "" or config_recursive_pattern == "" or exe_location == "":
    print("Check your configuration file!")
    sys.exit(0)

from sys import platform
 TODO !=
 TODO: this is just for bypassing
if False:
    print("We only support windows as for now!")
    sys.exit(0)
else:

# getting exe location
exe_location_li = exe_location.split("\\")
if len(exe_location_li) < 1:
    print("Check your configuration file!")
    sys.exit(0)
exe_location_li[0] = exe_location_li[0] + "\\"
print(exe_location_li[0])
exe_path_recursive = os.path.join("")
for i in exe_location_li:
    exe_path_recursive = os.path.join(exe_path_recursive, i)
print exe_path_recursive

config_source_dir_li = config_source_dir.split("\\" + config_recursive_pattern + "\\")
if config_source_dir_li[0] == "" or len(config_source_dir_li) > 2:
    print("Check your configuration file!")
    sys.exit(0)

# config_source_dir_pre
config_source_dir_pre_li = config_source_dir_li[0].split("\\")
if len(config_source_dir_pre_li) < 1:
    print("Check your configuration file!")
    sys.exit(0)
config_source_dir_pre_li[0] = config_source_dir_pre_li[0] + "\\"
pre_path_recursive = os.path.join("")
for i in config_source_dir_pre_li:
    pre_path_recursive = os.path.join(pre_path_recursive, i)
print pre_path_recursive
# config_source_dir_pro
config_source_dir_pro_li = config_source_dir_li[1].split("\\")
# print(config_source_dir_pro_li)
pro_path_recursive = os.path.join("")
for i in config_source_dir_pro_li:
    pro_path_recursive = os.path.join(pro_path_recursive, i)
print pro_path_recursive

# config_output_dir_pre
config_output_dir_li = config_output_dir.split("\\" + config_recursive_pattern + "\\")
if config_output_dir_li[0] == "" or len(config_output_dir_li) > 2:
    print("Check your configuration file!")
    sys.exit(0)
# config_output_dir_pre
config_output_dir_pre_li = config_output_dir_li[0].split("\\")
if len(config_output_dir_pre_li) < 1:
    print("Check your configuration file!")
    sys.exit(0)
config_output_dir_pre_li[0] = config_output_dir_pre_li[0] + "\\"
output_pre_path_recursive = os.path.join("")
for i in config_output_dir_pre_li:
    output_pre_path_recursive = os.path.join(output_pre_path_recursive, i)
# print output_pre_path_recursive
# config_output_dir_pro
config_output_dir_pro_li = config_output_dir_li[1].split("\\")
if len(config_output_dir_pro_li) < 1:
    print("Check your configuration file!")
    sys.exit(0)
output_pro_path_recursive = os.path.join("")
for i in config_output_dir_pro_li:
    output_pro_path_recursive = os.path.join(output_pro_path_recursive, i)
# print output_pro_path_recursive

print config_recursive_pattern_trim

list of dirs

_search_base_dir = os.path.join(pre_path_recursive)
_search_sub_dir = os.path.join(pro_path_recursive)
_convert_engine_dir = os.path.join(exe_path_recursive)

(_root, _dirs, _files) = os.walk(_search_base_dir).next()

loop through all the top level sub folders (names) under Rawdatafiles folder

for _candidate_dir in _dirs:

if _candidate_dir.startswith(config_recursive_pattern_trim):

    _search_dir = os.path.join(_search_base_dir, _candidate_dir,
                               _search_sub_dir)
    print ("Searching in this directory:" + _search_dir + "...\n")
    try:
        for f_name in os.listdir(_search_dir):
            print ("Converting file: " + f_name + "!\n")
            try:
                _output_dir = os.path.join(output_pre_path_recursive,
                        _candidate_dir, output_pro_path_recursive)
                if not os.path.exists(_output_dir):
                    os.makedirs(_output_dir)
                args = [  # remove date and unzip options
                    _convert_engine_dir,
                    '-g',
                    'n',
                    '-d',
                    'n',
                    '-o',
                    _output_dir,
                    os.path.join(_search_dir, f_name),
                    ]
                subprocess.call(args)
                break
            except OSError:
                print 'Temp Error: <code:explanations>'
    except:
        pass

tester.py

import os
import sys

fname = "configuration"
config_source_dir = ""
config_output_dir = ""
config_recursive_pattern = ""
exe_location = ""
with open(fname) as f:
	for line in f:
		if line.startswith("SOURCE_DIR"):
			li = line.strip().split("::")
			config_source_dir = li[1].strip()
			if config_source_dir[-1] != "\\":
				config_source_dir += "\\"
			# config_source_dir = li[1].strip("\\")
			# config_source_dir = li[1].strip("/")
		if line.startswith("OUTPUT_DIR"):
			li = line.strip().split("::")
			config_output_dir = li[1].strip()
			if config_output_dir[-1] != "\\":
				config_output_dir += "\\"
		if line.startswith("DICOM2NIIEXE_LOCATION"):
			li = line.strip().split("::")
			exe_location = li[1].strip()
		if line.startswith("TARGET_RECURSIVE_PATTERN"):
			li = line.strip().split("::")
			config_recursive_pattern = li[1].strip()
			config_recursive_pattern_trim = config_recursive_pattern.strip("xxx")

if config_source_dir == "" or config_output_dir == "" or config_recursive_pattern == "" or exe_location == "":
	print("Check your configuration file!")
	sys.exit(0)

from sys import platform
 TODO !=
if platform == "win32":
	print("We only support windows as for now!")
	sys.exit(0)
else:
# getting exe location
exe_location_li = exe_location.split("\\")
if len(exe_location_li) < 1:
	print("Check your configuration file!")
	sys.exit(0)
exe_location_li[0] = exe_location_li[0] + "\\"
exe_path_recursive = os.path.join("")
for i in exe_location_li:
	exe_path_recursive = os.path.join(exe_path_recursive, i)
print exe_path_recursive

config_source_dir_li = config_source_dir.split("\\" + config_recursive_pattern + "\\")
if config_source_dir_li[0] == "" or len(config_source_dir_li) > 2:
	print("Check your configuration file!")
	sys.exit(0)

# config_source_dir_pre
config_source_dir_pre_li = config_source_dir_li[0].split("\\")
if len(config_source_dir_pre_li) < 1:
	print("Check your configuration file!")
	sys.exit(0)
config_source_dir_pre_li[0] = config_source_dir_pre_li[0] + "\\"
pre_path_recursive = os.path.join("")
for i in config_source_dir_pre_li:
	pre_path_recursive = os.path.join(pre_path_recursive, i)
print pre_path_recursive
# config_source_dir_pro
config_source_dir_pro_li = config_source_dir_li[1].split("\\")
pro_path_recursive = os.path.join("")
for i in config_source_dir_pro_li:
	pro_path_recursive = os.path.join(pro_path_recursive, i)
print pro_path_recursive

# config_output_dir_pre
config_output_dir_li = config_output_dir.split("\\" + config_recursive_pattern + "\\")
if config_output_dir_li[0] == "" or len(config_output_dir_li) > 2:
	print("Check your configuration file!")
	sys.exit(0)
# config_output_dir_pre
config_output_dir_pre_li = config_output_dir_li[0].split("\\")
if len(config_output_dir_pre_li) < 1:
	print("Check your configuration file!")
	sys.exit(0)
config_output_dir_pre_li[0] = config_output_dir_pre_li[0] + "\\"
output_pre_path_recursive = os.path.join("")
for i in config_output_dir_pre_li:
	output_pre_path_recursive = os.path.join(output_pre_path_recursive, i)
print output_pre_path_recursive
# config_output_dir_pro
config_output_dir_pro_li = config_output_dir_li[1].split("\\")
if len(config_output_dir_pro_li) < 1:
	print("Check your configuration file!")
	sys.exit(0)
output_pro_path_recursive = os.path.join("")
for i in config_output_dir_pro_li:
	output_pro_path_recursive = os.path.join(output_pro_path_recursive, i)
print output_pro_path_recursive

print config_recursive_pattern_trim

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值