【Python医学影像从超详细入门】2.NII NII.GZ NRRD DICOM JPG文件格式转换

本文详细介绍如何使用Python进行医学影像的NIINII.GZNRRD与DICOM格式转换,以及如何将原始影像和勾画文件转换为JPG格式,涉及SimpleITK、nibabel等库的使用实例。

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

【Python医学影像从超详细入门】2.NII NII.GZ NRRD DICOM文件格式转换

NII NII.GZ NRRD DICOM是医学影像常用的四种存储格式。
为了实现可视化,通常还需要将其转换为JPG格式。

其之间的相互转换需要使用到以下库:
SimpleITK
nibabel
cv2
numpy

首先您需要在控制台安装缺少的库(只需要安装提示缺少的库)

#SimpleITK:
pip install --user -i https://pypi.tuna.tsinghua.edu.cn/simple SimpleITK
#nibabel:
pip install --user -i https://pypi.tuna.tsinghua.edu.cn/simple nibabel
#cv2:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python
#numpy:
pip install numpy

dicom转nii nii.gz nrrd方法:

#dicom即文件夹存储的dcm后缀文件转为nii或nii.gz或nrrd格式
#dicom文件夹目录  niipath:要保存的文件名
def dcm2niigz(dcmpath, niipath):
    reader = sitk.ImageSeriesReader()
    dicom_names = reader.GetGDCMSeriesFileNames(dcmpath)
    reader.SetFileNames(dicom_names)
    image2 = reader.Execute() 

    image_array = sitk.GetArrayFromImage(image2)
    origin = image2.GetOrigin()
    spacing = image2.GetSpacing()
    direction = image2.GetDirection()
    image3 = sitk.GetImageFromArray(image_array)
    
    image3.SetSpacing(spacing)
    image3.SetDirection(direction)
    image3.SetOrigin(origin)
    
    sitk.WriteImage(image3, niipath)  

nii nii.gz nrrd互相转换方法:

#nii nii.gz nrrd格式之间互相转换
def nii2nii(oripath,savepath):
    data = sitk.ReadImage(oripath)
    img = sitk.GetArrayFromImage(data)
    out = sitk.GetImageFromArray(img)
    sitk.WriteImage(out,savepath)

nii nii.gz nrrd 原始影像转换为jpg的方法:
(请注意 原始影像与勾画文件转换为JPG方式略有不同)

#转换为jpg图像时,调整窗位窗宽
def window_transform(img, windowWidth, windowCenter):
    minWindow = float(windowCenter) - 0.5*float(windowWidth)
    img = (img - minWindow) / float(windowWidth)
    img[img < 0] = 0
    img[img > 1] = 1
    img = (img * 255).astype('float32')
    return img

#nii nii.gz nrrd的原始影像文件(非勾画)转换为jpg
#file_path应该是nii nii.gz nrrd文件  to_path应该是一个文件夹
def Niigz2jpg(file_path,to_path,cwckON,cwckcenter,cwckwidth):
    
    n1 = nib.load(file_path)
    n1 = n1.get_fdata()
    
    if(cwckON):
        n1 = window_transform(n1,cwckwidth,cwckcenter)

    if(os.path.exists(to_path)):#若已存在文件夹
        shutil.rmtree(to_path)#则删除文件夹
    os.mkdir(to_path)#重新创建文件夹
    
    
    for i in range(n1.shape[2]):
        out_path = to_path + '\\' + str(i) + ".jpg"
        nt=cv2.flip(np.rot90(n1[:,:,i],3),1)
        nt = nt.astype('float32')
        cv2.imwrite(out_path,nt)

nii nii.gz nrrd勾画文件转换为jpg方法:

#nii nii.gz nrrd勾画文件转jpg  需要像素值X255
def Nii2jpg_x255(file_path,to_path):
    n1 = nib.load(file_path)
    n1 = n1.get_fdata()
    n1 = np.array(n1,dtype=np.uint8)
    n1 = n1 * 255
    if(os.path.exists(to_path)):
        shutil.rmtree(to_path)
    if(not os.path.exists(to_path)):
        os.mkdir(to_path)
    for i in range(n1.shape[2]):
        out_path = to_path + '\\' + str(i) + ".jpg"
        nt=cv2.flip(np.rot90(n1[:,:,i],3),1)
        cv2.imwrite(out_path,nt)

勾画jpg覆盖到原始影像jpg的方法:

#orijpgpath:原始影像的jpg图像所在文件夹
#maskjpgpath:勾画文件的jpg图像所在文件夹
#alpha:勾画覆盖强度
#savepath:文件保存目录
def ori_mask_2jpg(orijpgpath,maskjpgpath,alpha,savepath):
    names1 = os.listdir(orijpgpath)
    names1.sort(key=lambda x:int(x.split('.')[0]))
    names2 = os.listdir(maskjpgpath)
    names2.sort(key=lambda x:int(x.split('.')[0]))
    
    if(os.path.exists(savepath)):
        shutil.rmtree(savepath)
    os.mkdir(savepath)
    
    for i in range(len(names1)):
        im1 = cv2.imread(orijpgpath + '\\' + names1[i])
        im2 = cv2.imread(maskjpgpath + '\\' + names2[i])
        im3 = np.concatenate([im1, cv2.addWeighted(im2, alpha, im1, 1,0,0)], axis=1)
        cv2.imwrite(savepath+'\\'+names1[i],im3)

您可以前往此文章以获取使用实例:
【Python医学影像从超详细入门】1.医学影像与勾画文件查看(NII NII.GZ NRRD转JPG)

### 搭建满血 DeepSeek R1 实现联网搜索功能 为了实现这一目标,在腾讯云平台上利用大模型知识引擎完成部署是可行的方式之一。选择所需的特定本模型,例如DeepSeek-R1或更先进的迭代本如DeepSeek-V3,对于确保性能至关重要[^2]。 #### 配置环境与参数设定 进入腾讯云平台的大模型服务页面后,定位到大模型知识引擎部分并启动实例创建流程。在模型选项中挑选DeepSeek-R1作为基础架构的核心组件。随后,在高级设置里激活“联网搜索”的开关,这一步骤允许模型访问互联网资源以增强其响应能力和信息更新频率。 ```python import tencentcloud.common.exception.tencent_cloud_sdk_exception as exce from tencentcloud.common import credential from tencentcloud.tmt.v20180321 import tmt_client, models def setup_deepseek_with_web_search(secret_id, secret_key): try: cred = credential.Credential(secret_id, secret_key) client = tmt_client.TmtClient(cred, "ap-guangzhou") req = models.TextTranslateRequest() params = { "SourceText": "查询关键词", "Source": "auto", "Target": "zh" } req.from_json_string(json.dumps(params)) resp = client.TextTranslate(req) print(resp.to_json_string()) # 假设此处有API调用来开启联网搜索特性 enable_internet_search(client) except exce.TencentCloudSDKException as err: print(err) def enable_internet_search(client): # 这是一个假设性的函数用于说明如何可能启用联网搜索, # 实际操作需参照官方文档指导。 pass ``` 此代码片段展示了初始化腾讯云客户端以及发送翻译请求的过程;需要注意的是`enable_internet_search()`方法仅为示意目的而存在,具体实施细节应依据腾讯云提供的最新接口指南进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值