技术标签: 鼠太郎学习数据预处理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)
到这里大概是预处理完毕了
文章浏览阅读106次。BASE64编码算法不算是真正的加密算法。 MD5、SHA、HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法,我们称之为单向加密算法。我们通常只把他们作为加密的基础。单纯的以上三种的加密并不可靠。 BASE64 按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The ..._base 64编码 和mad5 和雪花算法
文章浏览阅读1.1k次。IP地址(Internet Protocol Address)是互联网协议地址的简称,是互联网通信的基础,互联网上每一个网络设备的唯一标识符每个在线的设备都需要一个IP地址,这样才能在网络中找到它们并进行数据交换。IP地址有很多种类型,今天跟大家简单分享一下住宅IP、家庭宽带IP以及原生IP的区别。住宅IP通常是指由互联网服务提供商(ISP)分配给家庭的或小型办公室使用的互联网连接IP地址,并可能随着网络连接的变化而变化。此类IP地址主要用于日常网络活动,如浏览网页、发送接收电子邮件、上网冲浪等。
文章浏览阅读2.6w次,点赞14次,收藏30次。如何更改layui form表单位置,宽度,颜色等_layui-form-item 宽度
文章浏览阅读612次。写的非常好_pagraph: scaling gnn training on large graphs via computation-aware caching
文章浏览阅读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
文章浏览阅读204次。题干:C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。 中央情报局要研究敌人究竟演习什...
文章浏览阅读2.3k次。题目描述对数字,字符,数字串,字符串,以及数字与字符串组合进行倒序排列。字符范围:由 a 到 z, A 到 Z,数字范围:由 0 到 9符号的定义:“-”作为连接符使用时作为字符串的一部分,例如“20-years”作为一个整体字符串呈现;连续出现 2 个 “-” 及以上时视为字符串间隔符,如“out--standing”中的”–“视为间隔符,是 2 个独立整体字符串”out”和”standing”;除了 1,2 里面定义的字符以外其他的所有字符,都是非法字符,作为字符串的间隔符处理,倒序后
文章浏览阅读5w次,点赞36次,收藏138次。ArrayAdapter数组适配器用于绑定格式单一的数据,数据源可以是集合或者数组列表视图(ListView)以垂直的形式列出需要显示的列表项。实现过程:新建适配器->添加数据源到适配器->视图加载适配器第一种:直接用ListView组件创建列表每一行只有一行文字效果如图:activity_list布局:<?xml version="1.0" e..._arrayadapter
文章浏览阅读43次。近日,水滴直播平台登上了舆论的风口浪尖。有人认为水滴直播涉嫌侵犯隐私,但也有人表示这种互联网新生事物可以有效规避很多风险,值得鼓励,不应一棒子打死。记者采访时发现,很多商家、创业者对于水滴直播纷纷表示支持,并直言水滴直播为他们的经营带来了很大帮助。 邹志泉在北京丰台区经营着一家批发厂家直销男女内衣裤的店铺,平时就打开水滴直播,分享他在店铺的经营画面。面对水滴直播涉及隐私的提问,邹志泉明确表...
文章浏览阅读67次。springboot基于SpringBoot的电影社区网站。springboot基于springboot食品销售网站。ssm基于微信平台的校园汉服租赁系统的设计与实现。ssm基于SSM高校教师个人主页网站的设计与实现。ssm基于SSM框架的在线健康系统设计与实现。ssm基于HTML的武昌理工学院二手交易网站。ssm基于JavaEE的网上图书分享系统。ssm基于Javaee的项目任务跟踪系统。
文章浏览阅读61次。负载均衡是指将客户端的请求分发到多个后端服务器,以平衡服务器的负载。反向代理是指将客户端的请求转发到后端服务器,并将响应返回给客户端。通过配置反向代理,Nginx将转发所有来自客户端的请求到后端服务器,并将响应返回给客户端。通过这样的配置,Nginx将根据请求的URL路径选择是将请求转发到后端服务器还是直接返回静态资源文件。通过配置负载均衡,Nginx将按照指定的策略将客户端的请求分发到后端服务器上,从而实现负载均衡。配置反向代理:编辑Nginx配置文件(通常是nginx.conf),在。_php动静分离
文章浏览阅读9.5k次,点赞3次,收藏18次。(一) 语义标签(二)增强型表单(三)视频和音频(四)Canvas绘图(五)SVG绘图(六)地理定位(七)拖放API(八) WebWorker(九) WebStorage(十)Web..._谈谈html5的一些新特性