0

0

如何使用MONAI加载和处理自定义fMRI数据

心靈之曲

心靈之曲

发布时间:2025-08-01 15:42:11

|

336人浏览过

|

来源于php中文网

原创

如何使用monai加载和处理自定义fmri数据

本文旨在指导读者如何修改现有的MONAI代码,以加载和处理存储在特定文件夹结构中的自定义fMRI数据(NIfTI格式)。文章将详细解释如何修改文件路径、调整数据裁剪参数,以及如何将nilearn库集成到现有的MONAI工作流程中,以便更方便地加载NIfTI图像并提取数据,最终实现高效的fMRI数据预处理。

修改文件路径

原始代码使用硬编码的文件路径和数据集名称。你需要根据你的数据存储结构修改以下几个关键变量:

  1. load_root: 将此变量设置为你的fMRI数据所在的根目录。例如:

    load_root = 'F:\\New folder\\cn_processed data'
  2. filenames: 代码使用os.listdir(load_root)获取文件名列表。 确保load_root目录下直接包含各个被试的文件夹(例如Sub1、Sub2等)。

  3. subj_name: 在循环中,subj_name = filename[:-7]用于从文件名中提取被试名称。根据你的文件名格式进行调整。 如果你的文件命名为S1.nii 且位于Sub1文件夹下,则需要在循环中构建完整的文件路径:

    for filename in sorted(filenames):
        subj_name = filename  # 文件名为Sub1
        # 构建完整路径
        full_path = os.path.join(load_root, subj_name, "S1.nii")
        # ...后续处理

调整数据裁剪参数

data = data[:, 14:-7, :, :] 这行代码用于裁剪fMRI数据。你需要根据你的数据的实际尺寸和感兴趣的脑区进行调整。

  • 使用可视化工具(例如FSLeyes, MRIcron)检查你的fMRI数据,确定需要保留的区域。
  • 根据实际情况修改切片范围。 请注意,索引是从0开始的。
  • 如果不需要裁剪,可以直接注释掉这行代码。

重要提示: 确保裁剪后的数据维度在后续处理中保持一致。

喜木企业网站管理系统2.0
喜木企业网站管理系统2.0

2.0修改说明:1.重写产品,下载模块,无限级分类2.将产品,下载,图片,新闻进行伪静态处理。3.取掉了原有的风格模块,下次更新加模板系统和自定义标签。4.增加缓存机制,减少对数据库的调用,缓存默认30分钟。

下载

集成 Nilearn 库

虽然原始代码使用了MONAI的LoadImage,但Nilearn 提供了更简洁的NIfTI图像加载方式。 可以考虑将Nilearn集成到你的代码中。

  1. 安装 Nilearn:

    pip install nilearn
  2. 替换 MONAI 的 LoadImage:

    from nilearn.image import load_img
    import numpy as np
    
    def read_data(filename,load_root,save_root,subj_name,count,queue=None,scaling_method=None, fill_zeroback=False):
        print("processing: " + filename, flush=True)
        # 构建完整路径
        path = os.path.join(load_root, filename, "S1.nii") # 修改这里
        try:
            # 使用 nilearn 加载图像
            nifti_image = load_img(path)
            data = nifti_image.get_fdata()  # 获取 numpy 数组
        except Exception as e:
            print(f"Error loading image: {path}, {e}")
            return None
    
        # ...后续处理

代码示例(修改后的 read_data 函数)

from nilearn.image import load_img
import numpy as np
import torch
import os

def read_data(filename,load_root,save_root,subj_name,count,queue=None,scaling_method=None, fill_zeroback=False):
    print("processing: " + filename, flush=True)
    # 构建完整路径
    path = os.path.join(load_root, filename, "S1.nii") # 修改这里
    try:
        # 使用 nilearn 加载图像
        nifti_image = load_img(path)
        data = nifti_image.get_fdata()  # 获取 numpy 数组
    except Exception as e:
        print(f"Error loading image: {path}, {e}")
        return None

    #change this line according to your file names
    save_dir = os.path.join(save_root,subj_name)
    isExist = os.path.exists(save_dir)
    if not isExist:
        os.makedirs(save_dir)

    # change this line according to your dataset
    data = data[:, 14:-7, :, :] # 裁剪数据,根据你的数据调整
    # width, height, depth, time
    # Inspect the fMRI file first using your visualization tool. 
    # Limit the ranges of width, height, and depth to be under 96. Crop the background, not the brain regions. 
    # Each dimension of fMRI registered to MNI space (2mm) is expected to be around 100.
    # You can do this when you load each volume at the Dataset class, including padding backgrounds to fill dimensions under 96.

    background = data==0

    if scaling_method == 'z-norm':
        global_mean = data[~background].mean()
        global_std = data[~background].std()
        data_temp = (data - global_mean) / global_std
    elif scaling_method == 'minmax':
        data_temp = (data - data[~background].min()) / (data[~background].max() - data[~background].min())

    data_global = torch.empty(data.shape)
    data_global[background] = data_temp[~background].min() if not fill_zeroback else 0 
    # data_temp[~background].min() is expected to be 0 for scaling_method == 'minmax', and minimum z-value for scaling_method == 'z-norm'
    data_global[~background] = data_temp[~background]

    # save volumes one-by-one in fp16 format.
    data_global = torch.tensor(data_global, dtype=torch.float16) # 确保是 torch.Tensor
    data_global_split = torch.split(data_global, 1, 3)
    for i, TR in enumerate(data_global_split):
        torch.save(TR.clone(), os.path.join(save_dir,"frame_"+str(i)+".pt"))

注意事项:

  • 确保nilearn已正确安装。
  • 根据你的实际数据结构修改文件路径。
  • 使用适当的裁剪参数以保留感兴趣的脑区。
  • data_global = torch.tensor(data_global, dtype=torch.float16),确保data_global是一个torch.Tensor,以便与后续的torch.split和torch.save操作兼容。

总结

通过修改文件路径、调整裁剪参数以及集成 Nilearn 库,你可以轻松地将自定义 fMRI 数据加载到现有的 MONAI 代码中进行处理。 这种方法可以简化数据加载流程,并提高代码的可读性和可维护性。 记得在修改代码后进行充分测试,以确保数据处理的正确性。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

537

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

17

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

25

2026.01.06

go语言 数组和切片
go语言 数组和切片

本专题整合了go语言数组和切片的区别与含义,阅读专题下面的文章了解更多详细内容。

46

2025.09.03

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

25

2026.01.26

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

6

2026.01.26

苹果官方查询网站 苹果手机正品激活查询入口
苹果官方查询网站 苹果手机正品激活查询入口

苹果官方查询网站主要通过 checkcoverage.apple.com/cn/zh/ 进行,可用于查询序列号(SN)对应的保修状态、激活日期及技术支持服务。此外,查找丢失设备请使用 iCloud.com/find,购买信息与物流可访问 Apple (中国大陆) 订单状态页面。

25

2026.01.26

npd人格什么意思 npd人格有什么特征
npd人格什么意思 npd人格有什么特征

NPD(Narcissistic Personality Disorder)即自恋型人格障碍,是一种心理健康问题,特点是极度夸大自我重要性、需要过度赞美与关注,同时极度缺乏共情能力,背后常掩藏着低自尊和不安全感,影响人际关系、工作和生活,通常在青少年时期开始显现,需由专业人士诊断。

3

2026.01.26

windows安全中心怎么关闭 windows安全中心怎么执行操作
windows安全中心怎么关闭 windows安全中心怎么执行操作

关闭Windows安全中心(Windows Defender)可通过系统设置暂时关闭,或使用组策略/注册表永久关闭。最简单的方法是:进入设置 > 隐私和安全性 > Windows安全中心 > 病毒和威胁防护 > 管理设置,将实时保护等选项关闭。

5

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.2万人学习

Pandas 教程
Pandas 教程

共15课时 | 1.0万人学习

ASP 教程
ASP 教程

共34课时 | 4.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号