import os
import matplotlib.pyplot as plt
import numpy as np
import SimpleITK as sitk
import ctypes
def find(args,file):
//加载需要涉及的到dll
path = "./Release/cudart64_100.dll"
lib1 = ctypes.CDLL(r'./Release/cudart64_100.dll')
lib2 = ctypes.CDLL(r'./Release/opencv_core440.dll')
lib3 = ctypes.CDLL(r'./Release/opencv_imgproc440.dll')
alglib = ctypes.CDLL(r"./Release/AlgoLib2.dll")
//定义调用函数的参数类型
alglib.gotoSegBrainTissue.argtypes = (ctypes.POINTER(ctypes.c_short),
ctypes.c_int * 3,
ctypes.c_double * 3,
ctypes.POINTER(ctypes.c_uint8),
ctypes.POINTER(ctypes.c_uint8),
ctypes.POINTER(ctypes.c_float)
)
//定义输入
img = sitk.ReadImage(os.path.join(args.dataset_path, "data")+"/"+file, sitk.sitkInt16)
label= "label_"+file.split("/")[-1].split("_")[0]+".nii.gz"
label = sitk.ReadImage(os.path.join(args.dataset_path, "Labels")+"/"+label, sitk.sitkInt16)
label_array = sitk.GetArrayFromImage(label)
image_array = sitk.GetArrayFromImage(img)
spacing = img.GetSpacing()
image_carr = image_array
if not image_carr.flags['C_CONTIGUOUS']:
image_carr = np.ascontiguous(image_carr, dtype=image_carr.dtype)
a_ctypes_ptr = ctypes.cast(image_carr.ctypes.data, ctypes.POINTER(ctypes.c_short))
mask_array = np.zeros(image_array.shape, dtype=np.uint8)
brain_mask_array = np.zeros(image_array.shape, dtype=np.uint8)
mask_carr = mask_array
if not mask_carr.flags['C_CONTIGUOUS']:
mask_carr = np.ascontiguous(mask_carr, dtype=mask_carr.dtype)
mask_ctypes_ptr = ctypes.cast(mask_carr.ctypes.data, ctypes.POINTER(ctypes.c_uint8))
brain_mask_carr = brain_mask_array
if not brain_mask_carr.flags['C_CONTIGUOUS']:
brain_mask_carr = np.ascontiguous(brain_mask_carr, dtype=brain_mask_carr.dtype)
brain_mask_ctypes_ptr = ctypes.cast(brain_mask_carr.ctypes.data, ctypes.POINTER(ctypes.c_uint8))
arg1 = a_ctypes_ptr
arg4 = mask_ctypes_ptr
arg5 = brain_mask_ctypes_ptr
imgsize = (ctypes.c_int * 3)(
*(ctypes.c_int(image_carr.shape[2]), ctypes.c_int(image_carr.shape[1]), ctypes.c_int(
image_carr.shape[0])))
spac = (ctypes.c_double * 3)(
*(ctypes.c_double(spacing[0]), ctypes.c_double(spacing[1]), ctypes.c_double(spacing[2])))
pos = ctypes.c_float(0)
refpos = ctypes.byref(pos)
alglib.gotoSegBrainTissue.restype = None
//调用函数
nodulesPoints = alglib.gotoSegBrainTissue(arg1, imgsize, spac, arg4, arg5, refpos)
for i in range(mask_array.shape[0]):
data = mask_array[i]
plt.imshow(data)
plt.show(
)
B = pos.value + 25 + 10
final = int(round(B / spacing[2]))
print(final)
d_label = label_array[final]
final = image_carr[final]
dst = sitk.GetImageFromArray(final)
d_label = sitk.GetImageFromArray(d_label)
return dst, d_label
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description='Hyper-parameters management')
parser.add_argument('--dataset_path', default=r"./traindata",
help='fixed trainset root path')
args = parser.parse_args()
file_list = os.listdir(os.path.join(args.dataset_path, "data"))
for i, ct in enumerate(file_list):
data, label = find(args,ct)
sitk.WriteImage(data, r"./data/img/"+ct.split('/')[-1].split("_")[0]+".nii.gz")
sitk.WriteImage(label, r"./data/mask/" + "label_" + ct.split('/')[-1].split("_")[0] + ".nii.gz")
可以参考详解调用dll