資源簡介
用matlab實現的鏈碼提取算法。做項目時用到的,久尋不獲,于是自己動手寫了一個。希望對大家有所幫助。
需要把三個文件放在一個工作目錄下。主函數是listcode,需要調用getcode和searchtip函數。
需要把三個文件放在一個工作目錄下。主函數是listcode,需要調用getcode和searchtip函數。
代碼片段和文件信息
%此函數用來根據一個已知點來提取以該點為端點的特征線的鏈碼
%im為輸入二值圖像x0y0為端點坐標
function?result=getcode(imx0y0)
[m?n]=size(im);
points(1)=x0;???%用points記錄所有鏈碼起始點的位置
points(2)=y0;
next=1;????%用來判斷是否結束對當前鏈碼的搜索
number=1;??%用來記錄當前鏈碼以搜索點的數量
list=[];
list(number)=0;
x=x0;
y=y0;
%每當搜索到一個起始點,搜索其周圍點,追尋鏈碼軌跡
while(next==1)
????if(x<=0|x>m|y<=0|y>n)????%如果鏈碼當前點已到達邊界,則停止搜索
????????next=0;
????else
????????im(xy)=0;???????%把已搜索過的點值置零,以免重復搜索
????????
????????%按照方向表中從1到8的順序檢索當前點周圍是否存在非0點
????????if(im(xy+1)==1)
????????????list(number)=4;
????????????x=x;
????????????y=y+1;
????????????x1=x;
????????????y1=y;
????????????number=1+number;
????????????if(x==x0&y==y0)?????%判斷是否回到起始點,若是則當前特征線鏈碼提取結束
????????????????next=0;
????????????end
????????elseif(im(x+1y)==1)
????????????list(number)=6;
????????????x=x+1;
????????????y=y;
????????????x1=x;
????????????y1=y;
????????????number=1+number;
????????????if(x==x0&y==y0)
????????????????next=0;
????????????end
????????elseif(im(xy-1)==1)
????????????list(number)=8;
????????????x=x;
????????????y=y-1;
????????????x1=x;
????????????y1=y;
????????????number=number+1;
????????????if(x==x0&y==y0)
????????????????next=0;
????????????end
????????elseif(im(x-1y)==1)
????????????list(number)=2;
????????????x=x-1;
????????????y=y;
????????????x1=x;
????????????y1=y;
????????????number=1+number;
????????????if(x==x0&y==y0)
????????????????next=0;
????????????end
????????elseif(im(x+1y+1)==1)
????????????list(number)=5;
????????????x=x+1;
????????????y=y+1;
????????????x1=x;
????????????y1=y;
????????????number=1+number;
????????????if(x==x0&y==y0)
????????????????next=0;
????????????end
????????elseif(im(x+1y-1)==1)
????????????list(number)=7;
????????????x=x+1;
????????????y=y-1;
????????????x1=x;
????????????y1=y;
????????????number=1+number;
????????????if(x==x0&y==y0)
????????????????next=0;
????????????end
????????elseif(im(x-1y-1)==1)
????????????list(number)=1;
????????????x=x-1;
????????????y=y-1;
????????????x1=x;
????????????y1=y;
????????????number=1+number;
????????????if(x==x0&y==y0)
????????????????next=0;
????????????end
????????elseif(im(x-1y+1)==1)
????????????list(number)=3;
????????????x=x-1;
????????????y=y+1;
????????????x1=x;
????????????y1=y;
????????????number=1+number;
????????????if(x==x0&y==y0)
????????????????next=0;
????????????end
????????else
????????????next=0;
????????end
????end
end
result=[x0?y0?x1?y1?list(:)‘];
end
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2690??2008-12-04?10:38??getcode.m
?????文件???????2106??2008-12-04?10:37??searchtip.m
?????文件???????4627??2008-12-04?10:43??listcode.m
-----------?---------??----------?-----??----
?????????????????9423????????????????????3
- 上一篇:CRC循環冗余校驗的matlab仿真程序
- 下一篇:MRF matlab源碼
評論
共有 條評論