zoukankan      html  css  js  c++  java
  • 肺结节CT影像特征提取(五)——肺结节CT影像ROI区域灰度直方图及其图形化

          在博客肺结节CT影像特征提取中,已经实现了肺结节的灰度、纹理和形态特征的提取。但是,对于进一步了解ROI区域像素值或者说CT值的分布来说,还存在一定的不足,不能够很好的显示ROI区域。

    因此,本文将进一步对ROI区域进行处理,实现ROI区域的图形化显示。主要包含灰度直方图和ROI区域图形化。

    1.1  ROI区域灰度直方图

           灰度直方图是描述像素值分布的一种图形,根据灰度级各个值的像素分布比例所画出的一种直方图。这里,为了更加直观看到每个灰度级像素的个数,横轴采用灰度级,纵轴为像素个数。

    根据前几节读取的CT图和ROI图,存储在sData的结构体中,其包含CT图像,ROI信息,以及被试的基本信息和CT影像的信息。依据ROI标记,获取其像素值分布进行统计,画出灰度直方图并保存

    1.2 ROI区域图形化

          虽然对ROI区域已经提取了特征,但是对于进一步的了解ROI区域的情况,还需要改进。这里采取MATLAB的pcolor函数对ROI区域进行图形化,以方格图形的形式表示ROI区域,并且根据需要可以筛选特定范围像素值的分布,对于肺结节特殊的分布有很大作用。例如,为了研究钙化情况,根据钙化的像素值或者CCT值范围,即可画出钙化值在ROI中的分布情况。

          上图即为代码测试时候的结果,棕色和绿色部分为ROI区域,绿色带数字的为筛选出的像素值在1000-1200的分布情况。

    1.2. 代码实例

    saveHist_ROI( sData,Value1,Value2)是存储ROI区域灰度直方图和选取特定范围的值并标记的函数,输入的sData为保存肺结节图像和ROI的结构体;Value1,Value2是筛选特定范围像素值的参数。本函数可以批量处理肺结节影像,保存ROI区域灰度直方图和图形化ROI区域。

    function saveHist_ROI( sData,Value1,Value2)
    %saveHist_ROI:存储ROI区域灰度直方图和选取特定范围的值并标记
    %输入:
    %sData:存储mask和volume的数据struct,
    %Value1:特定范围起始值
    %Value2:特定范围终结值
    %输出
    %输出ROI区域灰度直方图和ROI区域方格图
    
    num=size(sData{1,1},2);
    %输出每张图片
    for i=1:num
        dcm=sData{1,1}(i).volume;
        mask=sData{1,1}(i).mask;
        [x,y]=find(mask>0);
        %画出ROI区域
        minRow=min(x);
        maxRow=max(x);
        minCol=min(y);
        maxCol=max(y);
        color=zeros(maxRow-minRow+2,maxCol-minCol+2);
        for p=1:size(x,1)
            color(x(p,1)-minRow+1,y(p,1)-minCol+1)=0.8;
        end
        v=dcm(find(mask>0));
        res=[x,y,v];
     
        %灰度直方图
        minV=min(v);
        maxV=max(v);
        s=zeros(1,maxV+1);
         for k=minV:maxV
             for p=1:size(v,1)
                 if(v(p)==k)
                     s(k+1)=s(k+1)+1;
                 else
                     continue;
                 end
             end
         end
         h2=figure(2);
         %set(h2,'position',[100 100 1600 1600]);
         bar(s);
         name1=sData{1,1}(i).name;
         str2=[name1(1:end-4),'Hist.jpg'];
         saveas(gcf,str2);
         disp(['2.正在存储灰度直方图的图像',str2]);
         
         %标记900-990
        [a900,b900]=find(res(:,3)>=Value1);
        m900=res(a900,:);
        [a990,b990]=find(m900(:,3)<=Value2);
        m990=m900(a990,:);
        %标记选定区域的值,并且在pcolor图显示
        color990=color;
        for j=1:size(m990(:,1));
            color990(m990(j,1)-minRow+1,m990(j,2)-minCol+1)=0.4;
        end
        h3=figure(3);
       % set(h3,'position',[100 100 1600 1600]);%设置图像大小
        pcolor(color990);
        %标记特定范围的像素值
        for j=1:size(m990(:,1));
            xValue=double(m990(j,1)-minRow+1);
            yValue=double(m990(j,2)-minCol+1);
            text(yValue+0.3,xValue+0.3,num2str(m990(j,3)));
        end
        %设置保存图片的名字
        name3=sData{1,1}(i).name;
        str3=[name3(1:end-4),'Fat',num2str(Value1),'-',num2str(Value2),'.jpg'];
        saveas(gcf,str3);
         disp(['3.正在存储灰度直方图的图像',str3]);
    end
    
    end
    

      

  • 相关阅读:
    16. 3Sum Closest
    17. Letter Combinations of a Phone Number
    20. Valid Parentheses
    77. Combinations
    80. Remove Duplicates from Sorted Array II
    82. Remove Duplicates from Sorted List II
    88. Merge Sorted Array
    257. Binary Tree Paths
    225. Implement Stack using Queues
    113. Path Sum II
  • 原文地址:https://www.cnblogs.com/mat-wu/p/10601401.html
Copyright © 2011-2022 走看看