資源簡介
區域生長(region growing)是指將成組的像素或區域發展成更大區域的過程。從種子點的集合開始,從這些點的區域增長是通過將與每個種子點有相似屬性像強度、灰度級、紋理顏色等的相鄰像素合并到此區域。
代碼片段和文件信息
function?[ROI]=compute_roi(strimg)
????[XYZ]=size(img);
%?????slice=floor(Z/2);
????slice=70;
????gausFilter?=?fspecial(‘gaussian‘);?
????I?=?imfilter(imggausFilter);
????A=I(::slice);
????figure(1)imshow(A[])
????
????
[yx]=getpts;?????????????%獲得區域生長起始點
xx=round(x);????????????%橫坐標取整
yy=round(y);????????????%縱坐標取整
zz=slice*ones(size(x));
for?i=1:length(xx)
seed(i)=I(xx(i)yy(i)zz(i));??%將生長起始點灰度值存入seed中
end
ROI=zeros(XYZ);??????????%作一個全零與原圖像等大的圖像矩陣Y,作為輸出圖像矩陣
ROI(xxyyzz)=1;?????????????%將Y中與所取點相對應位置的點設置為白場
sum=seed;??????????????%儲存符合區域生長條件的點的灰度值的和
suit=1;?????????????????%儲存符合區域生長條件的點的個數
count=1;???????????????%記錄每次判斷一點周圍八點符合條件的新點的數目
threshold1=100;???????%域值
threshold2=400;
while?count>0
????s=0;??????????????????%記錄判斷一點周圍點時,符合條件的新點的灰度值之和
????count=0;
????for?i=1:X
????????for?j=1:Y
????????????for?k=1:Z
????????????????if?ROI(ijk)==1
????????????????????if?(i-1)>0?&&?(i+1)<(X+1)?&&?(j-1)>0?&&?(j+1)<(Y+1)?&&?(k-1)>0?&&?(k+1)<(Z+1)??%判斷此點是否為圖像邊界上的點
????????????????????????for?u=?-1:1???????????????????????????????%判斷點周圍八點是否符合域值條件
????????????????????????????for?v=?-1:1???????????????????????????????%uv為偏移量
????????????????????????????????for?w=-1:1
????????????????????????????????????if??ROI(i+uj+vk+w)==0?&?abs(I(i+uj+vk+w)-seed)<=threshold1?&?abs(I(i+uj+vk+w)-I(ijk))<=threshold2%判斷是否未存在于輸出矩陣Y,并且為符合域值條件的點
????????????????????????????????????????ROI(i+uj+vk+w)=1;???????????????????????%符合以上兩條件即將其在Y中與之位置對應的點設置為白場
????????????????????????????????????????count=count+1;
????????????????????????????????????????s=s+I(i+uj+vk+w);??????????????????????%此點的灰度之加入s中
????????????????????????????????????end
????????????????????????????????end
????????????????????????????end
????????????????????????end
????????????????????end
????????????????end
????????????end
????????end
????end
????suit=suit+count;???????????????????????????????????%將n加入符合點數計數器中
????sum=sum+s;?????????????????????????????????????%將s加入符合點的灰度值總合中
????seed=sum/suit;????????????????????????????????????%計算新的灰度平均值
????figure(2);
????imshow(ROI(::slice))title(‘分割后圖像‘)
end
roi=make_nii(ROI);
save_nii(roi[str(1:end-4)‘_roi300.nii‘]);
R=zeros(XYZ);
for?i=1:Z
????R(::i)=imfill(ROI(::i)‘holes‘);
end
r=make_nii(R);
save_nii(r[str(1:end-4)‘_fill300.nii‘]);
end
%?J?=?zeros(size(I));?%?主函數的返回值,記錄區域生長所得到的區域??
%?Isizes?=?size(I);??
%?
%?reg_size?=?1;%分割的到的區域,初始化只有種子點一個??
%?neg_free?=?10000;?%動態
- 上一篇:Simuli
nk FFT模塊 - 下一篇:最短路徑的matlab程序
評論
共有 條評論