imtoken中文版手机下载|ixi
IXI MEGA 官网 - 新加坡IXI MEGA Pte Ltd公司研发设计 | 音频接口
IXI MEGA 官网 - 新加坡IXI MEGA Pte Ltd公司研发设计 | 音频接口
首页
产品
M1
M2 Plus II
M4 Plus
M6 Plus
M8 Plus II
历史产品
配件
下载
新闻动态
帮助
技术教程
售后申请
品牌介绍
中文
EN
首页
产品
M1
M2 Plus II
M4 Plus
M6 Plus
M8 Plus II
历史产品
配件
下载
新闻动态
帮助
技术教程
售后申请
品牌介绍
返回顶部
最新产品
M1
支持蓝牙无损格式输入,外观更小巧,时尚
M8 Plus
M8 PLUS升级OTG MAX技术,提升移动录音品质
新闻动态
查看更多 >
01/12
2021
IXI MEGA M6PLUS 音频接口,无线,无"限”距
IXI MEGA M6PLUS 支持多路虚拟通道,具备专业声卡应有的录音回放水准,集成低延迟无线监听系统,直播、录音、后期等,都可以满足你的要求~
01/05
2021
上海知名艺术馆艺术派对,艺人采用IXI MEGA M6PLUS录制现场,无线监听,低延迟高保真完美记录。
很荣幸能跟dropd(Ironmic钢铁麦克说唱大赛全国亚军),来到上海一个知名艺术馆使用IXI MEGA M6PLUS。
12/22
2020
IXI MEGA M6PLUS打卡武汉L7 LIVEHOUSE
L7LIVEHOUSE 2018年4月正式运营,至今已服务各类活动300余场,逐渐成为武汉音乐文化领域新地标,主旨为武汉乃至全国的音乐人/艺术家提供展演与交流提供服务。
IXI MEGA首款无线监听音频接口,M6 plus和M4 plus同时发布,硬件全面升级带您进入全新的应用体验!
L7LIVEHOUSE 2018年4月正式运营,至今已服务各类活动300余场,逐渐成为武汉音乐文化领域新地标,主旨为武汉乃至全国的音乐人/艺术家提供展演与交流提供服务.
IXI MEGA M8 Plus M8 开机画面自定义教程
IXI MEGA M2发布最新固件
以下是升级固件的方法(注意:升级之前请保存好您的面板数据,可以公众号预约远程人工客服进行升级,公众号请留言:QQ号码,在线时间段。)下载地址:(请复制到浏览器地址栏打开)
IXI Mega致力于为音频行业提供更出色的产品
首页
产品
M1
M2 Plus
M4 Plus
M6 Plus
M8 Plus II
历史产品
配件
下载
新闻动态
帮助
技术教程
售后申请
品牌介绍
联系我们 邮箱: alen@iximega.com
IXI Mega Pte. Ltd.(公司注册号:201720864C)
GitHub - junyuchen245/Preprocessed_IXI_Dataset: Preprocessed IXI brain MRI dataset with subcortical segmentation
GitHub - junyuchen245/Preprocessed_IXI_Dataset: Preprocessed IXI brain MRI dataset with subcortical segmentation
Skip to content
Toggle navigation
Sign in
Product
Actions
Automate any workflow
Packages
Host and manage packages
Security
Find and fix vulnerabilities
Codespaces
Instant dev environments
Copilot
Write better code with AI
Code review
Manage code changes
Issues
Plan and track work
Discussions
Collaborate outside of code
Explore
All features
Documentation
GitHub Skills
Blog
Solutions
For
Enterprise
Teams
Startups
Education
By Solution
CI/CD & Automation
DevOps
DevSecOps
Resources
Learning Pathways
White papers, Ebooks, Webinars
Customer Stories
Partners
Open Source
GitHub Sponsors
Fund open source developers
The ReadME Project
GitHub community articles
Repositories
Topics
Trending
Collections
Pricing
Search or jump to...
Search code, repositories, users, issues, pull requests...
Search
Clear
Search syntax tips
Provide feedback
We read every piece of feedback, and take your input very seriously.
Include my email address so I can be contacted
Cancel
Submit feedback
Saved searches
Use saved searches to filter your results more quickly
Name
Query
To see all available qualifiers, see our documentation.
Cancel
Create saved search
Sign in
Sign up
You signed in with another tab or window. Reload to refresh your session.
You signed out in another tab or window. Reload to refresh your session.
You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
junyuchen245
/
Preprocessed_IXI_Dataset
Public
Notifications
Fork
1
Star
14
Preprocessed IXI brain MRI dataset with subcortical segmentation
License
View license
14
stars
1
fork
Branches
Tags
Activity
Star
Notifications
Code
Issues
1
Pull requests
0
Actions
Projects
0
Security
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Security
Insights
junyuchen245/Preprocessed_IXI_Dataset
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
mainBranchesTagsGo to fileCodeFolders and filesNameNameLast commit messageLast commit dateLatest commit History19 CommitsIXI_dataset.jpgIXI_dataset.jpg LicenseLicense PreprocessingMRI.mdPreprocessingMRI.md README.mdREADME.md label_info.txtlabel_info.txt View all filesRepository files navigationREADMELicensePreprocessed IXI Dataset
❗ Our preprocessed IXI dataset is made available under the Creative Commons Attribution-ShareAlike 3.0 Unported License. If you use this dataset, you should acknowledge the TransMorph paper:
@article{chen2021transmorph,
title={TransMorph: Transformer for unsupervised medical image registration},
author={Chen, Junyu and Frey, Eric C and He, Yufan and Segars, William P and Li, Ye and Du, Yong},
journal={Medical Image Analysis},
year={2022}
}
and acknowledge the source of the IXI data: https://brain-development.org/ixi-dataset/
About the Dataset
This repository contains a preprocessed IXI brain MRI dataset (https://brain-development.org/ixi-dataset/) used in TransMorph.
Preprocessing: The IXI dataset was preprocessed (e.g., skull stripping, affine alignment, and subcortical segmentation) by using FreeSurfer. The steps we used are listed here - Brain MRI preprocessing and subcortical segmentation using FreeSurfer
Train-Val-Test split: There are 576 brain MRI volumes in total. We split the dataset into a ratio of 7:1:2, where 403 for training (IXI_data/Train/), 58 for validation (IXI_data/Val/), and 115 for testing (IXI_data/Test/).
Atlas image: Additionally, there is one atlas MRI volume and its corresponding subcortical segmentation (IXI_data/altas.pkl). This atlas volume was obtained from CycleMorph.
File format: Each .pkl file contains a T1 weighted brain MRI and its corresponding subcortical segmentation. You can read .pkl file in python by doing:
import pickle
def pkload(fname):
with open(fname, 'rb') as f:
return pickle.load(f)
image, label = pkload("subject_0.pkl")
# image: a preprocessed T1-weighted brain MRI volume. Shape: 160 x 192 x 224 Intensity: [0,1]
# label: the corresponding subcortical segmentations. Shape: 160 x 192 x 224 Intensity: Integers
Label map: A description of each label and the corresponding indexing value is provided here.
Image size: Each image and label map has a size of 160 x 192 x 224.
Normalization: The intensity values of each image volume are normalized into a range [0,1].
Dataset structure:
IXI_data/Train/------
subject_0.pkl <--- a brain T1 MR image and its label map
subject_4.pkl
.......
IXI_data/Val/------
subject_2.pkl
subject_5.pkl
.......
IXI_data/Test/------
subject_1.pkl
subject_3.pkl
.......
IXI_data/atlas.pkl <--- Atlas image and its label map
Download
Download Dataset from Google Drive (1.44G)
Demographic information
Atals-to-Patient Registration
Please visit https://github.com/junyuchen245/TransMorph_Transformer_for_Medical_Image_Registration/blob/main/TransMorph_on_IXI.md for instructions on network training, inference, and evaluation for medical image registration using this dataset.
About Me
About
Preprocessed IXI brain MRI dataset with subcortical segmentation
Topics
medical
medical-imaging
datasets
image-registration
brain-mri
medical-image-registration
public-dataset
Resources
Readme
License
View license
Activity
Stars
14
stars
Watchers
2
watching
Forks
1
fork
Report repository
Releases
No releases published
Packages
0
No packages published
Footer
© 2024 GitHub, Inc.
Footer navigation
Terms
Privacy
Security
Status
Docs
Contact
Manage cookies
Do not share my personal information
You can’t perform that action at this time.
IXI 脑部图像数据集 / 数据集 / 超神经
脑部图像数据集 / 数据集 / 超神经超神经资讯教程数据集百科全站搜索TVM 中文关于IXI 脑部图像数据集日期2 年前大小27.39 GB机构发布地址brain-development.org许可协议其他标签医学图像分析图像分析图像转换分类医学诊断图像生成数据集下载aria2c 下载磁力链下载帮助IXI 全称 IXI Brain Development Dataset,是。该数据集收集了 600 个正常健康受试者的 MRI 影像数据,每个人都同时有 T1 、 T2 、 PD 加权、 MRA 和弥散加权 5 种扫描方式。数据来自伦敦的 3 家医院。
IXI.torrent做种 1下载中 0已完成 13总下载 31IXI/README.md1000 字节README.txt1.95 KBdata/DTI images/IXI-DTI.tar3.98 GBbvals.txt3.98 GBbvecs.txt3.98 GBIXI-MRA.tar15.51 GBIXI-PD.tar19.3 GBIXI-T1.tar23.8 GBIXI-T2.tar27.39 GBIXI.xls27.39 GBHyper Newsletters订阅我们的最新资讯我们会在北京时间 每周一的上午九点 向您的邮箱投递本周内的最新更新订阅 MailChimp提供邮件发送服务学习、理解、实践,与社区一起构建人工智能的未来关于关于我们数据集帮助产品资讯教程数据集百科链接TVM 中文Apache TVMOpenBayes© Hyper.AI 超神经津ICP备17010941号-1京公网安备110105020388
实践教程|使用Pytorch对MRI脑扫描的图像进行分割 - 知乎
实践教程|使用Pytorch对MRI脑扫描的图像进行分割 - 知乎首发于极市平台切换模式写文章登录/注册实践教程|使用Pytorch对MRI脑扫描的图像进行分割极市平台已认证账号作者丨Ines del Val来源丨DeepHub IMBA图像分割是医学图像分析中最重要的任务之一,在许多临床应用中往往是第一步也是最关键的一步。在脑MRI分析中,图像分割通常用于测量和可视化解剖结构,分析大脑变化,描绘病理区域以及手术计划和图像引导干预,分割是大多数形态学分析的先决条件。本文我们将介绍如何使用QuickNAT对人脑的图像进行分割。使用MONAI, PyTorch和用于数据可视化和计算的常见Python库,如NumPy, TorchIO和matplotlib。本文将主要设计以下几个方面:设置数据集和探索数据处理和准备数据集适当的模型训练创建一个训练循环评估模型并分析结果完整的代码会在本文最后提供。设置数据目录使用MONAI的第一步是设置MONAI_DATA_DIRECTORY环境变量指定目录,如果未指定将使用临时目录。 directory \= os.environ.get\("MONAI\_DATA\_DIRECTORY"\)
root\_dir \= tempfile.mkdtemp\(\) if directory is None else directory
print\(root\_dir\)
设置数据集将CNN模型扩展到大脑分割的主要挑战之一是人工注释的训练数据的有限性。作者引入了一种新的训练策略,利用没有手动标签的大型数据集和有手动标签的小型数据集。首先,使用现有的软件工具(例如FreeSurfer)从大型未标记数据集中获得自动生成的分割,然后使用这些工具对网络进行预训练。在第二步中,使用更小的手动注释数据[2]对网络进行微调。IXI数据集由581个健康受试者的未标记MRI T1扫描组成。这些数据是从伦敦3家不同的医院收集来的。使用该数据集的主要缺点是标签不是公开可用的,因此为了遵循与研究论文中相同的方法,本文将使用FreeSurfer为这些MRI T1扫描生成分割。FreeSurfer是一个用于分析和可视化结构的软件包。下载和安装说明可以在这里找到。可以直接使用了“recon-all”命令来执行所有皮层重建过程。尽管FreeSurfer是一个非常有用的工具,可以利用大量未标记的数据,并以监督的方式训练网络,但是扫描生成这些标签需要长达5个小时,所以我们这里直接使用OASIS数据集来训练模型,OASIS数据集是一个较小的数据集,具有公开可用的手动注释。OASIS是一个向科学界免费提供大脑神经成像数据集的项目。OASIS-1是由39个受试者的横断面组成的数据集,获取方式如下: resource \= "https://download.nrg.wustl.edu/data/oasis\_cross-sectional\_disc1.tar.gz"
md5 \= "c83e216ef8654a7cc9e2a30a4cdbe0cc"
compressed\_file \= os.path.join\(root\_dir, "oasis\_cross-sectional\_disc1.tar.gz"\)
data\_dir \= os.path.join\(root\_dir, "Oasis\_Data"\)
if not os.path.exists\(data\_dir\):
download\_and\_extract\(resource, compressed\_file, data\_dir, md5\)
数据探索如果你打开' oasis_crosssectional_disc1 .tar.gz ',你会发现每个主题都有不同的文件夹。例如,对于主题OAS1_0001_MR1,是这样的:镜像数据文件路径:disc1\OAS1_0001_MR1\PROCESSED\MPRAGE\T88_111\ oas1_0001_mr1_mpr_n4_anon_111_t88_masked_ggc .img标签文件:disc1\OAS1_0001_MR1\FSL_SEG\OAS1_0001_MR1_mpr_n4_anon_111_t88_masked_gfc_fseg.img数据加载和预处理下载数据集并将其提取到临时目录后,需要对其进行重构,我们希望我们的目录看起来像这样:所以需要按照下面的步骤加载数据:将img文件转换为nii文件并保存到新文件夹中:创建两个新文件夹。Oasis_Data_Processed包括每个受试者的处理过的MRI T1扫描,Oasis_Labels_Processed包括相应的标签。 new\_path\_data\= root\_dir + '/Oasis\_Data\_Processed/'
if not os.path.exists\(new\_path\_data\):
os.makedirs\(new\_path\_data\)
new\_path\_labels\= root\_dir + '/Oasis\_Labels\_Processed/'
if not os.path.exists\(new\_path\_labels\):
os.makedirs\(new\_path\_labels\)
然后就是对其进行操作: for i in \[x for x in range\(1, 43\) if x \!= 8 and x \!= 24 and x \!= 36\]:
if i \< 7 or i \== 9:
filename \= root\_dir + '/Oasis\_Data/disc1/OAS1\_000'+ str\(i\) + '\_MR1/PROCESSED/MPRAGE/T88\_111/OAS1\_000' + str\(i\) + '\_MR1\_mpr\_n4\_anon\_111\_t88\_masked\_gfc.img'
elif i \== 7:
filename \= root\_dir + '/Oasis\_Data/disc1/OAS1\_000'+ str\(i\) + '\_MR1/PROCESSED/MPRAGE/T88\_111/OAS1\_000' + str\(i\) + '\_MR1\_mpr\_n3\_anon\_111\_t88\_masked\_gfc.img'
elif i\==15 or i\==16 or i\==20 or i\==24 or i\==26 or i\==34 or i\==38 or i\==39:
filename \= root\_dir + '/Oasis\_Data/disc1/OAS1\_00'+ str\(i\) + '\_MR1/PROCESSED/MPRAGE/T88\_111/OAS1\_00' + str\(i\) + '\_MR1\_mpr\_n3\_anon\_111\_t88\_masked\_gfc.img'
else:
filename \= root\_dir + '/Oasis\_Data/disc1/OAS1\_00'+ str\(i\) + '\_MR1/PROCESSED/MPRAGE/T88\_111/OAS1\_00' + str\(i\) + '\_MR1\_mpr\_n4\_anon\_111\_t88\_masked\_gfc.img'
img \= nib.load\(filename\)
nib.save\(img, filename.replace\('.img', '.nii'\)\)
i \= i+1
具体代码就不再粘贴了,有兴趣的看看最后的完整代码。下一步就是读取图像和标签文件名 image\_files \= sorted\(glob\(os.path.join\(root\_dir + '/Oasis\_Data\_Processed', '\*.nii'\)\)\)
label\_files \= sorted\(glob\(os.path.join\(root\_dir + '/Oasis\_Labels\_Processed', '\*.nii'\)\)\)
files \= \[\{'image': image\_name, 'label': label\_name\} for image\_name, label\_name in zip\(image\_files, label\_files\)\]
为了可视化带有相应标签的图像,可以使用TorchIO,这是一个Python库,用于深度学习中多维医学图像的加载、预处理、增强和采样。 image\_filename \= root\_dir + '/Oasis\_Data\_Processed/OAS1\_0001\_MR1\_mpr\_n4\_anon\_111\_t88\_masked\_gfc.nii'
label\_filename \= root\_dir + '/Oasis\_Labels\_Processed/OAS1\_0001\_MR1\_mpr\_n4\_anon\_111\_t88\_masked\_gfc\_fseg.nii'
subject \= torchio.Subject\(image\=torchio.ScalarImage\(image\_filename\), label\=torchio.LabelMap\(label\_filename\)\)
subject.plot\(\)
下面就是将数据分成3部分——训练、验证和测试。将数据分成三个不同的类别的目的是建立一个可靠的机器学习模型,避免过拟合。我们将整个数据集分成三个部分:Train: 80\%,Validation: 10\%,Test: 10\%
train\_inds, val\_inds, test\_inds \= partition\_dataset\(data \= np.arange\(len\(files\)\), ratios \= \[8, 1, 1\], shuffle \= True\)
train \= \[files\[i\] for i in sorted\(train\_inds\)\]
val \= \[files\[i\] for i in sorted\(val\_inds\)\]
test \= \[files\[i\] for i in sorted\(test\_inds\)\]
print\(f"Training count: \{len\(train\)\}, Validation count: \{len\(val\)\}, Test count: \{len\(test\)\}"\)
因为模型需要的是二维切片,所以将每个切片保存在不同的文件夹中,如下图所示。这两个代码单元将训练集的每个MRI体积的切片保存为“.png”格式。 Save coronal slices for training images
dir \= root\_dir + '/TrainData'
os.makedirs\(os.path.join\(dir, "Coronal"\)\)
path \= root\_dir + '/TrainData/Coronal/'
for file in sorted\(glob\(os.path.join\(root\_dir + '/TrainData', '\*.nii'\)\)\):
image\=torchio.ScalarImage\(file\)
data \= image.data
filename \= os.path.basename\(file\)
filename \= os.path.splitext\(filename\)
for i in range\(0, 208\):
slice \= data\[0, :, i\]
array \= slice.numpy\(\)
data\_dir \= root\_dir + '/TrainData/Coronal/' + filename\[0\] + '\_slice' + str\(i\) + '.png'
plt.imsave\(fname \= data\_dir, arr \= array, format \= 'png', cmap \= plt.cm.gray\)
同理,下面是保存标签: dir \= root\_dir + '/TrainLabels'
os.makedirs\(os.path.join\(dir, "Coronal"\)\)
path \= root\_dir + '/TrainLabels/Coronal/'
for file in sorted\(glob\(os.path.join\(root\_dir + '/TrainLabels', '\*.nii'\)\)\):
label \= torchio.LabelMap\(file\)
data \= label.data
filename \= os.path.basename\(file\)
filename \= os.path.splitext\(filename\)
for i in range\(0, 208\):
slice \= data\[0, :, i\]
array \= slice.numpy\(\)
data\_dir \= root\_dir + '/TrainLabels/Coronal/' + filename\[0\] + '\_slice' + str\(i\) + '.png'
plt.imsave\(fname \= data\_dir, arr \= array, format \= 'png'\)
为训练和验证定义图像的变换处理在本例中,我们将使用Dictionary Transforms,其中数据是Python字典。 train\_images\_coronal \= \[\]
for file in sorted\(glob\(os.path.join\(root\_dir + '/TrainData/Coronal', '\*.png'\)\)\):
train\_images\_coronal.append\(file\)
train\_images\_coronal \= natsort.natsorted\(train\_images\_coronal\)
train\_labels\_coronal \= \[\]
for file in sorted\(glob\(os.path.join\(root\_dir + '/TrainLabels/Coronal', '\*.png'\)\)\):
train\_labels\_coronal.append\(file\)
train\_labels\_coronal\= natsort.natsorted\(train\_labels\_coronal\)
val\_images\_coronal \= \[\]
for file in sorted\(glob\(os.path.join\(root\_dir + '/ValData/Coronal', '\*.png'\)\)\):
val\_images\_coronal.append\(file\)
val\_images\_coronal \= natsort.natsorted\(val\_images\_coronal\)
val\_labels\_coronal \= \[\]
for file in sorted\(glob\(os.path.join\(root\_dir + '/ValLabels/Coronal', '\*.png'\)\)\):
val\_labels\_coronal.append\(file\)
val\_labels\_coronal \= natsort.natsorted\(val\_labels\_coronal\)
train\_files\_coronal \= \[\{'image': image\_name, 'label': label\_name\} for image\_name, label\_name in zip\(train\_images\_coronal, train\_labels\_coronal\)\]
val\_files\_coronal \= \[\{'image': image\_name, 'label': label\_name\} for image\_name, label\_name in zip\(val\_images\_coronal, val\_labels\_coronal\)\]
现在我们将应用以下变换:LoadImaged:加载图像数据和元数据。我们使用' PILReader '来加载图像和标签文件。ensure_channel_first设置为True,将图像数组形状转换为通道优先。Rotate90d:我们将图像和标签旋转90度,因为当我们下载它们时,它们方向是不正确的。ToTensord:将输入的图像和标签转换为张量。NormalizeIntensityd:对输入进行规范化。 train\_transforms \= Compose\(
\[
LoadImaged\(keys \= \['image', 'label'\], reader\=PILReader\(converter\=lambda image: image.convert\("L"\)\), ensure\_channel\_first \= True\),
Rotate90d\(keys \= \['image', 'label'\], k \= 2\),
ToTensord\(keys \= \['image', 'label'\]\),
NormalizeIntensityd\(keys \= \['image'\]\)
\]
\)
val\_transforms \= Compose\(
\[
LoadImaged\(keys \= \['image', 'label'\], reader\=PILReader\(converter\=lambda image: image.convert\("L"\)\), ensure\_channel\_first \= True\),
Rotate90d\(keys \= \['image', 'label'\], k \= 2\),
ToTensord\(keys \= \['image', 'label'\]\),
NormalizeIntensityd\(keys \= \['image'\]\)
\]
\)
MaskColorMap将我们定义了一个新的转换,将相应的像素值以一种格式映射为多个标签。这种转换在语义分割中是必不可少的,因为我们必须为每个可能的类别提供二元特征。One-Hot Encoding将对应于原始类别的每个样本的特征赋值为1。因为OASIS-1数据集只有3个大脑结构标签,对于更详细的分割,理想的情况是像他们在研究论文中那样对28个皮质结构进行注释。在OASIS-1下载说明中,可以找到使用FreeSurfer获得的更多大脑结构的标签。所以本文将分割更多的神经解剖结构。我们要将模型的参数num_classes修改为相应的标签数量,以便模型的输出是具有N个通道的特征映射,等于num_classes。为了简化本教程,我们将使用以下标签,比OASIS-1但是要比FreeSurfer的少:Label 0: BackgroundLabel 1: LeftCerebralExteriorLabel 2: LeftWhiteMatterLabel 3: LeftCerebralCortex所以MaskColorMap的代码如下: class MaskColorMap\(Enum\):
Background = \(30\)
LeftCerebralExterior = \(91\)
LeftWhiteMatter = \(137\)
LeftCerebralCortex = \(215\)
数据集和数据加载数据集和数据加载器从存储中提取数据,并将其分批发送给训练循环。这里我们使用monai.data.Dataset加载之前定义的训练和验证字典,并对输入数据应用相应的转换。dataloader用于将数据集加载到内存中。我们将为训练和验证以及每个视图定义一个数据集和数据加载器。为了方便演示,我们使用通过使用torch.utils.data.Subset,在指定的索引处创建一个子集,只是用部分数据训练加快演示速度。 train\_dataset\_coronal \= Dataset\(data\=train\_files\_coronal, transform \= train\_transforms\)
train\_loader\_coronal \= DataLoader\(train\_dataset\_coronal, batch\_size \= 1, shuffle \= True\)
val\_dataset\_coronal \= Dataset\(data \= val\_files\_coronal, transform \= val\_transforms\)
val\_loader\_coronal \= DataLoader\(val\_dataset\_coronal, batch\_size \= 1, shuffle \= False\)
\# We will use a subset of the dataset
subset\_train \= list\(range\(90, len\(train\_dataset\_coronal\), 120\)\)
train\_dataset\_coronal\_subset \= torch.utils.data.Subset\(train\_dataset\_coronal, subset\_train\)
train\_loader\_coronal\_subset \= DataLoader\(train\_dataset\_coronal\_subset, batch\_size \= 1, shuffle \= True\)
subset\_val \= list\(range\(90, len\(val\_dataset\_coronal\), 50\)\)
val\_dataset\_coronal\_subset \= torch.utils.data.Subset\(val\_dataset\_coronal, subset\_val\)
val\_loader\_coronal\_subset \= DataLoader\(val\_dataset\_coronal\_subset, batch\_size \= 1, shuffle \= False\)
定义模型给定一组MRI脑扫描I = {I1,…In}及其对应的分割S = {S1,…Sn},我们想要学习一个函数fseg: I -> S。我们将这个函数表示为F-CNN模型,称为QuickNAT:QuickNAT由三个二维f - cnn组成,分别在coronal, axial, sagittal视图上操作,然后通过聚合步骤推断最终的分割结果,该分割结果由三个网络的概率图组合而成。每个F-CNN都有一个编码器/解码器架构,其中有4个编码器和4个解码器,并由瓶颈层分隔。最后一层是带有softmax的分类器块。该架构还包括每个编码器/解码器块内的残差链接。class QuickNat\(nn.Module\):
"""
A PyTorch implementation of QuickNAT
"""
def \_\_init\_\_\(self, params\):
"""
:param params: \{'num\_channels':1,
'num\_filters':64,
'kernel\_h':5,
'kernel\_w':5,
'stride\_conv':1,
'pool':2,
'stride\_pool':2,
'num\_classes':28
'se\_block': False,
'drop\_out':0.2\}
"""
super\(QuickNat, self\).\_\_init\_\_\(\)
\# from monai.networks.blocks import squeeze\_and\_excitation as se
\# self.cSE = ChannelSELayer\(num\_channels, reduction\_ratio\)
\# self.encode1 = sm.EncoderBlock\(params, se\_block\_type=se.SELayer.CSSE\)
\# params\["num\_channels"\] = params\["num\_filters"\]
\# self.encode2 = sm.EncoderBlock\(params, se\_block\_type=se.SELayer.CSSE\)
\# self.encode3 = sm.EncoderBlock\(params, se\_block\_type=se.SELayer.CSSE\)
\# self.encode4 = sm.EncoderBlock\(params, se\_block\_type=se.SELayer.CSSE\)
\# self.bottleneck = sm.DenseBlock\(params, se\_block\_type=se.SELayer.CSSE\)
\# params\["num\_channels"\] = params\["num\_filters"\] \* 2
\# self.decode1 = sm.DecoderBlock\(params, se\_block\_type=se.SELayer.CSSE\)
\# self.decode2 = sm.DecoderBlock\(params, se\_block\_type=se.SELayer.CSSE\)
\# self.decode3 = sm.DecoderBlock\(params, se\_block\_type=se.SELayer.CSSE\)
\# self.decode4 = sm.DecoderBlock\(params, se\_block\_type=se.SELayer.CSSE\)
\# self.encode1 = EncoderBlock\(params, se\_block\_type=se.ChannelSELayer\)
self.encode1 \= EncoderBlock\(params, se\_block\_type\=se.SELayer.CSSE\)
params\["num\_channels"\] \= params\["num\_filters"\]
self.encode2 \= EncoderBlock\(params, se\_block\_type\=se.SELayer.CSSE\)
self.encode3 \= EncoderBlock\(params, se\_block\_type\=se.SELayer.CSSE\)
self.encode4 \= EncoderBlock\(params, se\_block\_type\=se.SELayer.CSSE\)
self.bottleneck \= DenseBlock\(params, se\_block\_type\=se.SELayer.CSSE\)
params\["num\_channels"\] \= params\["num\_filters"\] \* 2
self.decode1 \= DecoderBlock\(params, se\_block\_type\=se.SELayer.CSSE\)
self.decode2 \= DecoderBlock\(params, se\_block\_type\=se.SELayer.CSSE\)
self.decode3 \= DecoderBlock\(params, se\_block\_type\=se.SELayer.CSSE\)
self.decode4 \= DecoderBlock\(params, se\_block\_type\=se.SELayer.CSSE\)
params\["num\_channels"\] \= params\["num\_filters"\]
self.classifier \= ClassifierBlock\(params\)
def forward\(self, input\):
"""
:param input: X
:return: probabiliy map
"""
e1, out1, ind1 \= self.encode1.forward\(input\)
e2, out2, ind2 \= self.encode2.forward\(e1\)
e3, out3, ind3 \= self.encode3.forward\(e2\)
e4, out4, ind4 \= self.encode4.forward\(e3\)
bn \= self.bottleneck.forward\(e4\)
d4 \= self.decode4.forward\(bn, out4, ind4\)
d3 \= self.decode1.forward\(d4, out3, ind3\)
d2 \= self.decode2.forward\(d3, out2, ind2\)
d1 \= self.decode3.forward\(d2, out1, ind1\)
prob \= self.classifier.forward\(d1\)
return prob
def enable\_test\_dropout\(self\):
"""
Enables test time drop out for uncertainity
:return:
"""
attr\_dict \= self.\_\_dict\_\_\["\_modules"\]
for i in range\(1, 5\):
encode\_block, decode\_block \= \(
attr\_dict\["encode" + str\(i\)\],
attr\_dict\["decode" + str\(i\)\],
\)
encode\_block.drop\_out \= encode\_block.drop\_out.apply\(nn.Module.train\)
decode\_block.drop\_out \= decode\_block.drop\_out.apply\(nn.Module.train\)
\@property
def is\_cuda\(self\):
"""
Check if model parameters are allocated on the GPU.
"""
return next\(self.parameters\(\)\).is\_cuda
def save\(self, path\):
"""
Save model with its parameters to the given path. Conventionally the
path should end with '\*.model'.
Inputs:
- path: path string
"""
print\("Saving model... \%s" \% path\)
torch.save\(self.state\_dict\(\), path\)
def predict\(self, X, device\=0, enable\_dropout\=False\):
"""
Predicts the output after the model is trained.
Inputs:
- X: Volume to be predicted
"""
self.eval\(\)
print\("tensor size before transformation", X.shape\)
if type\(X\) is np.ndarray:
\# X = torch.tensor\(X, requires\_grad=False\).type\(torch.FloatTensor\)
X \= \(
torch.tensor\(X, requires\_grad\=False\)
.type\(torch.FloatTensor\)
.cuda\(device, non\_blocking\=True\)
\)
elif type\(X\) is torch.Tensor and not X.is\_cuda:
X \= X.type\(torch.FloatTensor\).cuda\(device, non\_blocking\=True\)
print\("tensor size ", X.shape\)
if enable\_dropout:
self.enable\_test\_dropout\(\)
with torch.no\_grad\(\):
out \= self.forward\(X\)
max\_val, idx \= torch.max\(out, 1\)
idx \= idx.data.cpu\(\).numpy\(\)
prediction \= np.squeeze\(idx\)
print\("prediction shape", prediction.shape\)
del X, out, idx, max\_val
return prediction
损失函数神经网络的训练需要一个损失函数来计算模型误差。训练的目标是最小化预测输出和目标输出之间的损失。我们的模型使用Dice Loss 和Weighted Logistic Loss的联合损失函数进行优化,其中权重补偿数据中的高类不平衡,并鼓励正确分割解剖边界。优化器优化算法允许我们继续更新模型的参数并最小化损失函数的值,我们设置了以下的超参数:学习率:初始设置为0.1,10次后降低1阶。这可以通过学习率调度器来实现。权重衰减:0.0001。批量大小:1。动量:设置为0.95的高值,以补偿由于小批量大小而产生的噪声梯度。训练网络现在可以训练模型了。对于QuickNAT需要在3个(coronal, axial, sagittal)2d切片上训练3个模型。然后再聚合步骤中组合三个模型的概率生成最终结果,但是本文中只演示在coronal视图的2D切片上训练一个F-CNN模型,因为其他两个与之类似。 num\_epochs \= 20
start\_epoch \= 1
val\_interval \= 1
train\_loss\_epoch\_values \= \[\]
val\_loss\_epoch\_values \= \[\]
best\_ds\_mean \= \-1
best\_ds\_mean\_epoch \= \-1
ds\_mean\_train\_values \= \[\]
ds\_mean\_val\_values \= \[\]
\# ds\_LCE\_values = \[\]
\# ds\_LWM\_values = \[\]
\# ds\_LCC\_values = \[\]
print\("START TRAINING. : model name = ", "quicknat"\)
for epoch in range\(start\_epoch, num\_epochs\):
print\("==== Epoch \["+ str\(epoch\) + " / "+ str\(num\_epochs\)+ "\] DONE ===="\)
checkpoint\_name \= CHECKPOINT\_DIR + "/checkpoint\_epoch\_" + str\(epoch\) + "." + CHECKPOINT\_EXTENSION
print\(checkpoint\_name\)
state \= \{
"epoch": epoch,
"arch": "quicknat",
"state\_dict": model\_coronal.state\_dict\(\),
"optimizer": optimizer.state\_dict\(\),
"scheduler": scheduler.state\_dict\(\),
\}
save\_checkpoint\(state \= state, filename \= checkpoint\_name\)
print\("\\n==== Epoch \[ \%d / \%d \] START ====" \% \(epoch, num\_epochs\)\)
steps\_per\_epoch \= len\(train\_dataset\_coronal\_subset\) / train\_loader\_coronal\_subset.batch\_size
model\_coronal.train\(\)
train\_loss\_epoch \= 0
val\_loss\_epoch \= 0
step \= 0
predictions\_train \= \[\]
labels\_train \= \[\]
predictions\_val \= \[\]
labels\_val \= \[\]
for i\_batch, sample\_batched in enumerate\(train\_loader\_coronal\_subset\):
inputs \= sample\_batched\['image'\].type\(torch.FloatTensor\)
labels \= sample\_batched\['label'\].type\(torch.LongTensor\)
\# print\(f"Train Input Shape: \{inputs.shape\}"\)
labels \= labels.squeeze\(1\)
\_img\_channels, \_img\_height, \_img\_width \= labels.shape
encoded\_label\= np.zeros\(\(\_img\_height, \_img\_width, 1\)\).astype\(int\)
for j, cls in enumerate\(MaskColorMap\):
encoded\_label\[np.all\(labels \== cls.value, axis \= 0\)\] \= j
labels \= encoded\_label
labels \= torch.from\_numpy\(labels\)
labels \= torch.permute\(labels, \(2, 1, 0\)\)
\# print\(f"Train Label Shape: \{labels.shape\}"\)
\# plt.title\("Train Label"\)
\# plt.imshow\(labels\[0, :, :\]\)
\# plt.show\(\)
optimizer.zero\_grad\(\)
outputs \= model\_coronal\(inputs\)
loss \= loss\_function\(outputs, labels\)
loss.backward\(\)
optimizer.step\(\)
scheduler.step\(\)
with torch.no\_grad\(\):
\_, batch\_output \= torch.max\(outputs, dim \= 1\)
\# print\(f"Train Prediction Shape: \{batch\_output.shape\}"\)
\# plt.title\("Train Prediction"\)
\# plt.imshow\(batch\_output\[0, :, :\]\)
\# plt.show\(\)
predictions\_train.append\(batch\_output.cpu\(\)\)
labels\_train.append\(labels.cpu\(\)\)
train\_loss\_epoch += loss.item\(\)
print\(f"\{step\}/\{len\(train\_dataset\_coronal\_subset\) // train\_loader\_coronal\_subset.batch\_size\}, Training\_loss: \{loss.item\(\):.4f\}"\)
step += 1
predictions\_train\_arr, labels\_train\_arr \= torch.cat\(predictions\_train\), torch.cat\(labels\_train\)
\# print\(predictions\_train\_arr.shape\)
dice\_metric\(predictions\_train\_arr, labels\_train\_arr\)
ds\_mean\_train \= dice\_metric.aggregate\(\).item\(\)
ds\_mean\_train\_values.append\(ds\_mean\_train\)
dice\_metric.reset\(\)
train\_loss\_epoch /= step
train\_loss\_epoch\_values.append\(train\_loss\_epoch\)
print\(f"Epoch \{epoch + 1\} Train Average Loss: \{train\_loss\_epoch:.4f\}"\)
if \(epoch + 1\) \% val\_interval \== 0:
model\_coronal.eval\(\)
step \= 0
with torch.no\_grad\(\):
for i\_batch, sample\_batched in enumerate\(val\_loader\_coronal\_subset\):
inputs \= sample\_batched\['image'\].type\(torch.FloatTensor\)
labels \= sample\_batched\['label'\].type\(torch.LongTensor\)
\# print\(f"Val Input Shape: \{inputs.shape\}"\)
labels \= labels.squeeze\(1\)
integer\_encoded\_labels \= \[\]
\_img\_channels, \_img\_height, \_img\_width \= labels.shape
encoded\_label\= np.zeros\(\(\_img\_height, \_img\_width, 1\)\).astype\(int\)
for j, cls in enumerate\(MaskColorMap\):
encoded\_label\[np.all\(labels \== cls.value, axis \= 0\)\] \= j
labels \= encoded\_label
labels \= torch.from\_numpy\(labels\)
labels \= torch.permute\(labels, \(2, 1, 0\)\)
\# print\(f"Val Label Shape: \{labels.shape\}"\)
\# plt.title\("Val Label"\)
\# plt.imshow\(labels\[0, :, :\]\)
\# plt.show\(\)
val\_outputs \= model\_coronal\(inputs\)
val\_loss \= loss\_function\(val\_outputs, labels\)
predicted \= torch.argmax\(val\_outputs, dim \= 1\)
\# print\(f"Val Prediction Shape: \{predicted.shape\}"\)
\# plt.title\("Val Prediction"\)
\# plt.imshow\(predicted\[0, :, :\]\)
\# plt.show\(\)
predictions\_val.append\(predicted\)
labels\_val.append\(labels\)
val\_loss\_epoch += val\_loss.item\(\)
print\(f"\{step\}/\{len\(val\_dataset\_coronal\_subset\) // val\_loader\_coronal\_subset.batch\_size\}, Validation\_loss: \{val\_loss.item\(\):.4f\}"\)
step += 1
predictions\_val\_arr, labels\_val\_arr \= torch.cat\(predictions\_val\), torch.cat\(labels\_val\)
dice\_metric\(predictions\_val\_arr, labels\_val\_arr\)
\# dice\_metric\_batch\(predictions\_val\_arr, labels\_val\_arr\)
ds\_mean\_val \= dice\_metric.aggregate\(\).item\(\)
ds\_mean\_val\_values.append\(ds\_mean\_val\)
\# ds\_mean\_val\_batch = dice\_metric\_batch.aggregate\(\)
\# ds\_LCE = ds\_mean\_val\_batch\[0\].item\(\)
\# ds\_LCE\_values.append\(ds\_LCE\)
\# ds\_LWM = ds\_mean\_val\_batch\[1\].item\(\)
\# ds\_LWM\_values.append\(ds\_LWM\)
\# ds\_LCC = ds\_mean\_val\_batch\[2\].item\(\)
\# ds\_LCC\_values.append\(ds\_LCC\)
dice\_metric.reset\(\)
\# dice\_metric\_batch.reset\(\)
if ds\_mean\_val \> best\_ds\_mean:
best\_ds\_mean \= ds\_mean\_val
best\_ds\_mean\_epoch \= epoch + 1
torch.save\(model\_coronal.state\_dict\(\), os.path.join\(BESTMODEL\_DIR, "best\_metric\_model\_coronal.pth"\)\)
print\("Saved new best metric model coronal"\)
print\(
f"Current Epoch: \{epoch + 1\} Current Mean Dice score is: \{ds\_mean\_val:.4f\}"
f"\\nBest Mean Dice score: \{best\_ds\_mean:.4f\} "
\# f"\\nMean Dice score Left Cerebral Exterior: \{ds\_LCE:.4f\} Mean Dice score Left White Matter: \{ds\_LWM:.4f\} Mean Dice score Left Cerebral Cortex: \{ds\_LCC:.4f\} "
f"at Epoch: \{best\_ds\_mean\_epoch\}"
\)
val\_loss\_epoch /= step
val\_loss\_epoch\_values.append\(val\_loss\_epoch\)
print\(f"Epoch \{epoch + 1\} Average Validation Loss: \{val\_loss\_epoch:.4f\}"\)
print\("FINISH."\)
代码也是传统的Pytorch的训练步骤,就不详细解释了绘制损失和精度曲线训练曲线表示模型的学习情况,验证曲线表示模型泛化到未见实例的情况。我们使用matplotlib来绘制图形。还可以使用TensorBoard,它使理解和调试深度学习程序变得更容易,并且是实时的。 epoch \= range\(1, num\_epochs + 1\)
\# Plot Loss Curves
plt.figure\(figsize\=\(18, 6\)\)
plt.subplot\(1, 3, 1\)
plt.plot\(epoch, train\_loss\_epoch\_values, label\='Training Loss'\)
plt.plot\(epoch, val\_loss\_epoch\_values, label\='Validation Loss'\)
plt.title\('Training and Validation Loss'\)
plt.xlabel\('Epoch'\)
plt.legend\(\)
plt.figure\(\)
plt.show\(\)
\# Plot Train Dice Coefficient Curve
plt.figure\(figsize\=\(18, 6\)\)
plt.subplot\(1, 3, 2\)
x \= \[\(i + 1\) for i in range\(len\(ds\_mean\_train\_values\)\)\]
plt.plot\(x, ds\_mean\_train\_values, 'blue', label \= 'Train Mean Dice Score'\)
plt.title\("Training Mean Dice Coefficient"\)
plt.xlabel\('Epoch'\)
plt.ylabel\('Mean Dice Score'\)
plt.show\(\)
\# Plot Validation Dice Coefficient Curve
plt.figure\(figsize\=\(18, 6\)\)
plt.subplot\(1, 3, 3\)
x \= \[\(i + 1\) for i in range\(len\(ds\_mean\_val\_values\)\)\]
plt.plot\(x, ds\_mean\_val\_values, 'orange', label \= 'Validation Mean Dice Score'\)
plt.title\("Validation Mean Dice Coefficient"\)
plt.xlabel\('Epoch'\)
plt.ylabel\('Mean Dice Score'\)
plt.show\(\)
在曲线中,我们可以看到模型是过拟合的,因为验证损失上升而训练损失下降。这是深度学习算法中一个常见的陷阱,其中模型最终会记住训练数据,而无法对未见过的数据进行泛化。避免过度拟合的技巧:用更多的数据进行训练:更大的数据集可以减少过拟合。数据增强:如果我们不能收集更多的数据,我们可以应用数据增强来人为地增加数据集的大小。添加正则化:正则化是一种限制我们的网络学习过于复杂的模型的技术,因此可能会过度拟合。评估网络我们如何度量模型的性能?一个成功的预测是一个最大限度地扩大预测和真实之间的重叠。这一目标的两个相关但不同的指标是Dice和Intersection / Union (IoU)系数,后者也被称为Jaccard系数。两个指标都在0(无重叠)和1(完全重叠)之间。这两种指标都可以用于类似的情况,但是区别在于Dice Score倾向于平均表现,而IoU则帮助你理解最坏情况下的表现。我们可以逐个类地检查度量标准,或者取所有类的平均值。这里将使用monai.metrics.DiceMetric来计算分数。一个更通用的方法是使用torchmetrics,但是因为这里使用了monai框架,所以就直接使用它内置的函数了。我们可以看到Dice得分曲线的行为相当不寻常。主要是因为验证平均Dice得分高于1,这是不可能的,因为这个度量是在0和1之间。我们无法确定这种行为的主要原因,但我们建议在多类问题中为每个类单独提供度量计算,并始终提供可视化示例以进行可视化评估。结果分析最后我们要看看模型是如何推广到未知数据的这个模型预测的几乎所有东西都是左脑白质,一些像素是左脑皮层。尽管它的预测似乎是正确的,但仍有很大的改进空间,因为我们的模型太小了,可以选择更深的模型获得更好的效果。总结在本文中,我们介绍了如何训练QuickNAT来完成具有挑战性的大脑分割任务。我们尽可能遵循作者在他们的研究论文中解释的学习策略,这是本教程为了方便演示只在最简单的步骤上进行了演示,文本的完整代码:https://github.com/inesdv26/Brain-Segmentation往期精选数据集汇总:人脸识别常用数据集大全行人检测数据集汇总10个开源工业检测数据集汇总21个深度学习开源数据集分类汇总(持续更新)小目标检测、图像分类、图像识别等开源数据集汇总人体姿态估计相关开源数据集介绍及汇总小目标检测相关开源数据集介绍及汇总医学图像开源数据集汇总自动驾驶方向开源数据集资源汇总目标检测开源数据集汇总(二)RGB-T 相关开源数据集资源汇总图像去雾开源数据集资源汇总图像分类方向优质开源数据集汇总(附下载链接)顶会资源:CVPR'23 最新 89 篇论文分方向整理|涵盖视频目标检测、关键点检测、异常检测、语义分割、超分辨率、图像去噪等方向CVPR'23 最新 125 篇论文分方向整理|检测、分割、人脸、视频处理、医学影像、神经网络结构、小样本学习等方向CVPR'23 最新 70 篇论文分方向整理|包含目标检测、图像处理、人脸、医学影像、半监督学习等方向CVPR 2023 论文速递 (35篇打包下载)涵盖异常检测、语义分割、三维重建、点云、医学影像、目标跟踪、行为识别等方向CVPR 2023 论文速递 (54篇打包下载)涵盖实例分割、语义分割、神经网络结构、三维重建、监督学习、图像复原等方向ECCV22 最新54篇论文分方向整理|包含目标检测、图像分割、监督学习等(附下载)CVPR 2022 全面盘点:最新250篇论文分方向汇总 / 代码 / 解读 / 直播 / 项目(更新中)CVPR'22 最新106篇论文分方向整理|包含目标检测、动作识别、图像处理等32个方向一文看尽 CVPR2022 最新 22 篇论文(附打包下载)17 篇 CVPR 2022 论文速递|涵盖 3D 目标检测、医学影像、车道线检测等方向CVPR 2021 结果出炉!最新500篇CVPR'21论文分方向汇总(更新中)CVPR 2021 结果出炉!最新600篇CVPR'21论文分方向汇总(更新中)CVPR 2020 Oral 汇总:论文/代码/解读(更新中)CVPR 2019 最全整理:全部论文下载,Github源码汇总、直播视频、论文解读等CVPR 2018 论文解读集锦(9月27日更新)CVPR 2018 目标检测(object detection)算法总览ECCV 2018 目标检测(object detection)算法总览(部分含代码)CVPR 2017 论文解读集锦(12-13更新)2000 ~2020 年历届 CVPR 最佳论文汇总技术综述:万字长文 | 手把手教你优化轻量姿态估计模型(算法篇)工业应用中如何选取合适的损失函数(MAE、MSE、Huber)-Pytorch版综述:图像处理中的注意力机制搞懂Transformer结构,看这篇PyTorch实现就够了熬了一晚上,我从零实现了Transformer模型,把代码讲给你听YOLO算法最全综述:从YOLOv1到YOLOv5图像匹配大领域综述!涵盖 8 个子领域,近 20年经典方法汇总一文读懂深度学习中的各种卷积万字综述|核心开发者全面解读Pytorch内部机制19个损失函数汇总,以Pytorch为例一文看尽深度学习中的15种损失函数14种异常检测方法总结PyTorch常用代码段合集神经网络压缩综述理论深挖:深入探讨:为什么要做特征归一化/标准化?令人“细思极恐”的Faster-R-CNN论文盘点:图像分割二十年,盘点影响力最大的10篇论文2020年54篇最新CV领域综述论文速递!涵盖14个方向:目标检测/图像分割/医学影像/人脸识别等实践/面经/求学:如何配置一台深度学习工作站?国内外优秀的计算机视觉团队汇总50种Matplotlib科研论文绘图合集,含代码实现图像处理知多少?准大厂算法工程师30+场秋招后总结的面经问题详解深度学习三十问!一位算法工程师经历30+场CV面试后总结的常见问题合集(含答案)深度学习六十问!一位算法工程师经历30+场CV面试后总结的常见问题合集下篇(含答案)一位算法工程师从30+场秋招面试中总结出的目标检测算法面经(含答案)一位算法工程师从30+场秋招面试中总结出的语义分割超强面经(含答案)Github优质资源:25个【Awsome】GitHub 资源汇总(更新中)超强合集:OCR 文本检测干货汇总(含论文、源码、demo 等资源)2019-2020年目标跟踪资源全汇总(论文、模型代码、优秀实验室)发布于 2023-05-05 10:51・IP 属地广东深度学习(Deep Learning)PyTorch图像分割赞同 5添加评论分享喜欢收藏申请转载文章被以下专栏收录极市平台原创计算机视觉技术干货分享,微信公众号:极
IXI MEGA旗舰店 - 京东
IXI MEGA旗舰店 - 京东
京东首页
你好,请登录 免费注册
我的订单
我的京东
京东会员
企业采购
客户服务
网站导航
手机京东
更多导航服装城食品团购夺宝岛闪购金融
我的京东
加载中,请稍候...
20去购物车结算
加载中,请稍候...
首页
全部分类
所有商品
品牌介绍
售后服务
查看所有商品
多品类齐全,轻松购物
快多仓直发,极速配送
好正品行货,精致服务
省天天低价,畅选无忧
购物指南
购物流程
会员介绍
生活旅行/团购
常见问题
大家电
联系客服
配送方式
上门自提
211限时达
配送服务查询
配送费收取标准
海外配送
支付方式
货到付款
在线支付
分期付款
邮局汇款
公司转账
售后服务
售后政策
价格保护
退款说明
返修/退换货
取消订单
特色服务
夺宝岛
DIY装机
延保服务
京东E卡
京东通信
京东JD+
关于我们|
联系我们|
联系客服|
合作招商|
商家帮助|
营销中心|
手机京东|
友情链接|
销售联盟|
京东社区|
风险监测|
隐私政策|
京东公益|
English Site|
Contact Us
京公网安备 11000002000088号|京ICP证070359号|
互联网药品信息服务资格证编号(京)-经营性-2014-0008|新出发京零 字第大120007号
互联网出版许可证编号新出网证(京)字150号|
出版物经营许可证|
网络文化经营许可证京网文[2014]2148-348号|违法和不良信息举报电话:4006561155
Copyright © 2004 - 2020 京东JD.com 版权所有|消费者维权热线:4006067733
经营证照
|
(京)网械平台备字(2018)第00003号
|
营业执照
Global Site|
Сайт России|
Situs Indonesia|
Sitio de España|
เว็บไซต์ประเทศไทย
京东旗下网站:
京东钱包|
京东云
可信网站信用评估
网络警察提醒你
诚信网站
中国互联网举报中心
网络举报APP下载
国家知识产权公共服务网
手机扫一扫,劲爆优惠触手可得!
商品比较
IXI数据预处理 + Linux + freesurfer_ixi数据集-CSDN博客
>IXI数据预处理 + Linux + freesurfer_ixi数据集-CSDN博客
IXI数据预处理 + Linux + freesurfer
Emily卷得动
已于 2022-11-06 22:07:01 修改
阅读量1.7k
收藏
9
点赞数
1
分类专栏:
医学图像配准
文章标签:
linux
python
于 2022-11-06 22:03:31 首次发布
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Emily_Buffy/article/details/127721905
版权
医学图像配准
专栏收录该内容
2 篇文章
0 订阅
订阅专栏
目录
1. freesurfer下载安装测试1.1 下载受阻,安装axel-2.4,多线程下载1.2 安装1.3 安装时出现的问题1.4 测试1.5 使用前注意
2. freesurfer 处理IXI2.1 freesurfer 的使用2.2 从零开始处理IXI2.2.1 命令行skull_stripping 单个.nii文件2.2.2 分析处理完成后的文件2.2.3 仿射对齐.nii2.2.4 批量处理IXI2.2.5 批skull_stripping2.2.5 批修改文件brainmask_affine.mgz类型为brain_aff.nii.gz2.2.6 批量修改文件名,移动到同一个文件夹,并重命名
总结
1. freesurfer下载安装测试
1.1 下载受阻,安装axel-2.4,多线程下载
由于网络网速受阻,一直无法下载,总是中断。于是我在linux 上安装axel -2.4 插件,支持多线程下载。 参考:axel-2.4 安装教程。共计13个小时,下载完成。
1.2 安装
参考: freesurfer 安装参考1 freesurfer安装参考2
1.3 安装时出现的问题
输入sudo gedit /etc/profile 出现错误:Unable to init server: Could not connect: Connection refused 原因,使用的vscode 远程连接ubuntu 服务器,不支持图形界面,改为vi或者nano ubuntu vi 打开编辑内容后,如何保存 Ubuntu vi 打开后 如何换行 Ubuntu移动和复制文件夹到另一个文件夹
1.4 测试
安装测试freesurfer
1.5 使用前注意
(1)更改 .bashrc 不要在root 下的ect/.bashrc ,在个人的/home/自己的环境名/.bashrc (2)每次使用之前都要设置环境变量 linux freesurfer
export FREESURFER_HOME=/usr/local/freesurfer
source $FREESURFER_HOME/SetUpFreeSurfer.sh
2. freesurfer 处理IXI
2.1 freesurfer 的使用
参考1 freesurfer 中文教程 freesurfer recon-all 讲解
2.2 从零开始处理IXI
2.2.1 命令行skull_stripping 单个.nii文件
安装tcsh ,因为freesurfer 的recon-all 要求在tcsh 下运行
sudo apt-get install tcsh
由于在个人的/home/xukepeng/.bashrc 添加了
export FREESURFER_HOME=/usr/local/freesurfer
source $FREESURFER_HOME/SetUpFreeSurfer.sh
每次打开bash 每次使用之前都要 修改 SUBJECTS_DIR
export SUBJECTS_DIR=/data/../Learn/pytorch/IXI_T1——single
测试一个.nii文件的处理
recon-all -i pytorch/IXI_T1/*.nii -autorecon1 -subjid output
会在SUBJECTS_DIR路径下自动生成output 文件夹 处理一份.nii文件,共计13分钟
2.2.2 分析处理完成后的文件
output/mri/brainmask.mgz 为生成的去除头骨后的图像 output/mri/transforms/talairach.xfm为仿射对齐矩阵 将.mgz转为.nii.gz 方便查看
mri_convert brainmask.mgz brainmash.nii.gz
远程显示.nii
import SimpleITK as itk
from matplotlib import pyplot as plt
def show_nii(img):
slices=1
for i in range(0,img.shape[0],10):#注意这里的间隔选取,需要参考img.shape=[256,256,256]
plt.subplot(6,5,slices) #注意这里不能天i+1,因为i是以10增加
plt.imshow(img[i,:,:],cmap='gray')
plt.axis('off')
slices+=1
itk_img=itk.ReadImage('../Learn/pytorch/IXI_T1/output/mri/brainmash.nii.gz')
img=itk.GetArrayFromImage(itk_img)
show_nii(img)
plt.savefig('IXI_skull-stripped.jpg')
plt.show()
2.2.3 仿射对齐.nii
绝对路径,打点只是我个人为了隐去名字
cd /data/../pytorch/IXI_T1_single/output/mri
export SUBJECTS_DIR=/data/../pytorch/IXI_T1_single/output
运行:注意要指定生成的文件类型,否则报错
mri_convert brainmask.mgz --apply_transform /transforms/talairach.xfm -o /mri/brainmask_affine.mgz
brainmask_affine.mgz 在
/data/../Learn/pytorch/IXI_T1_single/output/mri/brainmask_affine.mgz
2.2.4 批量处理IXI
tar -xvf 文件名 -C 存到指定路径
批量移动文件夹
mv *.nii.gz /data/../Learn/voxelmorph/IXI_T1
screen 操作 os.path.split 分离路径和当前文件名 os.path.splitext 分离文件名和后缀 cmd & 与 && 区别
import os
import glob
images=glob.glob('/data/../Learn/voxelmorph/IXI_T1/*.nii.gz')
#print(images) #返回一堆路径
(filepath,tempfilename)=os.path.split(images[0])
print(filepath)
print(tempfilename)
(filename,extension)=os.path.splitext(tempfilename)
print(filename)
print(extension)
print(filename[:-4])
每一个单独的.nii.gz 处理后都有单独的文件夹存储
2.2.5 批skull_stripping
import os
import glob
path=r"/data/../Learn/voxelmorph/IXI_T1/"
#读取目录下的nii.gz文件
images=glob.glob('/data/../Learn/voxelmorph/IXI_T1/*.nii.gz')
#为freesurfer环境配置命令
a="export FREESURFER_HOME=/usr/local/freesurfer;"
b="source $FREESURFER_HOME/SetUpFreeSurfer.sh;"
#数据所在目录
c="export SUBJECTS_DIR=/data/../Learn/voxelmorph/IXI_T1;"
for image in images:
#将文件路径与文件名分离
(filepath,tempfilename)=os.path.split(image) #返回文件的路径和文件名
(filename,extension)=os.path.splitext(tempfilename)
#freesurfer环境配置,颅骨去除,未仿射对齐.mpz转.nii,仿射对齐,仿射对齐.mpz转.nii
cmd = a + b + c \
# + "recon-all -i " + image + " -autorecon1 -subjid " + filename[:-4] + "&&" \
# + "mri_convert /" + path + filename[:-4] + "/mri/brainmask.mgz /" + path + filename[:-4] \
# + "/mri/brainmask.nii.gz;"\
+ "mri_convert " + path + filename[:-4] + "/mri/brainmask.mgz --apply_transform " + path + filename[:-4] \
+ "/mri/transforms/talairach.xfm -o " + path + filename[:-4] + "/mri/brainmask_affine.mgz&&" \
+ "mri_convert /" + path + filename[:-4] + "/mri/brainmask_affine.mgz /" + path + filename[:-4] \
+ "/mri/brainmask_affine.nii.gz;"
os.system(cmd)
#程序中断
2.2.5 批修改文件brainmask_affine.mgz类型为brain_aff.nii.gz
python 读取不同文件夹下相似的文件名 glob 结合通配符星号(*)、问号(?)和中括号 使用 格式化命名format
import os
import glob
import sys
"""
1.修改文件类型为brain_aff.nii.gz #不能直接放到train_vol 会被覆盖
"""
path=r"../Learn/voxelmorph/IXI_T1/"#错误,少了单斜杠
images=glob.glob('../Learn/voxelmorph/IXI_T1/*.nii.gz')# 读取
#print(images)
a="export FREESURFER_HOME=/usr/local/freesurfer;"
b="source $FREESURFER_HOME/SetUpFreeSurfer.sh;"
#数据所在目录
c="export SUBJECTS_DIR=../project/Learn/voxelmorph/IXI_T1;"
for image in images:
#filename=image[48:54]
#print(filename)
(filepath,tempfilename)=os.path.split(image) #返回文件的路径和文件名
(filename,extension)=os.path.splitext(tempfilename)
cmd = a+b+c+ "mri_convert " + path + filename[:-4] + "/mri/brainmask_affine.mgz " + path +filename[:-4]+"/mri/brain_aff.nii.gz"
os.system(cmd)
2.2.6 批量修改文件名,移动到同一个文件夹,并重命名
import os
import glob
"""
1。批量修改文件名
2.移动到同一文件夹下
"""
#path=r"/data/../Learn/voxelmorph/IXI_T1/"
#获得编号名
#filename_list=glob.glob('/data/../Learn/voxelmorph/IXI_T1/*.nii.gz')
path_list=glob.glob('/data/../Learn/voxelmorph/IXI_T1/*T1/mri/*.nii.gz')
""""给../mri/brain_aff.nii.gz更名"""
#print(len(path_list))
# a=0
# for i in path_list:
# used_name=path_list[a]+os.sep+'mri/brain_aff.nii.gz'
# print(ssss)
# new_name=path_list[a]+os.sep+'mri/sub_'+str(a)+'.nii.gz'
# print(ssssss)
# os.rename(used_name,new_name)
# a+=1
"""复制到文件夹train_vol"""
# for path in path_list:
# (filepath,tempfilename)=os.path.split(path)
# print(filepath)
# print(tempfilename)
# cmd="cd "+filepath+";"+"sudo cp " + tempfilename+ " /data/../Learn/voxelmorph/IXI_T1/train_vol/"
# os.system(cmd)
"""格式化命名1 -> 001 , 数字补0"""
#path=input('/data/../Learn/voxelmorph/IXI_T1/train_vol/')
file_list=os.listdir(os.getcwd())
#print(len(file_list))
n=0
for f in file_list:
(filename,extension)=os.path.splitext(f)
oldname=os.getcwd()+os.sep+file_list[n]
num=filename[4:-4]
#print(name)
num='{:0>3}'.format(num) #补齐
#print(num)
newname=os.getcwd()+os.sep+'sub-'+str(num)+'.nii.gz'
os.rename(oldname,newname)
print(n)
n=n+1
总结
作为小白入门笔记记录,上面的代码基本都测试通过,或许存在更为简单的方法,也可能存在错误,欢迎指正
优惠劵
Emily卷得动
关注
关注
1
点赞
踩
9
收藏
觉得还不错?
一键收藏
知道了
8
评论
IXI数据预处理 + Linux + freesurfer
作为小白入门笔记记录,代码基本都测试通过,或许存在更为简单的方法,也可能存在错误,欢迎指正。
复制链接
扫一扫
专栏目录
8 条评论
您还未登录,请先
登录
后发表或查看评论
使用Voxelmorph配准IXI:数据预处理之颅骨去除及仿射对齐
u014776464的博客
03-10
4747
本文是在原链接https://blog.csdn.net/qq_38302885/article/details/94045126
的基础上,增加的一些补充,对新入门的同学可能有一些启发。
关于freesurfer的具体安装和使用,可以参考
https://blog.csdn.net/uinglin/article/details/79541063
使用Freesurfer进行头骨去除和仿射对齐
...
多模态医学图像数据集
qq_61890919的博客
11-29
1677
由国际生物医学成像研讨会(ISBI)举办,是一个包含多个医学图像分析任务和数据集的竞赛平台,其中有一些任务涉及到多模态医学图像的分割、配准和融合,如head and neck cancer segmentation、domain adaptation for segmentation等。多模态医学图像数据集是指包含不同模态(如CT、MRI、PET等)的医学图像的数据集,它们可以提供更多的信息和视角,有助于医学图像分析和诊断。:其中提供了一些CT和MRI图像的数据集,可以用于医学图像融合研究。
在Windows上运行Freesurfer的简易方法(基于WSL2)
qq_45081900的博客
01-02
614
一种在Windows上运行freesurfer的方法
医学图像处理:Ubuntu16.04安装freesurfer教程
uinglin的博客
03-13
2万+
freesurfer是一个处理大脑3D数据影像的软件,用起来非常方便。安装教程如下:我的ubuntu系统是16.04,其他版本亦可作为参考。1.下载所需软件包在官网上下载安装包,链接:点击打开链接。下载需要12个小时左右。获取licence,在官网点击打开链接上注册一下,填写自己的邮箱,提交之后会收到一个邮件。打开附件,复制附件信息,新建一个licence.txt,将内容粘贴到该txt文件中。收到...
T1-数据集
03-30
No description
IXI数据集 3d切片——适用所有医学3d图像切片
qq_41174671的博客
07-13
1104
将多模态医学3d图像转成2d
FreeSurfer的安装及使用(个人踩坑记录)
热门推荐
Y000077的博客
01-23
2万+
一、环境要求
目前只支持在Linux和MacOS系统,虽然可以用 -parallel 进行多线程处理,但基本消耗的是CPU内存。
二、FreeSurfer的下载与安装
1. 下载安装包
官网链接:rel7downloads - Free Surfer Wiki
根据自己系统型号下载对应安装包,我的电脑是Ubantu18.2的,下载的是freesurfer-linux-centos6_x86_64-7.2.0.tar.gz,记得科学上网,不然下载要二十多个小时。
或者直接在官网复制下载链接后,
FreeSurfer入门(1) Output Data
weixin_38878828的博客
07-25
1507
因一些原因需要学习FreeSurfer,然而教程比较少有些难懂,看了一段时间觉得可能要钻钻牛角尖才可以完成学习,所以开始记笔记(基本上是逐字逐句的读tutorial),如果有错误欢迎指正
python,matlab 读取NIFTI(.nii)格式图像、FSL安装
Emily_Buffy的博客
03-15
8146
1.NIFTI格式图像图像来源
很有必要自己浏览这个网址,详细介绍了NIFTI的细节
有助于代码理解的点做以下总结:
nifti格式存储的数据使用了一对文件**.hdr/.img**
nifti格式中,前三个维度以定义三个空间维度-x,-y和-z,第四个维度定义时间点-t。其余维度(五到七)用于其他用途。比如,第五维可以存一些预定义的用途,例如存储体素特定的分布参数或保存基于矢量的数据。
2....
Freesurfer的简单使用和一些基础知识
lh16130130282的博客
05-15
6808
Freesurfer的一些简单使用和基础知识
cmtklib-data
03-09
CMTK数据
概述
Datalad数据集,用于存储Connectome Mapper 3( )的cmtklib模块的所有数据资源。
colortable_and_gcs存储洛桑2008 colortable_and_gcs所有数据资源(gcs地图集文件和色表)
diffusion存储CMP2使用的梯度表和ODF方向文件
parcellation包含所有GRAPHML和Freesurfer颜色LUT为本地Freesurfer,2008年洛桑和洛桑2018 parcellations,与另外ANNOT文件洛桑2018
segmentation提供了用于脑提取的模板(ANTS模板IXI和ANTS MICCAI2012多图集挑战)和丘脑核分割的模板
资金
由支持的工作。
执照
Connectome Mapper 3是在开源许可证Modified BSD下分发的。 有关更多详细信息,请参见。
freesurfer:神经影像分析和可视化套件
04-08
用于处理人脑MRI的开源软件套件
介绍
FreeSurfer是一个软件包,用于分析和可视化来自横截面和纵向研究的神经影像数据。 它是由开发的。
FreeSurfer提供了用于结构和功能MRI的完整处理流,并包括用于线性和非线性配准,皮质和皮质下分割,皮质表面重建,组形态统计分析,扩散MRI,PET分析等工具。 它也是首选的结构MRI分析软件。
有关使用和理解FreeSurfer工具的大量文档,请访问 。
开发者
请查看并访问我们的,以获取有关配置和构建源代码的分步说明。
支持
如果您遇到问题或对使用FreeSurfer有疑问,请按照以下步骤获得帮助:
搜索档案:在您之前,其他人很可能遇到了相同的问题。 获得答案的最快方法是我们邮件列表。
提出问题:邮件列表并开始讨论!
如果您发现软件中存在错误,请在阅读我们的文档后随意打开问题或提交补丁。
执照
使用,复制,分发和贡献的条款和条件
配准无颅骨的MR脑图像 .rar
08-23
配准后去颅骨的MR图像,具有T1,T1C,T2,Flair4种序列的脑MR图,可用于深度学习。
用Newman型有理算子对IXI的逼近的渐近性质 (2005年)
05-30
设P(x) = ∏n-1 k=1((k/n)r+x),0
matlab对比实验代码-pGAN-cGAN:肝癌
05-22
以下命令在IXI数据集中的图像上训练和测试用于T1到T2合成的pGAN和cGAN模型。 可以从上下载注册的培训和测试科目的数据集。 复制当前目录中的“数据集”文件夹。 预训练的pGAN和cGAN模型也出现在checkpoints目录中。 ...
Linux下mysql添加用户并授权数据库权限
最新发布
beautifulmemory的博客
03-06
194
在 Linux 下,你可以使用 MySQL 的 root 用户登录到 MySQL 数据库,然后通过 SQL 命令来添加新用户并授予数据库权限。
【Linux】Linux的管道与重定向
AliceNo的博客
03-02
946
在Linux系统中,管道和重定向是使命令行操作更为灵活和高效的关键工具。通过管道,我们可以将一个命令的输出作为另一个命令的输入,实现命令之间的连接和协作。而重定向则允许我们将命令的输入和输出从默认位置进行定向,使得我们能够轻松地将结果保存到文件中或者从文件中读取输入。本文将详细探讨这两个重要概念,并演示它们在日常Linux命令行操作中的应用。管道和重定向是Linux命令行中的两个强大而灵活的工具,它们为用户提供了处理和操作命令输入输出的便利方式。
《Linux C编程实战》笔记:共享内存
ouliten的博客
03-02
842
由于本人要考研了,播客可能不会再长更。这本《Linux C编程实战》其实也差不多完结了,还剩网络编程章节没有讲,我肯定是没时间讲了,可能考研失败了会回来继续。《Primer C++》的课后题还有第八章的存货,后续章节只能随缘更新。Qt部分真烂尾了,写Qt项目的注释实在太累了。最有可能更新的部分是力扣题讲解,因为写来准备复试上机。最后祝大家,也祝我一切顺利。
freesurfer
07-27
Freesurfer是一种用于处理和分析脑影像数据的软件包。它主要用于进行脑结构的分割、皮层厚度的测量、皮层纤维束的追踪等任务。Freesurfer可以处理结构磁共振成像(MRI)数据,提取出脑的解剖结构,并生成三维模型和量化结果。它被广泛应用于神经科学研究、临床诊断和治疗等领域。有关Freesurfer更详细的信息,您可以参考CSDN上的相关文章。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
Emily卷得动
CSDN认证博客专家
CSDN认证企业博客
码龄6年
暂无认证
14
原创
13万+
周排名
5万+
总排名
3万+
访问
等级
531
积分
41
粉丝
55
获赞
19
评论
232
收藏
私信
关注
热门文章
python,matlab 读取NIFTI(.nii)格式图像、FSL安装
8145
Latex 入门学习笔记 Texlive+WinEdt10.3
7240
《深度学习入门——基于Python的理论与实现》斋藤康毅学习笔记(一)
3617
ICIST + easychair +IEEE PDF eXpress
2216
IXI数据预处理 + Linux + freesurfer
1781
分类专栏
python
1篇
论文阅读
自用
秋招笔试面试
医学图像配准
2篇
代码语言
最新评论
Reference Index in Latex With IEEEtran.bst
qq_45361075:
太感谢了,一样的问题
5分钟更新你的图像处理小技巧(1)opencv旋转矩阵的不同之处
CSDN-Ada助手:
恭喜你写了第14篇博客!看到你分享关于opencv旋转矩阵的不同之处的小技巧,真是受益匪浅。不过,我觉得下一步可以考虑结合实际案例,分享一些在图像处理中应用这些技巧的经验和教训,这样可以让读者更好地理解和应用。希望你能继续分享更多有价值的内容,期待你的下一篇文章!
IXI数据预处理 + Linux + freesurfer
SDsqx6:
https://pan.baidu.com/s/1Ak3GiJk5H1Pdn3igzElb7w (kn3d)
IXI数据预处理 + Linux + freesurfer
QyYyyu:
这个链接的项目没公开,如果你有数据的话,可以发我一份吗?
IXI数据预处理 + Linux + freesurfer
SDsqx6:
https://aistudio.baidu.com/aistudio/projectdetail/6157845,在这个开源项目里有处理好的IXI数据集
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
5分钟更新你的图像处理小技巧(1)opencv旋转矩阵的不同之处
python 批量 移动文件并修改名字
python,matlab 读取NIFTI(.nii)格式图像、FSL安装
2024年1篇
2022年1篇
2021年1篇
2020年2篇
2019年9篇
目录
目录
分类专栏
python
1篇
论文阅读
自用
秋招笔试面试
医学图像配准
2篇
代码语言
目录
评论 8
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值
IXI Dataset之脑部MR图像T1和T2(nii格式,约600个健康头部)_数据集-飞桨AI Studio星河社区
IXI Dataset之脑部MR图像T1和T2(nii格式,约600个健康头部)_数据集-飞桨AI Studio星河社区
IXI数据集 3d切片——适用所有医学3d图像切片-CSDN博客
>IXI数据集 3d切片——适用所有医学3d图像切片-CSDN博客
IXI数据集 3d切片——适用所有医学3d图像切片
最新推荐文章于 2023-11-29 12:00:51 发布
淡唱暮念
最新推荐文章于 2023-11-29 12:00:51 发布
阅读量1.1k
收藏
4
点赞数
1
文章标签:
图像处理
python
人工智能
计算机视觉
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41174671/article/details/131711889
版权
MRI 数据集切片
从x轴、y轴、z轴
import numpy as np
import os
import nibabel as nib
import imageio
from scipy.ndimage import zoom
from skimage.transform import resize
def nii_to_image(niifile):
file_list = os.listdir(niifile)
for filename in file_list:
if filename.endswith(".nii.gz"):
img_path = os.path.join(niifile, filename)
img = nib.load(img_path)
img_fdata = img.get_fdata()
# 创建保存图像的文件夹
x_folder = os.path.join(niifile, 'x_slices')
filex_folder = os.path.splitext(os.path.basename(filename))[0]
filex_folder = filename.split('.')[0]
filex_path = os.path.join(x_folder, filex_folder)
if not os.path.exists(filex_path):
os.makedirs(filex_path)
print("Created folder:", filex_path)
y_folder = os.path.join(niifile, 'y_slices')
filey_folder = os.path.splitext(os.path.basename(filename))[0]
filey_folder = filename.split('.')[0]
filey_path = os.path.join(y_folder, filey_folder)
if not os.path.exists(filey_path):
os.makedirs(filey_path)
print("Created folder:", filey_path)
z_folder = os.path.join(niifile, 'z_slices')
filez_folder = os.path.splitext(os.path.basename(filename))[0]
filez_folder = filename.split('.')[0]
filez_path = os.path.join(z_folder, filez_folder)
if not os.path.exists(filez_path):
os.makedirs(filez_path)
print("Created folder:", filez_path)
os.makedirs(x_folder, exist_ok=True)
os.makedirs(y_folder, exist_ok=True)
os.makedirs(z_folder, exist_ok=True)
# 在每个方向上分别保存2D图像切片
for i in range(img_fdata.shape[0]):
img_slice = img_fdata[i, :, :]
filename = filename[:-7]
# 保存x方向的切片
x_filename = f"{filename}_x_{i}.png"
img_slice = zoom(img_slice, (256/img_slice.shape[0], 256/img_slice.shape[1]), order=3)
img_slice =(img_slice - np.min(img_slice)) / (np.max(img_slice) - np.min(img_slice))
x_path = os.path.join(filex_path, x_filename)
imageio.imwrite(x_path, (img_slice * 255).astype(np.uint8))
#imageio.imwrite(x_path, img_slice.astype(np.uint8))
#imageio.imwrite(x_path, img_slice)
for i in range(img_fdata.shape[1]):
img_slice = img_fdata[:, i, :]
# 保存y方向的切片
y_filename = f"{filename}_y_{i}.png"
img_slice = zoom(img_slice, (256/img_slice.shape[0], 256/img_slice.shape[1]), order=3)
img_slice =(img_slice - np.min(img_slice)) / (np.max(img_slice) - np.min(img_slice))
y_path = os.path.join(filey_path, y_filename)
imageio.imwrite(y_path, (img_slice * 255).astype(np.uint8))
# imageio.imwrite(y_path, img_slice.astype(np.uint8))
for i in range(img_fdata.shape[2]):
img_slice = img_fdata[:, :, i]
# 保存z方向的切片
z_filename = f"{filename}_z_{i}.png"
img_slice = zoom(img_slice, (256/img_slice.shape[0], 256/img_slice.shape[1]), order=3)
img_slice =(img_slice - np.min(img_slice)) / (np.max(img_slice) - np.min(img_slice))
z_path = os.path.join(filez_path, z_filename)
imageio.imwrite(z_path, (img_slice * 255).astype(np.uint8))
# imageio.imwrite(z_path, img_slice.astype(np.uint8))
def normalize_image(image):
# 可选:将图像数据进行正则化
min_val = np.min(image)
max_val = np.max(image)
image = (image - min_val) / (max_val - min_val) * 255
return image
nii_to_image(IXI/T1')
会创建x,y,z 文件夹在T1下,每个nii.gz文件再创一个文件夹,将所有这个方向上的切片放到对应文件中
某个方向 指定slice数量
import scipy, numpy, shutil, os, nibabel
import sys, getopt
import imageio
def niito2D(filepath):
inputfiles = os.listdir(filepath) #遍历文件夹数据
outputfile = './mc_slices/' #输出文件夹
print('Input file is ', inputfiles)
print('Output folder is ', outputfile)
for inputfile in inputfiles:
image_array = nibabel.load(filepath+inputfile).get_fdata() #数据读取
print(len(image_array.shape))
# set destination folder
if not os.path.exists(outputfile):
os.makedirs(outputfile) #不存在输出文件夹则新建
print("Created ouput directory: " + outputfile)
print('Reading NIfTI file...')
# Create a folder for each input file
file_folder = os.path.splitext(os.path.basename(inputfile))[0]
file_folder = inputfile.split('.')[0]
file_path = os.path.join(outputfile, file_folder)
if not os.path.exists(file_path):
os.makedirs(file_path)
print("Created folder:", file_path)
total_slices = 50 #总切片数
slice_counter = 50 #从第几个切片开始
# iterate through slices
for current_slice in range(50, 50+total_slices):
# alternate slices
if (slice_counter % 1) == 0:
data = image_array[:, :, current_slice] #保存该切片,可以选择不同方向。
# alternate slices and save as png
if (slice_counter % 1) == 0:
print('Saving image...')
#切片命名
image_name = inputfile[:-7] + "{:0>3}".format(str(current_slice + 1)) + ".png"
#image_name = "{:0>3}.png".format(str(current_slice + 1))
# Resize the image
resized_data = (data - np.min(data)) / (np.max(data) - np.min(data))
resized_data = (resized_data * 255).astype(np.uint8)
#保存
# Save the image inside the file folder
image_name = os.path.join(file_path, image_name)
#imageio.imwrite(image_path, resized_data)
imageio.imwrite(image_name, resized_data)
print('Saved.')
# move images to folder
# print('Moving image...')
# src = image_name
# shutil.move(src, outputfile)
slice_counter += 1
print('Moved.')
print('Finished converting images')
if __name__ == '__main__':
niito2D('/IXI/T2/')
优惠劵
淡唱暮念
关注
关注
1
点赞
踩
4
收藏
觉得还不错?
一键收藏
知道了
1
评论
IXI数据集 3d切片——适用所有医学3d图像切片
将多模态医学3d图像转成2d
复制链接
扫一扫
配准无颅骨的MR脑图像
04-01
配准后去颅骨的MR图像,具有T1,T1C,T2,Flair4种序列的脑MR图,可用于深度学习。
医学图像数据集汇总
qq_29462849的博客
01-15
1万+
前言
本文首发于公众号【3D视觉工坊】,原文请见
汇总|医学图像数据集,更多干货获取请关注公众号~
一、 胰腺分割数据集
数据下载链接:http://academictorrents.com/details/80ecfefcabede760cdbdf63e38986501f7becd49
数据介绍:包含82个病例的胰腺数据集。
二、MICCAI胰腺分割数据集
数据下载链接:http://medic...
1 条评论
您还未登录,请先
登录
后发表或查看评论
配准无颅骨的MR脑图像 .rar
08-23
配准后去颅骨的MR图像,具有T1,T1C,T2,Flair4种序列的脑MR图,可用于深度学习。
使用Voxelmorph配准IXI:数据预处理之颅骨去除及仿射对齐
u014776464的博客
03-10
4747
本文是在原链接https://blog.csdn.net/qq_38302885/article/details/94045126
的基础上,增加的一些补充,对新入门的同学可能有一些启发。
关于freesurfer的具体安装和使用,可以参考
https://blog.csdn.net/uinglin/article/details/79541063
使用Freesurfer进行头骨去除和仿射对齐
...
IXI数据预处理 + Linux + freesurfer
Emily_Buffy的博客
11-06
1788
作为小白入门笔记记录,代码基本都测试通过,或许存在更为简单的方法,也可能存在错误,欢迎指正。
Image Synthesis in Multi-Contrast MRI With Conditional Generative Adversarial Networks—论文解读
qq_42079689的博客
12-12
1634
Image Synthesis in Multi-Contrast MRI With Conditional Generative Adversarial Networks文章概述及亮点摘要介绍方法
文章概述及亮点
【1】multi-contrast如何理解
【2】registered multi-contrast images和unregistered images如何理解,理解成配准的图像和未...
基于 Amazon SageMaker 利用 MONAI 处理医疗影像数据实践
亚马逊云科技专栏
02-15
2388
介绍神经网络已被证明可有效解决复杂的计算机视觉任务,例如对象检测、图像相似性和分类。随着低成本 GPU 的发展,构建和部署神经网络的计算成本已大幅降低。然而,大多数技术旨在处理视觉媒体中常...
pytorch实现自定义医学3d图像数据集dataset
sdhdsf132452的博客
01-31
658
pytorch
Python将nii.gz的3D医学图像切片为2D图像
qq_45807235的博客
02-15
2316
python将NIFTI格式nii文件读取导出成2D图像
NIFTI格式的文件后缀为nii
没有的库就自己安装一下
命令 pip install 包名
如何读取并对nii三维数据进行切片处理、转换格式保存
热门推荐
wrj199421的博客
11-30
2万+
1.首先,我们从https://ww2.mathworks.cn/matlabcentral/fileexchange/8797-tools-for-nifti-and-analyze-image?s_tid=mwa_osa_a 下载Tools for NIfTI and ANALYZE image,并放到toolbox路径中;
2.添加导入路径:addpath('/MATLAB/R2013a/...
多模态医学图像数据集
最新发布
qq_61890919的博客
11-29
1677
由国际生物医学成像研讨会(ISBI)举办,是一个包含多个医学图像分析任务和数据集的竞赛平台,其中有一些任务涉及到多模态医学图像的分割、配准和融合,如head and neck cancer segmentation、domain adaptation for segmentation等。多模态医学图像数据集是指包含不同模态(如CT、MRI、PET等)的医学图像的数据集,它们可以提供更多的信息和视角,有助于医学图像分析和诊断。:其中提供了一些CT和MRI图像的数据集,可以用于医学图像融合研究。
细粒度情感分析中的lt, res, res15, res16数据集
02-18
公开数据集,包括lt,res,res15,res16等,其中每个数据集又分为训练集及测试集,又细分为sentence、label、term等文件。
BSDS 数据集
01-24
这个是BSDS的图像及其标注,在进行分割任务时可以作为调结果的数据集
T1-数据集
03-30
No description
coco2017数据集免费下载
04-25
MS COCO的全称是Microsoft Common Objects in Context,起源于微软于2014年出资标注的Microsoft COCO数据集,与ImageNet竞赛一样,被视为是计算机视觉领域最受关注和最权威的比赛之一。
COCO数据集是一个大型的、丰富的物体检测,分割和字幕数据集。这个数据集以scene understanding为目标,主要从复杂的日常场景中截取,图像中的目标通过精确的segmentation进行位置的标定。图像包括91类目标,328,000影像和2,500,000个label。目前为止有语义分割的最大数据集,提供的类别有80 类,有超过33 万张图片,其中20 万张有标注,整个数据集中个体的数目超过150 万
MedLSAM将SAM应用于3D医学图像分割(2023+MedLSAM: Localize and Segment AnythingModel for 3D Medical Images)
weixin_39699362的博客
08-02
756
SAM (Segment Anything Model)是近年来出现的一种具有开创性的图像分割模型。然而,原始的SAM和它的医疗适应性都需要逐片注释,这直接增加了注释工作负载和数据集的大小。本研究提出MedLSAM来解决这个问题,确保无论数据集大小如何都有恒定的注释工作负载,从而简化了注释过程。
[CVPR2022] 用于 3D 医学图像分析的 Swin Transformers 的自监督预训练
weixin_44832243的博客
05-14
3897
Vision Transformer(ViT)在全局和局部表示的自监督学习方面表现出了出色的性能,这些表示它可以转移到下游任务的应用中。提出模型:提出一种新的自监督学习框架Swin UNETR,它具有定制的代理任务,用于医学图像分析。模型介绍:(1)一种新的基于3D变压器的模型,称为Swin UNEt Transformer (Swin UNETR),具有用于自我监督前训练的分层编码器;(2)为学习人体解剖学的基本模式定制代理任务。
机器学习:线性回归,原来是这么回事
分享日常的学习,开展的项目,编写的软件,解决的问题等~
01-28
556
本节介绍机器学习中最简单的线性回归模型和逻辑回归模型,注意,线性回归解决的是回归问题,而逻辑回归解决的是分类问题,不要被逻辑回归中的“回归”二字误导~
线性回归
假设输入x是一个值,则线性回归的任务就是找到参数w和b,使得y^=f(x)=wx+b\hat{y}=f(x)=wx+by^=f(x)=wx+b 接近真实的标记y。在这种情况下,线性回归模型图像是一条直线。
例如sklearn中的波士顿房价数据集, 租金和房间面积就可以看做线性关系,使用线性回归方法拟合的结果如图所示:
如果x是一个向量,则w.
【OVERLORD】使用Paddle实现MRI医学图像超分辨率项目
m0_63642362的博客
07-23
1718
为了进一步提高 MRI 图像的空间分辨率,我们根据IXISR数据集构建超分辨率模型,对低分辨率MRI图像进行有效的超分重建。
midjourney api
08-02
Midjourney API是一个强大的图像生成服务,可以通过自然语言描述生成对应的精美图像。通过调用该API,你可以使用提供的token和请求参数来生成图像。首先,你需要发送一个POST请求,包含prompt(描述图像的自然语言)...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
淡唱暮念
CSDN认证博客专家
CSDN认证企业博客
码龄6年
暂无认证
15
原创
25万+
周排名
20万+
总排名
7万+
访问
等级
268
积分
14
粉丝
75
获赞
22
评论
391
收藏
私信
关注
热门文章
【Ubuntu中安装yum提示E: 无法定位软件包问题的解决。】
25497
Overleaf出现undefined control sequence \subfigure怎么办?
11622
在Linux系统(服务器)使用阿里云盘服务快速上传下载文件
8671
一个简单高效labelme-json-to-dataset方法
8058
【Ubuntu安装git与git clone远程仓库】
6764
分类专栏
学习教程
12篇
医学图像处理
2篇
资源推荐
2篇
最新评论
Overleaf出现undefined control sequence \subfigure怎么办?
jldxxmh:
用了还是报错,别的图片组都没事
Attention mechanism conclusion
CSDN-Ada助手:
恭喜您完成了第15篇博客!标题“Attention mechanism conclusion”听起来非常有深度。您对注意力机制进行了总结,这一定是个引人入胜的话题。在这篇博客中,您是否可以进一步探讨一些实际应用案例,以帮助读者更好地理解和应用这一机制呢?期待您在下一篇博客中分享更多有关注意力机制的见解。继续保持创作,并谢谢您与我们分享您的知识!
IXI数据集 3d切片——适用所有医学3d图像切片
CSDN-Ada助手:
恭喜您写下第16篇博客!标题“IXI数据集 3d切片——适用所有医学3d图像切片”非常吸引人。您的文章内容让人期待能够了解更多关于IXI数据集和医学3D图像切片的知识。在接下来的创作中,或许您可以考虑分享一些关于如何利用IXI数据集进行深度学习或其他医学研究的实际案例。这将进一步丰富读者对于该数据集的了解,并为那些希望利用它的人提供实用的指导。期待您的下一篇文章!
【ubuntu 安装nvidia, cuda】
CSDN-Ada助手:
恭喜您写了第17篇博客!阅读了您的文章【ubuntu 安装nvidia, cuda】后,我对您的技术实力深感敬佩。您的指导非常清晰,使得我能够顺利安装nvidia和cuda。感谢您的分享!
希望您能继续保持创作的热情和努力。鉴于您在技术方面的造诣,我建议您可以考虑撰写一些更加深入的主题,例如优化nvidia和cuda的性能或解决常见问题等。相信您的经验和见解将为读者带来更多的帮助和启发。
期待您未来更多博客的发布,再次感谢您的分享与付出!
【Ubuntu中安装yum提示E: 无法定位软件包问题的解决。】
_Karos:
操作完了,这是惊喜
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
【ubuntu 安装nvidia, cuda】
Attention mechanism conclusion
【Attentionpool2d】
2023年4篇
2022年11篇
2021年2篇
目录
目录
分类专栏
学习教程
12篇
医学图像处理
2篇
资源推荐
2篇
目录
评论 1
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值