| 查看: 242 | 回复: 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 |
» 猜你喜欢
医学类期刊求推荐
已经有5人回复
生活琐事由它去
已经有4人回复
提交了我也来说说感想
已经有12人回复
青B发送上会通知了吗
已经有9人回复
西安交大新媒学院副院长用撤稿论文结题
已经有6人回复
论文撤稿了
已经有8人回复
化学专业申博
已经有4人回复
某211大学教师把个人教师官方主页改成:我跑了我跑了我跑了!官宣跑路!
已经有5人回复
26/27申博自荐
已经有9人回复
博士申请
已经有3人回复












回复此楼