• 脑图像的数据预处理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
    ',read(i,j));  %换行   %f或者%d
            else
                fprintf(fp,'%f	',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的矩阵

  • 相关阅读:
    JS脚本延时
    Linux的关机与重启命令
    MasterCard信用卡测试卡号-creditcard-1
    HTTP_USER_AGENT
    nginx 502
    今天收到报警邮件,提示网站502 bad gateway,
    Iptables網路連線限制及攻擊防護和相關設定
    #添加屏蔽IP LINUX
    linux下启动和关闭网卡命令
    unfinish
  • 原文地址:https://www.cnblogs.com/kailugaji/p/10741481.html
Copyright © 2020-2023  润新知