问题描述
这个是我写的关于Zhang细化算法的代码,不过细化的结果总有些问题,而且有时候会出现数组越界的情况,在Java包里面提示java.lang.ArrayOutOfBoundsException,不知道问题出在哪里。是在JAVA程序中运行的。publicvoidtwo_step_thinning1(int[][]s_grays,intim_w,intim_h){booleancanThin;//脏标记booleanmodified=true;//条件booleancondition1;booleancondition2;booleancondition3;booleancondition4;//联结数intt;//循环变量inti;intj;intr;intc;//中心像素8邻域内前景数intn;//开辟一个跟图像同样大小的数组int[][]mark;mark=newint[im_w][im_h];while(modified){modified=false;for(r=0;r<im_h;r++)for(c=0;c<im_w;c++)mark[r][c]=0;//初始化markfor(r=1;r<im_h-1;r++)for(c=1;c<im_w-1;c++){condition1=false;condition2=false;condition3=false;condition4=false;//判断P(r,c)是否为可细化像素if(s_grays[r][c]==255){canThin=true;//计算N(P)n=0;for(i=-1;i<=1;i++)for(j=-1;j<=1;j++)if(s_grays[r+i][c+j]==255)n++;n--;//中心像素不算if(2<=n&&n<=6)condition1=true;//计算T(P):四周像素由0变255的次数t=0;if(s_grays[r-1][c+1]-s_grays[r-1][c]>0)t++;//0->255if(s_grays[r][c+1]-s_grays[r-1][c+1]>0)t++;//0->255if(s_grays[r+1][c+1]-s_grays[r][c+1]>0)t++;//0->255if(s_grays[r+1][c]-s_grays[r+1][c+1]>0)t++;//0->255if(s_grays[r+1][c-1]-s_grays[r+1][c]>0)t++;//0->255if(s_grays[r][c-1]-s_grays[r+1][c-1]>0)t++;//0->255if(s_grays[r-1][c-1]-s_grays[r][c-1]>0)t++;//0->255if(s_grays[r-1][c]-s_grays[r-1][c-1]>0)t++;//0->255if(t==1)condition2=true;if(s_grays[r][c-1]*s_grays[r][c+1]*s_grays[r+1][c]==0&&s_grays[r-1][c]*s_grays[r][c+1]*s_grays[r+1][c]==0)condition3=true;if(s_grays[r+1][c]*s_grays[r][c-1]*s_grays[r-1][c]==0&&s_grays[r][c+1]*s_grays[r-1][c]*s_grays[r][c-1]==0)condition4=true;if(condition1&&condition2&&condition3&&condition4){mark[r][c]=1;}}}//根据标记结果删除for(r=1;r<im_h-1;r++)for(c=1;c<im_w-1;c++)if(mark[r][c]==1){s_grays[r][c]=0;modified=true;}}}
解决方案
解决方案二:
那一行出错?错误信息发来看看,或者给个能执行的main方法