| 查看: 213 | 回复: 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 |
» 猜你喜欢
拟解决的关键科学问题还要不要写
已经有8人回复
求推荐博导
已经有4人回复
为什么nbs上溴 没有产物点出现呢
已经有5人回复
存款400万可以在学校里躺平吗
已经有34人回复
求助一下有机合成大神
已经有4人回复
最失望的一年
已经有16人回复
求推荐英文EI期刊
已经有5人回复
26申博
已经有3人回复
基金委咋了?2026年的指南还没有出来?
已经有10人回复
疑惑?
已经有5人回复













回复此楼