資源簡介
基于種子點和分割閾值的區域生長實現代碼,以種子點為中心,由右、下、左、上的順序實現由內而外的生長。
代碼片段和文件信息
function?[?quyu_markxj_z_numxj_z_mark]?=?quyushengzhang(?imgcentermax_numTmaxv?)
%QUYUSHENGZHANG?Summary?of?this?function?goes?here
%???Detailed?explanation?goes?here
[m?n]=size(img);
quyu_mark=zeros(mn);%先賦初值,所有點的標號均為0
xj_z_num=0;
xj_z_mark=zeros(20);
?for?t_e=1:max_num
?????i=center(2t_e);%提取種子點的坐標
?????j=center(1t_e);
?????if?img(ij)>T
?????????quyu_mark(ij)=t_e;%區域標號
?????????t_points=1;%區域內目標點個數
?????????a=1;
?????????b=1;
?????????c=1;
?????????d=1;???%四個方向的計數器
????%?????h=0;
?????????%%
??????????%為了限制搜索的時間,我們將搜索范圍設置在30*30的范圍內,因為質心位置不一定居中,所以我們最多搜索質心周圍30*30的范圍
?????????a_r=min(30i);
?????????b_r=min(30n-j);
?????????c_r=min(30m-i);
?????????d_r=min(30j);
?????????%%
????????while?a ?????????????????????????%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%以下為上側生長程序
????????????while?a ????????????????mina=max(j-a1);
????????????????maxa=min(j+an);????????????????%找出兩側端點,此時只需考慮列
????????????????for?k=mina:maxa
????????????????????if?k==mina?????????????????????????????????%若為左端點
????????????????????????if?quyu_mark(i-a+1k)==t_e||quyu_mark(i-a+1k+1)==t_e???%且下或右下存在種子,進行下面的判斷
?????????????????????????????if?img(i-ak)>T
????????????????????????????????quyu_mark(i-ak)=t_e;
????????????????????????????????t_points=t_points+1;
????????????????????????????end
????????????????????????end
????????????????????else??if?k==maxa????????????????%若為右端點
????????????????????????????????if?quyu_mark(i-ak-1)==t_e||quyu_mark(i-a+1k-1)==t_e||quyu_mark(i-a+1k)==t_e???%且左或左下或下存在種子,進行下面的判斷
????????????????????????????????????if?img(i-ak)>T
????????????????????????????????????????quyu_mark(i-ak)=t_e;
????????????????????????????????????????t_points=t_points+1;
????????????????????????????????????end
????????????????????????????????end
????????????????????????%end
???????????????????????????%k不為端點,則需檢測左、左下、下和右下
????????????????????else??if?quyu_mark(i-ak-1)==t_e||quyu_mark(i-a+1k-1)==t_e||quyu_mark(i-a+1k)==t_e||quyu_mark(i-a+1k+1)==t_e????%左下、下或右下存在種子則進行下面的判斷
????????????????????????????????if?img(i-ak)>T
????????????????????????????????????quyu_mark(i-ak)=t_e;
????????????????????????????????????t_points=t_points+1;
????????????????????????????????end
????????????????????????end
????????????????????????end
????????????????????end
????????????????end
????????????????a=a+1;
????????????????break;
????????????end
????????????%%%%%%%%%%%%%%%%上側完成一次生長,以下為右側生長程序%%%%%%%%%%%%%%%%
????????????while?b<=b_r?????????????????????????%b<=b_r只執行一次(用break來保證)?????
????????????????minb=max(i-b1);
????????????????maxb=min(i+bm);????????????????%找出兩側端點,此時則只需考慮行
????????????????for?k=minb:maxb
????????????????????if?k==minb?????????????????????????????????%若為上端點
????????????????????????if?quyu_mark(kj+b-1)==t_e||quyu_mark(k+1j+b-1)==t_e???%且左或左下存在種子,進行下面的判斷
????????????????????????
- 上一篇:遺傳算法及其改進算法的matlab程序
- 下一篇:通信系統課群綜合課程設計
評論
共有 條評論