******************************************深度学习模型输入转换******************************************
import cv2
import pydicom
import SimpleITK
import numpy as np
from PIL import Image
以下转换等价:
im0 = cv2.imread(path)
image = Image.fromarray(img).convert('RGB')
image = np.array(image)
image = Image.open(path).convert('RGB')
image = np.array(image)
# 法一(不调窗):
img = pydicom.dcmread(path)
img = img.pixel_array
img = (img - img.min()) / (img.max() - img.min())
img = (255 * img).clip(0, 255).astype(np.uint8)image = Image.fromarray(img).convert('RGB')
image = np.array(image)
# 法2(min+max):
min_bound = -60
max_bound = 140
image = SimpleITK.ReadImage(path)
img_array = SimpleITK.GetArrayFromImage(image)
img_array = np.clip((img_array[0] - min_bound) / (max_bound - min_bound), 0, 1)
img = (img_array * 255).clip(0, 255).astype(np.uint8)image = Image.fromarray(img).convert('RGB')
image = np.array(image)
# 法3(ww+wl):
img = pydicom.dcmread(path)
img = adjust_window(get_pixeldata(img)[0], 200, 40, get_pixeldata(img)[1], get_pixeldata(img)[2])image = Image.fromarray(img).convert('RGB')
image = np.array(image)
一、nii转dicom:
import SimpleITK as sitk
import os
import time
from glob import glob
from tqdm import tqdm
class NiftiToDicomConverter:
def __init__(self):
pass
@staticmethod
def writeSlices(base_filename, series_tag_values, new_img, i, out_dir):
image_slice = new_img[:, :, i]
img_np = sitk.GetArrayFromImage(image_slice)
rescaler = sitk.RescaleIntensityImageFilter()
rescaler.SetOutputMinimum(int(img_np.min()))
rescaler.SetOutputMaximum(int(img_np.max()))
image_slice = rescaler.Execute(image_slice)
image_slice = sitk.Cast(image_slice, sitk.sitkInt16)
writer = sitk.ImageFileWriter()
writer.KeepOriginalImageUIDOn()
list(map(lambda tag_value: image_slice.SetMetaData(tag_value[0], tag_value[1]), series_tag_values))
image_slice.SetMetaData("0008|0012", time.strftime("%Y%m%d"))
image_slice.SetMetaData("0008|0013", time.strftime("%H%M%S"))
image_slice.SetMetaData("0008|0060", "CT")
image_slice.SetMetaData("0020|0032", '\\'.join(
map(str, new_img.TransformIndexToPhysicalPoint((0, 0, i))))
)
image_slice.SetMetaData("0020|0013", str(i))
image_slice.SetMetaData("0010|0010", "Nifti2Dicom")
writer.SetFileName(os.path.join(out_dir, base_filename + '_z_slice_' + str(i).zfill(3) + '.dcm'))
writer.Execute(image_slice)
def nifti2dicom_1file(self, in_dir, out_dir):
os.makedirs(out_dir, exist_ok=True)
base_filename = os.path.basename(in_dir).replace('.nii', '').replace('.gz', '')
new_img = sitk.ReadImage(in_dir)
modification_time = time.strftime("%H%M%S")
modification_date = time.strftime("%Y%m%d")
study_uid = "1.2.826.0.1.3680043.2.1125.1.59201697652405021022624652050109009"
series_uid = "1.2.826.0.1.3680043.2.1125.1.10417354219310089004977598540239149"
direction = new_img.GetDirection()
series_tag_values = [("0008|0031", modification_time),
("0008|0021", modification_date),
("0008|0008", "DERIVED\\SECONDARY"),
("0020|000d", study_uid if study_uid else "1.2.826.0.1.3680043.2.1125." + modification_date + ".1" + modification_time),
("0020|000e", series_uid if series_uid else "1.2.826.0.1.3680043.2.1125." + modification_date + ".1" + modification_time),
("0020|000e", "1.2.826.0.1.3680043.2.1125." + modification_date + ".1" + modification_time),
("0020|0037", '\\'.join(
map(str, (direction[0], direction[3], direction[6],
direction[1], dir

最低0.47元/天 解锁文章
6018

被折叠的 条评论
为什么被折叠?



