脑图像的数据预处理2

脑图像的数据预处理2

作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/

脑图像的数据预处理中已经介绍了一些内容,这篇文章是对前一篇文章的补充与完善。更多内容请看脑图像。数据来源:BrainWeb: Simulated Brain Database

1. 将0、1、2、3类数据分离出来,并存入文件

main.m

function main(filename,name, num)
%将真实脑图像中的0、1、2、3拿出来,其余像素为0.
%function main(filename,name,name_label, num)
%函数main(filename, num)中的第一个参数filename是欲读取的rawb文件的文件名,第二个参数num就是第多少张。
%例如:main(‘t1_icbm_normal_1mm_pn0_rf0.rawb‘,‘train.txt‘,‘label.txt‘, 90), main(‘phantom_1.0mm_normal_csf.rawb‘,‘train.txt‘,‘label.txt‘, 90)
mark=Mark(‘phantom_1.0mm_normal_crisp.rawb‘,num);
read=readrawb(filename, num);
[row,col]=size(read);
for i=1:row   %行
    for j=1:col    %列
        if mark(i,j)==0
            read_new(i,j)=0;
        else
            read_new(i,j)=read(i,j);   %将第0、1、2、3类拿出来,其余类为0
        end
    end
end
% 旋转90°并显示出来
read_new=imrotate(read_new, 90);
%mark=mark‘;
Write_txt(name,read_new);    %将数据写入TXT文件
%Write_txt(name_label,mark);    %将标签数据写入TXT文件
imshow(uint8(read_new),‘border‘,‘tight‘,‘initialmagnification‘,‘fit‘);

Mark.m

function mark=Mark(filename,num)
%将标签为1、2、3类分出来,其余为0,mark取值:0、1、2、3
%[mark_new,mark]=Mark(‘phantom_1.0mm_normal_crisp.rawb‘,90);
fp=fopen(filename);
temp=fread(fp, 181 * 217 * 181);
image=reshape(temp, 181 * 217, 181);
images=image(:, num);
images=reshape(images, 181, 217);
mark_data=images;
fclose(fp);
%将第0、1、2、3类标签所在的坐标点拿出来,其余置0
for i=1:181
    for j=1:217
        if (mark_data(i,j)==1)||(mark_data(i,j)==2)||(mark_data(i,j)==3)
            mark(i,j)=mark_data(i,j);
        else
            mark(i,j)=0;
        end
    end
end

readrawb.m

function g = readrawb(filename, num)
%函数readrawb(filename, num)中的第一个参数filename是欲读取的rawb文件的文件名,第二个参数num就是第多少张。
fid = fopen(filename);
%连续读取181*217*181个数据,这时候temp是一个长度为181*217*181的向量。
%先将rawb中的所有数据传递给temp数组,然后将tempreshape成图片集。
temp = fread(fid, 181 * 217 * 181);
%所以把它变成了一个181*217行,181列的数组,按照它的代码,这就是181张图片的数据,每一列对应一张图。
%生成图片集数组。图片集images数组中每一列表示一张图片。
images = reshape(temp, 181 * 217, 181);
%读取数组中的第num行,得到数组再reshape成图片原来的行数和列数:181*217。
image = images(:, num);
image = reshape(image, 181, 217);
g = image;
fclose(fid);
end

Write_txt.m

function Write_txt(name,read)
%将数据写入txt文件
fp=fopen(name,‘w‘);
[row,col]=size(read);
for i=1:row   %行
    for j=1:col    %列
        if j==col
            fprintf(fp,‘%f\n‘,read(i,j));  %换行   %f或者%d
        else
            fprintf(fp,‘%f\t‘,read(i,j));  %多个空格tab
        end
    end
end
fclose(fp);

结果

>> main(‘t1_icbm_normal_1mm_pn0_rf0.rawb‘,‘train.txt‘, 90)

2. 标准分割结果

用到三个函数:Ground_truth.m、Mark.m与Write_txt.m

Ground_truth.m

function Ground_truth(name, num)
%标准分割结果
%例如:Ground_truth(‘Ground truth.txt‘,90)
mark=Mark(‘phantom_1.0mm_normal_crisp.rawb‘,num);
for i=1:181   %行
    for j=1:217    %列
        if mark(i,j)==1
            read_new(i,j)=50;
        elseif mark(i, j)==2
            read_new(i,j)=150;
        elseif mark(i, j)==3
            read_new(i,j)=255;
        else
            read_new(i,j)=0;
        end
    end
end
% 旋转90°并显示出来
read_new=imrotate(read_new, 90);
%mark=mark‘;
Write_txt(name,read_new);    %将数据写入TXT文件
%Write_txt(name_label,mark);    %将标签数据写入TXT文件
imshow(uint8(read_new),‘border‘,‘tight‘,‘initialmagnification‘,‘fit‘);

结果

>> Ground_truth(‘Ground truth.txt‘,90)

3. 说明

T1模态、icmb协议下,切片厚度为1mm,噪声水平为0,灰度不均匀水平为0的正常脑图像,第90层
只选取0、1、2、3类的数据
0:背景 blankground 0
1:脑脊液 CSF 26-89
2:灰质 Grey Matter 78-132
3:白质 White Matter 124-150
分割之后各类用以下像素值进行渲染:
0:0
1:50
2:150
3:255
数据均为217*181的矩阵

原文地址:https://www.cnblogs.com/kailugaji/p/10741481.html

时间: 2024-08-30 14:00:21

脑图像的数据预处理2的相关文章

脑图像的数据预处理

脑图像的数据预处理 在"BrainWeb: Simulated Brain Database使用说明"中已经介绍了如何下载并打开脑数据库,这篇文章将0.1.2.3.8类分割出来,用以后续对图像的处理. 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 1.准备 从BrainWeb: Simulated Brain Database网站中下载我们需要的脑图像数据,如t1_icbm_normal_1mm_pn0_rf0.rawb文件,表示在T1模

ADHD数据预处理之重采样

1.准备工作: 定义AAL模板26个小脑作为ROI: 这样得到原始91AAL  因为Mask不匹配,所以需要重采样. 2,resample 打开后,Data Directiory   选择刚得到的90AAL数据,OutputDir   选择存放数据: 这样既可得到重采样后小脑90AAL数据.以此类推,我们便可得到26个脑区AAL.用他们作为define  ROI,可以提取数据中26个小脑区时间序列 ADHD数据预处理之重采样

数据预处理与特征选择

数据预处理和特征选择是数据挖掘与机器学习中关注的重要问题,坊间常说:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已.特征工程就是将原始数据转化为有用的特征,更好的表示预测模型处理的实际问题,提升对于未知数据的预测准确性.下图给出了特征工程包含的内容: 本文数据预处理与特征选择的代码均采用sklearn所提供的方法,并使用sklearn中的IRIS(鸢尾花)数据集来对特征处理功能进行说明,IRIS数据集由Fisher在1936年整理,包含4个特征:Sepal.Length(花萼长

CS231n 卷积神经网络与计算机视觉 6 数据预处理 权重初始化 规则化 损失函数 等常用方法总结

1 数据处理 首先注明我们要处理的数据是矩阵X,其shape为[N x D] (N =number of data, D =dimensionality). 1.1 Mean subtraction 去均值 去均值是一种常用的数据处理方式.它是将各个特征值减去其均值,几何上的展现是可以将数据的中心移到坐标原点,Python中的代码是 X -= np.mean(X, axis = 0). 对于图像处理来说,每个像素的值都需要被减去平均值 ( X -= np.mean(X)), 也可以分别处理RGB

Deep Learning 十一_深度学习UFLDL教程:数据预处理(斯坦福大学深度学习教程)

理论知识:UFLDL数据预处理和http://www.cnblogs.com/tornadomeet/archive/2013/04/20/3033149.html 数据预处理是深度学习中非常重要的一步!如果说原始数据的获得,是深度学习中最重要的一步,那么获得原始数据之后对它的预处理更是重要的一部分. 1.数据预处理的方法: ①数据归一化: 简单缩放:对数据的每一个维度的值进行重新调节,使其在 [0,1]或[ − 1,1] 的区间内 逐样本均值消减:在每个样本上减去数据的统计平均值,用于平稳的数

【深度学习系列】PaddlePaddle之数据预处理

上篇文章讲了卷积神经网络的基本知识,本来这篇文章准备继续深入讲CNN的相关知识和手写CNN,但是有很多同学跟我发邮件或私信问我关于PaddlePaddle如何读取数据.做数据预处理相关的内容.网上看的很多教程都是几个常见的例子,数据集不需要自己准备,所以不需要关心,但是实际做项目的时候做数据预处理感觉一头雾水,所以我就写一篇文章汇总一下,讲讲如何用PaddlePaddle做数据预处理. PaddlePaddle的基本数据格式 根据官网的资料,总结出PaddlePaddle支持多种不同的数据格式,

数据预处理速度高倍提升,3行python代码简单搞定!

Python 是机器学习领域内的首选编程语言,它易于使用,也有很多出色的库来帮助你更快处理数据.但当我们面临大量数据时,一些问题就会显现-- 目前,大数据(Big Data)这个术语通常用于表示包含数十万数据点的数据集.在这样的尺度上,工作进程中加入任何额外的计算都需要时刻注意保持效率.在设计机器学习系统时,数据预处理非常重要--在这里,我们必须对所有数据点使用某种操作. 在默认情况下,Python 程序是单个进程,使用单 CPU 核心执行.而大多数当代机器学习硬件都至少搭载了双核处理器.这意味

MATLAB程序:用FCM分割脑图像

MATLAB程序:用FCM分割脑图像 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 脑图像基础知识请看:脑图像:FCM算法介绍请看:聚类——FCM:数据来源:BrainWeb: Simulated Brain Database,只选取脑图像中的0.1.2.3类,其余类别设为0.本文用到的数据:Simulated Brain Database 1. MATLAB程序 FCM_image_main.m function [accuracy,iter_F

ML:数据预处理知识图谱

pandas 强大的数据处理工具学习目标:无需记忆确切的api名称,需要知识pandas能做什么,并根据实际需要使用的功能可以快速索引查询. 速查手册: (1) pandas中文给出的教学文档 https://www.pypandas.cn/docs/getting_started/10min.html (2) pandas常用中文api文档 说明:给出了常用的数据process的api集合 https://blog.csdn.net/weixin_44129250/article/detail