| 查看: 226 | 回复: 0 | ||
[求助]
Matlab大神帮忙看下程序谢谢
|
|
初始程序如下,本来的意图是生成一个随机离散的裂缝区域,如果裂缝能联通区域左右就输出联通路径图像,现在的需要是运行m次,生成m个不同的裂缝区域,其中可能有n个是联通的,返回n/m的值就好了,我加了一个for循环计数器但是每次都中断,怀疑是return的问题,但是不知道怎么修改,希望各位MATLAB大神帮忙看看,不甚感激!!! clc clear all; num=300; x1=unifrnd(0,20,1,num); y1=unifrnd(0,20,1,num); s=unifrnd(-pi/2,pi/2,1,num); crack=zeros(500); l=exprnd(2,1,num); for n=1:num for i=-l(n)/2:0.02:l(n)/2 theta=s(n); xx=x1(n)+i*cos(theta); yy=y1(n)+i*sin(theta); if round(xx*25)>0&&round(xx*25)<=500&&round(yy*25)>0&&round(yy*25)<=500 crack(round(xx*25),round(yy*25))=1; end % plot(xx,yy); % hold on end end % axis([0,20,0,20]); figure,imshow(crack); seedcount=1; for xxx=1:500 if crack(xxx,1)==1 seedx(seedcount)=xxx; seedy(seedcount)=1; seedcount=seedcount+1; end end %%二维堆栈生长 seedcount=seedcount-1; %像素点空间八邻域地址偏移量 nDy = [ -1 , 0 , 1 ,-1 , 1 ,-1 , 0 , 1 ]; nDx = [ -1 ,-1 , -1, 0 , 0 , 1 , 1 , 1 ]; %存储生长点的坐标 growqueX = zeros(1,500*500); growqueY = zeros(1,500*500); %标志堆栈的起点和终点 %当nStart=nEnd, 表示堆栈中只有一个点 nStart = 1; nEnd = 1; for seedindex = 1:seedcount mask=zeros(500); nStart = nEnd; growqueX(1,nEnd) = seedx(seedindex); growqueY(1,nEnd) = seedy(seedindex); while nStart <= nEnd nCurrX = growqueX(1,nStart); nCurrY = growqueY(1,nStart); for k=1:8 xx = nCurrX + nDx(k); yy = nCurrY + nDy(k); if (xx <= 500) && (xx > 0) && (yy<=500) &&(yy>0)&&(mask(xx,yy)==0)&&(crack(xx,yy)==1) nEnd=nEnd+1; growqueX(1,nEnd) = xx; growqueY(1,nEnd) = yy; if yy==500; figure,imshow(mask); return end mask(xx, yy) = 1; end end nStart= nStart+1; end end |
» 猜你喜欢
售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急
已经有4人回复
版面费该交吗
已经有8人回复
售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急
已经有5人回复
售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急
已经有3人回复
基金正文30页指的是报告正文还是整个申请书
已经有6人回复
面上可以超过30页吧?
已经有4人回复
过年走亲戚时感受到了所开私家车的鄙视链
已经有12人回复
为什么中国大学教授们水了那么多所谓的顶会顶刊,但还是做不出宇树机器人?
已经有5人回复
售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急
已经有4人回复
售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急
已经有6人回复













回复此楼