zoukankan      html  css  js  c++  java
  • 脑图像的数据预处理

    脑图像的数据预处理

        在“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模态、icmb协议下,切片厚度为1mm,噪声水平为0,灰度不均匀水平为0的正常脑图像。

    2.程序

    main.m

    function main(filename,name,num)
    % 函数main(filename, num)中的第一个参数filename是欲读取的rawb文件的文件名,第二个参数num就是第多少张。
    %例如:main('t1_icbm_normal_1mm_pn0_rf0.rawb','train.txt',90), main('phantom_1.0mm_normal_csf.rawb','train.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、8类拿出来,其余类为0
            end
        end
    end
    Write_txt(name,read_new);    %将数据写入TXT文件
    % 旋转90°并显示出来
    read_new=imrotate(read_new, 90);                                        
    imshow(uint8(read_new));
    end
    

    Mark.m

    function mark=Mark(filename,num)
    %将标签为1、2、3、8类分出来,其余为0,mark取值:0、1、2、3、8
    %[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、8类标签所在的坐标点拿出来,其余置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_data(i,j)==8)
                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);
    

    processed_data.m

    function processed_data(filename,name,num)
    %将1、2、3、8类的数据做归一处理,其余为0
    % processed_data('t1_icbm_normal_1mm_pn0_rf0.rawb','train.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)./255;   %将第0、1、2、3、8类拿出来,其余类为0
            end
        end
    end
    Write_txt(name,read_new);    %将数据写入TXT文件
    

    init_image.m

    function init_image(filename,num)
    %function init_image(filename,name,num)
    % 函数init_image(filename,num)中的第一个参数filename是欲读取的rawb文件的文件名,第二个参数num就是第多少张。输出为原始图像,未处理
    %例如:init_image('t1_icbm_normal_1mm_pn0_rf0.rawb','train.txt',90), init_image('phantom_1.0mm_normal_csf.rawb','train.txt',90)
    read=readrawb(filename, num);
    %Write_txt(name,read);  %将数据写入文件
    % 旋转90°并显示出来
    read=imrotate(read, 90);                                        
    imshow(uint8(read));
    end
    

    3.结果

    >> init_image('t1_icbm_normal_1mm_pn0_rf0.rawb',90)
    

      

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

    4.注意

        init_image()这个函数输出原图像,main()这个函数将0、1、2、3、8类分离出来(用前四个函数即可),用于后续的研究,processed_data()这个函数对1、2、3、8类进行归一化,并将结果写入TXT文件。这篇文章仅作为保存我之前所做的内容,今后不会研究脑图像,但我之前的博客园文章中提到的聚类算法都可以用在脑图像分割中,有兴趣的话可以对聚类算法用在脑图像分割这个领域做进一步研究。

  • 相关阅读:
    结巴分词 0.14 版发布,Python 中文分词库
    Lazarus 1.0.2 发布,Pascal 集成开发环境
    Android全屏 去除标题栏和状态栏
    服务器日志现 Android 4.2 传将添多项新特性
    Percona XtraBackup 2.0.3 发布
    长平狐 Android 强制设置横屏或竖屏 设置全屏
    NetBeans 7.3 Beta 发布,全新的 HTML5 支持
    CppDepend现在已经支持Linux
    GromJS 1.7.18 发布,服务器端的 JavaScript
    Apache OpenWebBeans 1.1.6 发布
  • 原文地址:https://www.cnblogs.com/kailugaji/p/10012338.html
Copyright © 2011-2022 走看看