医学分割图像十项全能比赛-task2心脏数据集的预处理_decathlondataset-程序员宅基地

技术标签: 鼠太郎学习数据预处理ing  

医学分割十项全能挑战,是从nnunet那里听说来的,下载心脏数据集之后发现有19个训练集,10个测试集,label标记为0背景1左心房。

数据集是TCIA比赛中选出来的,由于是MRI的nii.gz格式,并且图像的spacing都是一致的,打算先进行N4校正。

中途报labelid=8的时候想当然觉得是int8,后来师兄告诉我id=8是float32的意思。

import os
import SimpleITK as itk
import numpy as np
from sklearn import preprocessing



def pre(files,img_type=itk.sitkFloat32):
    for i in files:
        img=itk.ReadImage(path+i,img_type)  #read images float32
        filename, fileexp = os.path.splitext(i)  # get filename

        mask = sitk.OtsuThreshold(img, 0, 1, 200)
        vol=itk.N4BiasFieldCorrection(img,mask)  #N4
        #vol=img
        #vol_a = itk.GetArrayFromImage(vol)  # 转换成numpy形式,
        #vol_a=np.float32(vol_a)
        out=itk.Normalize(vol)    #z标准化
        #average=np.average(vol_a)
        #sigma=np.std(vol_a)
        #vol_z=(vol_a-average)/sigma

        #out=itk.GetImageFromArray(vol_z)  #save as .nii

        '''
        resample = itk.ResampleImageFilter()
        resample.SetOutputDirection(out.GetDirection())
        resample.SetOutputOrigin(out.GetOrigin())
        resample.SetSize(out.GetSize)
        resample.SetOutputSpacing(out.Getspacing)
        resample.SetOutputPixelType(itk.sitkFloat32)  #save as float32
        out = resample.Execute(out)  #execute
        '''

        itk.WriteImage(out,'D:/test/'+filename+'.nii')  #save as nii




path = 'D:/Bratrain/'  # volume文件所在路径
files = os.listdir(path)  # 获取文件
pre(files)

再做z-scores归一化,最后保存为float32文件。对于label不进行处理。

这里报错了

Traceback (most recent call last):
  File "C:/Users/HP/PycharmProjects/pythonProject7/main.py", line 33, in <module>
    pre(files)
  File "C:/Users/HP/PycharmProjects/pythonProject7/main.py", line 15, in pre
    vol_z=preprocessing.scale(vol_a)    #z标准化
  File "C:\Users\HP\PycharmProjects\pythonProject4\venv\lib\site-packages\sklearn\utils\validation.py", line 63, in inner_f
    return f(*args, **kwargs)
  File "C:\Users\HP\PycharmProjects\pythonProject4\venv\lib\site-packages\sklearn\preprocessing\_data.py", line 161, in scale
    X = check_array(X, accept_sparse='csc', copy=copy, ensure_2d=False,
  File "C:\Users\HP\PycharmProjects\pythonProject4\venv\lib\site-packages\sklearn\utils\validation.py", line 63, in inner_f
    return f(*args, **kwargs)
  File "C:\Users\HP\PycharmProjects\pythonProject4\venv\lib\site-packages\sklearn\utils\validation.py", line 716, in check_array
    raise ValueError("Found array with dim %d. %s expected <= 2."
ValueError: Found array with dim 3. the scale function expected <= 2.

明天再仔细看看报错原因

 

6/12 今天重新一块块跑了一遍,发现居然跑通了,生成一个nii大概需要跑十分钟左右,师兄告诉我是因为N4耗费太多时间了。

这里需要记录一下标准化用的代码,应该是Z-SCORES标准化,sitk库里就可以找得到,输入图像输出图像。这个函数我完全没有了解,网上也找不到,官方sitk手册也读不懂,唉,瞎弄了一下,幸亏是输入image,不过这下子就不用转成numpy形式了,真好。

import os
import SimpleITK as itk
import numpy as np
from sklearn import preprocessing


def pre(files,img_type=itk.sitkFloat32):
    for i in files:
        img=itk.ReadImage(path+i,img_type)  #read images float32
        filename, fileexp = os.path.splitext(i)  # get filename

        mask = itk.OtsuThreshold(img, 0, 1, 200)
        vol = itk.N4BiasFieldCorrection(img, mask)  # N4


        out = itk.Normalize(vol)  # z标准化

        resample = itk.ResampleImageFilter()
        resample.SetOutputDirection(out.GetDirection())
        resample.SetOutputOrigin(out.GetOrigin())
        resample.SetSize(out.GetSize())
        resample.SetOutputSpacing(out.GetSpacing())
        resample.SetOutputPixelType(itk.sitkFloat32)  # save as float32
        out = resample.Execute(out)  # execute


        itk.WriteImage(out,'D:/test2/'+filename+'.nii')  #save as nii



path = 'D:/Bratrain/'  # volume文件所在路径
files = os.listdir(path)  # 获取文件
pre(files)

6/12后续是对test数据同样处理,不过之后应该也要裁一下

6/17今天做完lits的crop之后做心脏数据集的crop,照例对z轴crop完之后发现它的轴是反的,应该是y轴对应z才对,于是修改了一下代码

import os
import SimpleITK as itk
import numpy as np


def crop(segfiles,volfiles):
    for i,j in zip(segfiles,volfiles):
        seg = itk.ReadImage(path2 + i)  # read seg
        vol=itk.ReadImage(path1+j)     #read vol
        filename1, fileexp1 = os.path.splitext(i)  # get filename:filename1:seg
        filename2,fileexp2=os.path.splitext(j)  #filename2:vol
        seg_size = seg.GetSize()  # get seg size
        vol_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)  #zyx
        h_max=h1 +3   #side
        h_min=h2 -3

        newvol=vol[:,h_min:h_max,:]  #new vol,对于3D图像可以这样直接CROP xyz
        newseg=seg[:,h_min:h_max,:]  #new seg

        itk.WriteImage(newvol,'H:/MedicinePublicData/Task02_Heart/imgtrain_cropy/'+filename2+'.nii')  #save vol
        itk.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)

到这里大概是预处理完毕了

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42131051/article/details/117803687

智能推荐

BASE64、MD5、SHA、HMAC几种加密算法-程序员宅基地

文章浏览阅读106次。BASE64编码算法不算是真正的加密算法。 MD5、SHA、HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法,我们称之为单向加密算法。我们通常只把他们作为加密的基础。单纯的以上三种的加密并不可靠。 BASE64 按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The ..._base 64编码 和mad5 和雪花算法

住宅IP、家庭宽带IP以及原生IP,它们有什么区别?谷歌开发者账号应选择哪种IP?-程序员宅基地

文章浏览阅读1.1k次。IP地址(Internet Protocol Address)是互联网协议地址的简称,是互联网通信的基础,互联网上每一个网络设备的唯一标识符每个在线的设备都需要一个IP地址,这样才能在网络中找到它们并进行数据交换。IP地址有很多种类型,今天跟大家简单分享一下住宅IP、家庭宽带IP以及原生IP的区别。住宅IP通常是指由互联网服务提供商(ISP)分配给家庭的或小型办公室使用的互联网连接IP地址,并可能随着网络连接的变化而变化。此类IP地址主要用于日常网络活动,如浏览网页、发送接收电子邮件、上网冲浪等。

如何更改layui form表单位置,宽度,颜色等_layui-form-item 宽度-程序员宅基地

文章浏览阅读2.6w次,点赞14次,收藏30次。如何更改layui form表单位置,宽度,颜色等_layui-form-item 宽度

【翻译】Efficient Data Loader for Fast Sampling-Based GNN Training on Large Graphs_pagraph: scaling gnn training on large graphs via -程序员宅基地

文章浏览阅读612次。写的非常好_pagraph: scaling gnn training on large graphs via computation-aware caching

炫酷的HTML代码-程序员宅基地

文章浏览阅读2.7w次,点赞61次,收藏285次。很炫酷的html代码:<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><title>star</title><script type="text/javascript">window.onload = function () {C = Math.cos; // cache Math objectsS = Math.si.._炫酷的html

【HDU - 1166】敌兵布阵 (线段树模板 单点更新+ 区间查询)-程序员宅基地

文章浏览阅读204次。题干:C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。 中央情报局要研究敌人究竟演习什...

随便推点

【免费题库】华为OD机试C卷 - 数字字符串组合倒序(Java 代码+解析)-程序员宅基地

文章浏览阅读2.3k次。题目描述对数字,字符,数字串,字符串,以及数字与字符串组合进行倒序排列。字符范围:由 a 到 z, A 到 Z,数字范围:由 0 到 9符号的定义:“-”作为连接符使用时作为字符串的一部分,例如“20-years”作为一个整体字符串呈现;连续出现 2 个 “-” 及以上时视为字符串间隔符,如“out--standing”中的”–“视为间隔符,是 2 个独立整体字符串”out”和”standing”;除了 1,2 里面定义的字符以外其他的所有字符,都是非法字符,作为字符串的间隔符处理,倒序后

Android(14) ArrayAdapter(数组适配器)的三种方法-程序员宅基地

文章浏览阅读5w次,点赞36次,收藏138次。ArrayAdapter数组适配器用于绑定格式单一的数据,数据源可以是集合或者数组列表视图(ListView)以垂直的形式列出需要显示的列表项。实现过程:新建适配器->添加数据源到适配器->视图加载适配器第一种:直接用ListView组件创建列表每一行只有一行文字效果如图:activity_list布局:<?xml version="1.0" e..._arrayadapter

助力商家健康经营 创业者为水滴直播点赞-程序员宅基地

文章浏览阅读43次。近日,水滴直播平台登上了舆论的风口浪尖。有人认为水滴直播涉嫌侵犯隐私,但也有人表示这种互联网新生事物可以有效规避很多风险,值得鼓励,不应一棒子打死。记者采访时发现,很多商家、创业者对于水滴直播纷纷表示支持,并直言水滴直播为他们的经营带来了很大帮助。 邹志泉在北京丰台区经营着一家批发厂家直销男女内衣裤的店铺,平时就打开水滴直播,分享他在店铺的经营画面。面对水滴直播涉及隐私的提问,邹志泉明确表...

java毕业设计宠物收养管理系统Mybatis+系统+数据库+调试部署-程序员宅基地

文章浏览阅读67次。springboot基于SpringBoot的电影社区网站。springboot基于springboot食品销售网站。ssm基于微信平台的校园汉服租赁系统的设计与实现。ssm基于SSM高校教师个人主页网站的设计与实现。ssm基于SSM框架的在线健康系统设计与实现。ssm基于HTML的武昌理工学院二手交易网站。ssm基于JavaEE的网上图书分享系统。ssm基于Javaee的项目任务跟踪系统。

Nginx使用之反向代理、负载均衡、动静分离教程。_php动静分离-程序员宅基地

文章浏览阅读61次。负载均衡是指将客户端的请求分发到多个后端服务器,以平衡服务器的负载。反向代理是指将客户端的请求转发到后端服务器,并将响应返回给客户端。通过配置反向代理,Nginx将转发所有来自客户端的请求到后端服务器,并将响应返回给客户端。通过这样的配置,Nginx将根据请求的URL路径选择是将请求转发到后端服务器还是直接返回静态资源文件。通过配置负载均衡,Nginx将按照指定的策略将客户端的请求分发到后端服务器上,从而实现负载均衡。配置反向代理:编辑Nginx配置文件(通常是nginx.conf),在。_php动静分离

HTML5有哪些新特性_谈谈html5的一些新特性-程序员宅基地

文章浏览阅读9.5k次,点赞3次,收藏18次。(一) 语义标签(二)增强型表单(三)视频和音频(四)Canvas绘图(五)SVG绘图(六)地理定位(七)拖放API(八) WebWorker(九) WebStorage(十)Web..._谈谈html5的一些新特性

推荐文章

热门文章

相关标签