資源簡介
Matlab寫的區域生長圖像分割程序。
%區域生長算法:region
function LabelImage=region(image,seed,Threshold,maxv)
%image:輸入圖像
%seed:種子點坐標堆棧
%threshold:用鄰域近似生長規則的閾值
%maxv:所有生長的像素的范圍小于maxv
% LabelImage:輸出的標記圖像,其中每個像素所述區域標記為rn
[seedNum,tem]=size(seed);%seedNum為種子個數
[Width,Height]=size(image);
LabelImage=zeros(Width,Height);
rn=0;%區域標記號碼
for i=1:seedNum
%從沒有被標記的種子點開始進行生長
if LabelImage(seed(i,1),seed(i,2))==0
rn=rn+1;% %對當前生長區域賦標號值
LabelImage(seed(i,1),seed(i,2))=rn;
% end
stack(1,1)=seed(i,1);%將種子點壓入堆棧(堆棧用來在生長過程中的數據坐標)
stack(1,2)=seed(i,2);
Start=1;%定義堆棧起點和終點
End=1;
while(Start<=End)
%當前種子點坐標
CurrX=stack(Start,1);
CurrY=stack(Start,2);
%對當前點的8鄰域進行遍歷
for m=-1:1
for n=-1:1
% %判斷像素(CurrX,CurrY)是否在圖像內部
% rule1=(CurrX+m)=1&(CurrY+n)=1;
% %判斷像素(CurrX,CurrY)是否已經處理過
% rule2=LabelImage(CurrX+m,CurrY+n)==0;
% %判斷生長條件是否滿足
% rule3=abs(double(image(CurrX,CurrY))-double(image(CurrX+m,CurrY+n)))<Threshold;
% %條件組合
% rules=rule1&rule2&rule3;
if (CurrX+m)=1&(CurrY+n)=1&LabelImage(CurrX+m,CurrY+n)==0&abs(double(image(CurrX,CurrY))-double(image(CurrX+m,CurrY+n)))<=Threshold&image(CurrX+m,CurrY+n)0
%堆棧的尾部指針后移一位
End=End+1;
%像素(CurrX+m,CurrY+n)壓入堆棧
stack(End,1)=CurrX+m;
stack(End,2)=CurrY+n;
%把像素(CurrX,CurrY)設置成邏輯1
LabelImage(CurrX+m,CurrY+n)=rn;
end
end
end
%堆棧的尾部指針后移一位
Start=Start+1;
end
end
代碼片段和文件信息
%區域生長算法:region
function?LabelImage=region(imageseedThresholdmaxv)
%image:輸入圖像
%seed:種子點坐標堆棧
%threshold:用鄰域近似生長規則的閾值
%maxv:所有生長的像素的范圍小于maxv
%?LabelImage:輸出的標記圖像,其中每個像素所述區域標記為rn
[seedNumtem]=size(seed);%seedNum為種子個數
[WidthHeight]=size(image);
LabelImage=zeros(WidthHeight);
rn=0;%區域標記號碼
for?i=1:seedNum?
???%從沒有被標記的種子點開始進行生長
????if?LabelImage(seed(i1)seed(i2))==0
???????????rn=rn+1;%?%對當前生長區域賦標號值
???????????LabelImage(seed(i1)seed(i2))=rn;
????%?????end
????????stack(11)=seed(i1);%將種子點壓入堆棧(堆棧用來在生長過程中的數據坐標)
????????stack(12)=seed(i2);
????????Start=1;%定義堆棧起點和終點
????????End=1;
????????while(Start<=End)
????????????%當前種子點坐標
????????????CurrX=stack(Start1);
????????????CurrY=stack(Start2);
????????????%對當前點的8鄰域進行遍歷
????????????for?m=-1:1
????????????????for?n=-1:1
%???????????????????????%判斷像素(CurrX,CurrY)是否在圖像內部
%???????????????????????rule1=(CurrX+m)<=Width&(CurrX+m)>=1&(CurrY+n)<=Height&(CurrY+n)>=1;
%????????????????????????%判斷像素(CurrX,CurrY)是否已經處理過
%???????????????????????rule2=LabelImage(CurrX+mCurrY+n)==0;
%??????
- 上一篇:mckd方法代碼
- 下一篇:顯色指數的MATLAB計算程序
評論
共有 條評論