matlab链码程序.docx

上传人:牧羊曲112 文档编号:3061492 上传时间:2023-03-10 格式:DOCX 页数:11 大小:37.77KB
返回 下载 相关 举报
matlab链码程序.docx_第1页
第1页 / 共11页
matlab链码程序.docx_第2页
第2页 / 共11页
matlab链码程序.docx_第3页
第3页 / 共11页
matlab链码程序.docx_第4页
第4页 / 共11页
matlab链码程序.docx_第5页
第5页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《matlab链码程序.docx》由会员分享,可在线阅读,更多相关《matlab链码程序.docx(11页珍藏版)》请在三一办公上搜索。

1、matlab链码程序map1=imread(leaf.jpg);row,col,dep=size(map1); %行,列,深度值map=zeros(row,col);pixsum=row*col; %像素总数%灰度化for i=1:rowfor j=1:colmap(i,j)=0.11*map1(i,j,1)+0.59*map1(i,j,2)+0.3*map1(i,j,3);endend%灰度化完成,输出灰度图%figure(1)%imshow(map,)%title(原始灰度图像)Y=zeros(row,col); %存储输出图像%二值化for i=1:rowfor j=1:colif ma

2、p1(i,j)>170Y(i,j)=0;elseY(i,j)=1;endendendfigure(2)imshow(Y,)title(二值化后图像)A1=sum(sum(Y);%腐蚀B=ones(3,3);%腐蚀剂OUT1=zeros(row,col);%程序中间输出1OUT=zeros(row,col);%输出边界图像a=0;for i=2:row-1for j=2:col-1a=sum(sum(Y(i-1:i+1,j-1:j+1).*B);if a=9OUT1(i,j)=1;elseOUT1(i,j)=0;endendendOUT=Y-OUT1;figure(3)imshow(OUT,

3、)title(边界图像)%以下为链码程序xi=;yi=;%连续存储对应的点坐标stack=0 0;%存储当前点坐标for i=1:rowfor j=1:colif OUT(i,j)>0stack=i,j;breakendendif stack(1)=0breakendendY=OUT;%逆时针,左下45度开始计算链码code=;%存储链码dir=1 -1;%链码前进方向dircode=5;stack0=stack;%前一点的坐标m=stack(1);%固定起始点坐标,并在灰度图中标示。n=stack(2);map(m,n)=0;fprintf(链码起始点坐标为n,m,n)figure(1)

4、imshow(map,)title(灰度图像)stack=0 0;c=1;while stack(1)=m|stack(2)=n%直至回到起始点停止链码stack=stack0+dir;while Y(stack(1),stack(2)=1a=dir(1);b=dir(2);%根据当前方向,逆时针旋转45度调整新方向 while c=1if a=0&b=-1dir=1 -1;dircode=5;break;endif a=-1&b=-1dir=0 -1;dircode=4;break;endif a=-1&b=0dir=-1 -1;dircode=3;break;endif a=-1&b=1d

5、ir=-1 0;dircode=2;break;endif a=0&b=1dir=-1 1;dircode=1;break;endif a=1&b=1dir=0 1;dircode=0;break;endif a=1&b=0dir=1 1;dircode=7;break;endif a=1&b=-1dir=1 0;dircode=6;break;endendstack=stack0+dir;endcode=code dircode;stack0=stack;xi=xi stack(1);yi=yi stack(2);%找到新的目标点之后,顺时针旋转90度后再继续循环while c=1if a=

6、0&b=-1dir=-1 0;dircode=2;break;end if a=1&b=0dir=0 -1;dircode=4;break;end if a=0&b=1dir=1 0;dircode=6;break;end if a=-1&b=0dir=0 1;dircode=0;break;end if a=1&b=1dir=1 -1;dircode=5;break;end if a=-1&b=1dir=1 1;dircode=7;break;end if a=-1&b=-1dir=-1 1;dircode=1;break;end if a=1&b=-1dir=-1 -1;dircode=3

7、;break;end endendfprintf(所得链码为:coden)%以下计算差分码deltacode=zeros(1,length(code);for i=1:length(code)-1deltacode(i)=code(i+1)-code(i);enddeltacode(length(code)=code(1)-code(length(code);for i=1:length(deltacode)if deltacode(i)<0deltacode(i)=deltacode(i)+8;endendfprintf(对应的差分码为:deltacoden)%以下计算区域边界长度,存储

8、在P中M N=size(xi);%N为链码长度cnt=0;for i=1:Nif code(1,i)=0|code(1,i)=2|code(1,i)=4|code(1,i)=6cnt=cnt+1;endendP=cnt+sqrt(2)*(N-cnt);fprintf(边界周长为:%dn,P)%以下计算链码边界所包围的区域面积,存储在A中A=0;xi=m xi;yi=n yi;for i=1:NA=A+1/2*(xi(i)*yi(i+1)-xi(i+1)*yi(i);endfprintf(通过二值图像求和方式计算得到的区域面积为:%dn,A1)fprintf(通过三角形法计算链码边界包围的区域面积为:%dn,A)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号