在博客肺結節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
