要求输出所有nii文件的size和spacing、origin、direction

size:nib库是(xyz),sitk为(zyx

origin:原始图像中心点在相机坐标系的位置

spacing:两个像素的间距

direction方向

写了一个代码可以同时输出文件名和对应spacing,size与其他可以同样代入

import os
import SimpleITK as itk
import numpy as npdef checksize(files):for i in (files):vol=itk.ReadImage(path+i)#filename,fileexp=os.path.split(i) 没用spacing=vol.GetSpacing()print(i,end=' ')   #执行不想换行操作,这里的i输出就是名字,如果需要去掉拓展名则需要用split操作print(spacing)path='D:/test/'
files=os.listdir(path)
checksize(files)

原先预处理的代码被师兄改了一下,因为归一化是错的,还加了一些插值方法,这里记录一下:还有一个问题就是处理完后的数据比原来的大了很多,后来发现是因为有些图像spacing很大,重采样之后会大很多,有些很小会小很多。(这里我们重采样的方法是将spacing全部集合起来取中位数,大约取的是0.7,0.7,1.0)

import numpy as np
import SimpleITK as itk
import os
import matplotlib.pyplot as pltdef nii(files, newspacing=[0.7, 0.7, 1.0]):  # 设定新spacing为0.7,0.7,1.0for file in files:img = itk.ReadImage(path + file)  # 读取niifilename, fileexp = os.path.splitext(file)  # get filenameoriginal_spacing = img.GetSpacing()  # get spacingoriginal_size = img.GetSize()  # get sizenew_size = [int(np.round(original_size[0] * original_spacing[0] / newspacing[0])),int(np.round(original_size[1] * original_spacing[1] / newspacing[1])),int(np.round(original_size[2] * original_spacing[2] / newspacing[2])),]  # 新sizeresample = itk.ResampleImageFilter()resample.SetOutputDirection(img.GetDirection())resample.SetOutputOrigin(img.GetOrigin())resample.SetSize(new_size)resample.SetOutputSpacing(newspacing)if "segmentation" in file:     #for seg and img have different waysresample.SetInterpolator(itk.sitkNearestNeighbor)   #for seg,最临近插值,int8,否则0和1标记会直接插出0.5resample.SetOutputPixelType(itk.sitkUInt8)else:resample.SetInterpolator(itk.sitkLinear)resample.SetOutputPixelType(itk.sitkFloat32)  #for img线性插值,float32,img = resample.Execute(img)itk.WriteImage(img, r"H:/LITS/segmentation_processing/" + filename + ".nii")  # save and new filespath = r"H:/LITS/segmentation/"  # volume文件所在路径
files = os.listdir(path)  # 获取文件
nii(files)

接下来做本地化处理和导入网络预训练

6/12记录:今天接到了师兄的新任务,因为层厚太大了,所以想把多余的层截掉,然后再进行重采样,另外归一化也要想个办法实现,先记下来,明天去实现一下。(另外需要各向异性处理一下,一些spacing z太大的用最临近算法,比2.1小的用线性插值,原因是读图像的时候seg和vol的显示不流畅)

记录:d1、d2

6/13 各向异性处理

import numpy as np
import SimpleITK as itk
import osdef nii(files, newspacing=[0.7, 0.7, 1.0]):  # 设定新spacing为0.7,0.7,1.0for file in files:img = itk.ReadImage(path + file)  # 读取nii,记得要path+i才能够批量读取filename, fileexp = os.path.splitext(file)  # get filenameoriginal_spacing = img.GetSpacing()  # get spacingoriginal_size = img.GetSize()  # get sizenew_size = [int(np.round(original_size[0] * original_spacing[0] / newspacing[0])),int(np.round(original_size[1] * original_spacing[1] / newspacing[1])),int(np.round(original_size[2] * original_spacing[2] / newspacing[2])),]  # 新sizeresample = itk.ResampleImageFilter()resample.SetOutputDirection(img.GetDirection())resample.SetOutputOrigin(img.GetOrigin())resample.SetSize(new_size)resample.SetOutputSpacing(newspacing)#for seg and img have different waysresample.SetInterpolator(itk.sitkNearestNeighbor)   #for seg,最临近插值,int8,否则0和1标记会直接插出0.5resample.SetOutputPixelType(itk.sitkUInt8)# if original_spacing[2]>0.7*3 :   #for volume,>2.1最临近,<2.1线性#     resample.SetInterpolator(itk.sitkNearestNeighbor)#     resample.SetOutputPixelType(itk.sitkFloat32)  #for img线性插值,float32,# else:#     resample.SetInterpolator(itk.sitkLinear)#     resample.SetOutputPixelType(itk.sitkFloat32)img = resample.Execute(img)itk.WriteImage(img, "H:/MedicinePublicData/LITS2017/seg_pro/" + filename + ".nii")  # save and new filespath = "H:/MedicinePublicData/LITS2017/LITS2017/segmentation/"  # volume文件所在路径
files = os.listdir(path)  # 获取文件
nii(files)

修改了一下想法,觉得还是先重采样再crop比较好。crop是根据mask的位置上下裁的,这样数据比较小,训练方便。

之前没有做过,所以拿两个数据读入一下,看看能不能读到z轴的上下限

import os
import SimpleITK as itk
import numpy as npdef getsize(segfiles):for i in (segfiles):seg = itk.ReadImage(path2 + i)  # read segseg_size = seg.GetSize()  # get seg sizeprint(seg_size)seg_a=itk.GetArrayFromImage(seg)mask_index = np.argwhere(seg_a!= 0)  # return mask!=0 whole coords(d1,h1,w1),(d2,h2,w2)=np.max(mask_index,0),np.min(mask_index,0)d_max=d1d_min=d2print(d_max)print(d_min)# def crop(volfiles,segfiles):
#     for i,j in (volfiles,segfiles):
#         vol=itk.ReadImage(path1+i) #read vol
#
#         filename1,fileexp1=os.path.split(i)  #get filename
#         filename2,fileexp2=os.path.split(j)
#         vol_size=vol.GetSize()  #get vol size
#         seg_size=seg.GetSize()  #get seg size
#
#         print(vol_size)
#         print(seg_size)
#
#         # mask_index=np.argwhere(seg!=0)  #return mask!=0 whole coords
#         # (d1,h1,w1),(d2,h2,w2)=np.max(mask_index,0),np.min(mask_index,0)path1='H:/test/vol/'
path2='H:/test/label/'  #get segmentation
volfiles=os.listdir(path1)
segfiles=os.listdir(path2)
# crop(volfiles,segfiles)
getsize(segfiles)

可以读入,下一步是打算分别读图像和seg裁剪

存档今天的代码,报错了,明天继续改

import os
import SimpleITK as itk
import numpy as npdef getsize(segfiles,volfiles):for i,j in zip(segfiles,volfiles):seg = itk.ReadImage(path2 + i)  # read segvol=itk.ReadImage(path1+j)filename1, fileexp1 = os.path.split(i)  # get filenamefilename2,fileexp2=os.path.split(j)seg_size = seg.GetSize()  # get seg sizevol_size=vol.GetSize()print(seg_size)print(vol_size)seg_a=itk.GetArrayFromImage(seg)mask_index = np.argwhere(seg_a!= 0)  # return mask!=0 whole coords(d1,h1,w1),(d2,h2,w2)=np.max(mask_index,0),np.min(mask_index,0)d_max=d1 +3d_min=d2 -3newvol=vol[d_min:d_max,:,:]newseg=seg[d_min:d_max,:,:]itk.WriteImage(vol,'H:/test/voltest/'+filename1+'.nii')# def crop(volfiles,segfiles):
#     for i,j in (volfiles,segfiles):
#         vol=itk.ReadImage(path1+i) #read vol
#
#         filename1,fileexp1=os.path.split(i)  #get filename
#         filename2,fileexp2=os.path.split(j)
#         vol_size=vol.GetSize()  #get vol size
#         seg_size=seg.GetSize()  #get seg size
#
#         print(vol_size)
#         print(seg_size)
#
#         # mask_index=np.argwhere(seg!=0)  #return mask!=0 whole coords
#         # (d1,h1,w1),(d2,h2,w2)=np.max(mask_index,0),np.min(mask_index,0)path1='D:/test1/'
path2='H:/test/label/'  #get segmentation
volfiles=os.listdir(path1)
segfiles=os.listdir(path2)
# crop(volfiles,segfiles)
getsize(segfiles,volfiles)

6/17解决了报错的问题:取名字的函数写错了,晕

源代码不见了,拿隔壁的数据集的crop代码来,大概lits是要替换成z轴即可,crop也crop z 轴

import os
import SimpleITK as itk
import numpy as npdef crop(segfiles,volfiles):for i,j in zip(segfiles,volfiles):seg = itk.ReadImage(path2 + i)  # read segvol=itk.ReadImage(path1+j)     #read volfilename1, fileexp1 = os.path.splitext(i)  # get filename:filename1:segfilename2,fileexp2=os.path.splitext(j)  #filename2:volseg_size = seg.GetSize()  # get seg sizevol_size=vol.GetSize()   #get vol size# print(seg_size)# print(vol_size)seg_a=itk.GetArrayFromImage(seg)mask_index = np.argwhere(seg_a!= 0)  # return mask!=0 whole coords(d1,h1,w1),(d2,h2,w2)=np.max(mask_index,0),np.min(mask_index,0)  #zyxh_max=h1 +3   #sideh_min=h2 -3newvol=vol[:,h_min:h_max,:]  #new vol,对于3D图像可以这样直接CROP xyznewseg=seg[:,h_min:h_max,:]  #new segitk.WriteImage(newvol,'H:/MedicinePublicData/Task02_Heart/imgtrain_cropy/'+filename2+'.nii')  #save volitk.WriteImage(newseg, 'H:/MedicinePublicData/Task02_Heart/label_cropy/' + filename1 + '.nii')  #save seg# def crop(volfiles,segfiles):
#     for i,j in (volfiles,segfiles):
#         vol=itk.ReadImage(path1+i) #read vol
#
#         filename1,fileexp1=os.path.split(i)  #get filename
#         filename2,fileexp2=os.path.split(j)
#         vol_size=vol.GetSize()  #get vol size
#         seg_size=seg.GetSize()  #get seg size
#
#         print(vol_size)
#         print(seg_size)
#
#         # mask_index=np.argwhere(seg!=0)  #return mask!=0 whole coords
#         # (d1,h1,w1),(d2,h2,w2)=np.max(mask_index,0),np.min(mask_index,0)path1='H:/MedicinePublicData/Task02_Heart/imgtrain_pro/'   #get vol
path2='H:/MedicinePublicData/Task02_Heart/label_pro/'  #get segmentation
volfiles=os.listdir(path1)
segfiles=os.listdir(path2)
# crop(volfiles,segfiles)
crop(segfiles,volfiles)

LITS数据集预处理(二)相关推荐

  1. (论文加源码)基于DEAP和MABHOB数据集的二分类脑电情绪识别(pytorch深度神经网络(DNN)和卷积神经网络(CNN))代码解析

    论文解析见个人主页: https://blog.csdn.net/qq_45874683/article/details/130000469?csdn_share_tail=%7B%22type%22 ...

  2. (论文加源码)基于DEAP和MABHOB数据集的二分类脑电情绪识别(pytorch深度神经网络(DNN)和卷积神经网络(CNN))

    该论文发表于2021年的顶级期刊.(pytorch框架) 代码解析部分在个人主页: https://blog.csdn.net/qq_45874683/article/details/13000797 ...

  3. 毕业设计一深度学习之MRI数据集预处理(合并,裁剪以及重命名等操作)

    目录 一,MRI简介 二,MRI数据集获取 三,MRI数据集预处理 四,实现用Keras来构建基于MRI的网络结构 一,MRI简介 核磁共振成像(英语:Nuclear Magnetic Resonan ...

  4. 【统计学习方法】线性可分支持向量机对鸢尾花(iris)数据集进行二分类

    本文摘要 · 理论来源:[统计学习方法]第七章 SVM · 技术支持:pandas(读csv).numpy.sklearn.svm.svm思想.matplotlib.pyplot(绘图) · 代码目的 ...

  5. 【统计学习方法】感知机对鸢尾花(iris)数据集进行二分类

    本文摘要 · 理论来源:[统计学习方法]第二章 感知机 · 技术支持:pandas(读csv).matplotlib(画图).numpy.sklearn.linear_model.Perceptron ...

  6. ML之catboost:基于自带Pool数据集实现二分类预测

    ML之catboost:基于自带Pool数据集实现二分类预测 基于自带Pool数据集实现二分类预测 输出结果 Learning rate set to 0.5 0: learn: 0.9886498 ...

  7. DL之GD:利用LogisticGD算法(梯度下降)依次基于一次函数和二次函数分布的数据集实现二分类预测(超平面可视化)

    DL之GD:利用LogisticGD算法(梯度下降)依次基于一次函数和二次函数分布的数据集实现二分类预测(超平面可视化) 目录 利用LogisticGD算法(梯度下降)依次基于一次函数和二次函数分布的 ...

  8. ML之xgboost:利用xgboost算法对breast_cancer数据集实现二分类预测并进行graphviz二叉树节点图可视化

    ML之xgboost:利用xgboost算法对breast_cancer数据集实现二分类预测并进行graphviz二叉树节点图可视化 目录 实现结果 实现代码 实现结果

  9. ML之RFXGBoost:基于RF/XGBoost(均+5f-CrVa)算法对Titanic(泰坦尼克号)数据集进行二分类预测(乘客是否生还)

    ML之RF&XGBoost:基于RF/XGBoost(均+5f-CrVa)算法对Titanic(泰坦尼克号)数据集进行二分类预测(乘客是否生还) 目录 输出结果 比赛结果 设计思路 核心代码 ...

最新文章

  1. springboot启动原理分析
  2. 在 Java 项目中打印错误日志的正确姿势,排查问题更方便,非常实用!
  3. 爬虫 spider09——爬取指定数据,去重复,并存储到mysql
  4. webpack项目搭建
  5. markdown 图片居中_Markdown入门指南【我为什么要推荐你学习Markdown?】
  6. Linux下samba服务搭建
  7. Java项目 学生信息管理系统 DAO设计模式
  8. ADO.NET五大对象详解(转)
  9. php接收url的json,api-php中url接收的json数据,json_decode为空
  10. 计算机语言元素周期表,元素周期表高清大图
  11. 科罗拉多州立大学计算机科学,科罗拉多州立大学
  12. 从苏宁电器到卡巴斯基第22篇:单证这一年(下)
  13. 生命密码:你的第一本基因科普书
  14. Windows与USB的通信
  15. 在linux下 wget 下载报错 http request sent,awaiting response... 404 not found
  16. 查看mysql数据库连接数、并发数相关信息
  17. html可以有多个h1,HTML5大纲和多个H1 SEO
  18. Nginx 的安装配置
  19. linux内核的gpiolib
  20. python处理期货数据_获取和讯期货数据(Python版本)

热门文章

  1. 邓大人说,米兔要摸着石头过河
  2. 城市垃圾处理无线监控综合解决方案
  3. 如何导演才能拍出亲密无间的闺蜜照
  4. 汽车生产MES系统能帮助企业解决哪些问题
  5. 动态规划如何写出状态转移方程
  6. 手把手教你写android项目@第一期项目——身份证查询创新
  7. 一次拍图完成手机双摄标定的方法
  8. Windows下如何使用cmd命令解除端口占用,杀死进程
  9. 华师网院H5应用开发主观题作业
  10. zk experience