| 查看: 250 | 回复: 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 |
» 猜你喜欢
影响面上的因素
已经有9人回复
8月时间戳变的,举个手。玩一下,释放压力
已经有11人回复
一个有机合成实验室都需要哪些设备?
已经有11人回复
求各位大神看下
已经有23人回复
面上再次挂了,太难了,躺也躺不了,倦也卷不过,小学校之殇!
已经有30人回复
2027年申博
已经有4人回复
好消息?这个有何含义???
已经有10人回复
咨询面上基金
已经有4人回复
【2027博士申请】纳米药物递送方向
已经有4人回复
UV压敏胶开发
已经有7人回复










回复此楼