医学图像裁剪为小块,保存为nii文件进行训练

这篇具有很好参考价值的文章主要介绍了医学图像裁剪为小块,保存为nii文件进行训练。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

import numpy as np
import SimpleITK as sitk
import os
from tqdm import tqdm


def cal_board(label_array,index):
    """calculate borader
    0: depth
    1: hight
    2: width
    """
    D,H,W = label_array.shape    
    dots = np.argwhere(label_array==1)
    mins = np.min(dots,axis=0) # z,y,x // 这个一定是0
    maxs = np.max(dots,axis=0) # z,y,x // 这个一定是0
    # print(mins)
    # print(maxs)
    low_boarder, high_boarder = mins[index],maxs[index] 

    return low_boarder, high_boarder


def normalize_img(img:np.ndarray,min_val=-1000,max_val=600)->np.ndarray:
    """ 归一化 """
    # max_val = np.max(img)
    # min_val = np.min(img)
    value_range = max_val - min_val
    norm_0_1 = (img-min_val)/value_range
    img = np.clip(2*norm_0_1-1,-1,1)        
    return img

def crop_img(pure_name,
            image_array, label_array, boarder_depths, boarder_hight, boarder_width,
             target_size=[32,256,256],
             ):

    depth_low, depth_high = boarder_depths[0]-1, boarder_depths[1]+1
    hight_low, hight_high = boarder_hight[0]-1, boarder_hight[1]+1
    width_low, width_high = boarder_width[0]-1, boarder_width[1]+1

    d,h,w = target_size[0],target_size[1],target_size[2]

    cnt = 0

    for k in range(depth_low, depth_high-d//2+1, d//2):
        for j in range(hight_low, hight_high - h//2+1, h//2):
            for i in range(width_low, width_high-w//2 + 1, w//2):
                if(k+d >= depth_high):
                    k = depth_high - d
                if(j+h >= hight_high):
                    j = hight_high - h
                if(i+w >= width_high):
                    i = width_high - w

                crop_img = image_array[k:k+d,j:j+h,i:i+w]
                crop_lab = label_array[k:k+d,j:j+h,i:i+w]

                if np.sum(crop_lab) < 500:
                    continue

                print(f'd:[{k}-{k+d}), h:[{j}-{j+h}), w:[{i}-{i+w})')
                print(f'crop_img.shape={crop_img.shape}, crop_lab.shape={crop_lab.shape}')
                assert crop_img.shape==crop_lab.shape,f'crop_img.shape={crop_img.shape}, crop_lab.shape={crop_lab.shape}, they are not equal!'

                cropImage = sitk.GetImageFromArray(crop_img)
                cropLabel = sitk.GetImageFromArray(crop_lab)

                
                cropImageSaveDir = os.path.join(saveDir, "images")
                cropLabelSaveDir = os.path.join(saveDir, "labels")
                
                cropSaveName = f'{pure_name}_{cnt:04}.nii.gz'
                
                cropImageSavePath = os.path.join(cropImageSaveDir, cropSaveName)
                cropLabelSavePath = os.path.join(cropLabelSaveDir, cropSaveName)

                sitk.WriteImage(cropImage, cropImageSavePath)
                sitk.WriteImage(cropLabel, cropLabelSavePath)
                
                cnt +=1


if __name__ == '__main__':
    saveDir = "./head_dataset"


    image_path = "./test_data/86_image.nii.gz"
    label_path = "./test_data/86_label.nii.gz"

    file_name = os.path.basename(image_path)
    pureName = file_name.split('.')[0]
    # input(pureName)

    image = sitk.ReadImage(image_path)
    label = sitk.ReadImage(label_path)

    imageArray = sitk.GetArrayFromImage(image)
    labelArray = sitk.GetArrayFromImage(label)

    print(f'imageArray.shape={imageArray.shape}, labelArray.shape={labelArray.shape}')

    board_depth_1, board_depth_2 = cal_board(labelArray, 0)
    board_hight_1, board_hight_2 = cal_board(labelArray, 1)
    board_width_1, board_width_2 = cal_board(labelArray, 2)

    print(board_depth_1, board_depth_2)
    print(board_hight_1, board_hight_2)
    print(board_width_1, board_width_2)

    # normalize image
    imageArray = normalize_img(imageArray)

    # [32,256,256]
    crop_img(pureName,
        image_array=imageArray, label_array=labelArray,
              boarder_depths=[board_depth_1,board_depth_2],
              boarder_hight=[board_hight_1, board_hight_2],
              boarder_width=[board_width_1, board_width_2])
    

文章来源地址https://www.toymoban.com/news/detail-795240.html

到了这里,关于医学图像裁剪为小块,保存为nii文件进行训练的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Opencv C++ SIFT特征提取(单图像,多图像)+如何设置阈值+如何对文件夹进行批处理+如何设置掩膜裁剪影像

    SIFT(Scale-Invariant Feature Transform)是一种用于图像处理和计算机视觉的特征提取算法。由David Lowe于1999年首次提出,它是一种非常有效的局部特征描述符,具有尺度不变性、旋转不变性和对部分遮挡的鲁棒性。 SIFT特征提取的主要步骤包括: 尺度空间极值检测(Scale-Space Extrem

    2024年01月19日
    浏览(33)
  • [python]裁剪文件夹中所有pdf文档并按名称保存到指定的文件夹

    最近在写论文的实验部分,由于latex需要pdf格式的文档,审稿专家需要对pdf图片进行裁剪放大,以保证图片质量。 原图: 裁剪后的图像: 代码粘贴如下。将input_folder和output_folder替换即可。(x1, y1), (x2, y2) 分别代表裁剪框的像素位置。

    2024年01月19日
    浏览(50)
  • 【Python VTK】读取二维序列医学图像分割结果并进行三维重建

    最近在开发过程中遇到了这样的问题: 在医学图像开发过程中,我们将医学图像通过 深度学习 算法进行分割,现在想要 通过这一套二维图像进行三维重构 。 以下是分割结果: 图一:前列腺核磁图像分割结果 图一:前列腺核磁图像分割结果 图一:前列腺核磁图像分割结果

    2024年02月01日
    浏览(38)
  • 详细介绍如何使用HuggingFace和PyTorch进行医学图像分割-附源码

      医学图像分割是一种创新过程,使外科医生能够拥有虚拟的“X 射线视觉”。它是医疗保健领域非常有价值的工具,可提供非侵入性诊断和深入分析。考虑到这一点,在这篇文章中,我们将探索 威斯康辛大学麦迪逊分校胃肠道图像分割 Kaggle 挑战数据集。作为该项目的一部

    2024年02月15日
    浏览(27)
  • 医学图像的深度学习的完整代码示例:使用Pytorch对MRI脑扫描的图像进行分割

    图像分割是医学图像分析中最重要的任务之一,在许多临床应用中往往是第一步也是最关键的一步。在脑MRI分析中,图像分割通常用于测量和可视化解剖结构,分析大脑变化,描绘病理区域以及手术计划和图像引导干预,分割是大多数形态学分析的先决条件。 本文我们将介绍

    2024年02月05日
    浏览(35)
  • 医学图像DICOM文件解析——DICOM内部信息详解篇

       医学影像学Medical Imaging,是研究借助于某种介质(如X射线、电磁场、超声波等)与人体相互作用,把人体内部组织器官结构、密度以影像方式表现出来,供诊断医师根据影像提供的信息进行判断,从而对人体健康状况进行评价的一门科学,包括医学成像系统和医学图像

    2024年02月03日
    浏览(28)
  • c# 通过现在文件夹,获取下面所有的照片,并对其进行统一尺寸裁剪

    c# 通过现在文件夹,获取下面所有的照片,并对其进行统一尺寸裁剪 using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using Syst

    2023年04月26日
    浏览(40)
  • .nii格式文件解析

    nii格式(NIFTI格式的扩展)是为多维神经影像学发明的,可真实反映元数据,包含方向信息。nii格式图片主要包含三部分信息:hdr, ext, img(其中.hdr和.img也可用单文件.nii存储) 1、hdr(header数据头) 同一版本的nii文件的数据长度是固定的。header里包含的信息有: 维度:x,y,z

    2024年02月07日
    浏览(24)
  • Baumer工业相机堡盟工业相机如何通过BGAPI SDK和微软图像压缩算法进行图像压缩保存(C#)

    ​ Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度

    2023年04月13日
    浏览(31)
  • 【3-D深度学习:肺肿瘤分割】创建和训练 V-Net 神经网络,并从 3D 医学图像中对肺肿瘤进行语义分割研究(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 使用

    2024年02月15日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包