void checkD(int i1, int j1) { if((i1-1)>=0 && flag[i1-1][j1]=='f' && temp[i1-1][j1]=='D') { flag[i1-1][j1]='t'; noD++; checkD(i1-1, j1); } if((i1+1)<m && flag[i1+1][j1]=='f' && temp[i1+1][j1]=='D') { flag[i1+1][j1]='t'; noD++; checkD(i1+1, j1); } if((j1-1)>=0 && flag[i1][j1-1]=='f' && temp[i1][j1-1]=='D') { flag[i1][j1-1]='t'; noD++; checkD(i1, j1-1); } if((j1+1)<n && flag[i1][j1+1]=='f' && temp[i1][j1+1]=='D') { flag[i1][j1+1]='t'; noD++; checkD(i1, j1+1); } }
int connected() { int i1=0, j1=0; noT=noD=0; nflag=0; for(i1=0; i1<m; i1++) { for(j1=0; j1<n; j1++) { if(temp[i1][j1]=='T') { nflag=1; break; } } if(nflag) break; } //printf("ti1=%d j1=%d\n", i1, j1); nflag=0; if(temp[i1][j1]=='T') { reset(); flag[i1][j1]='t'; noT++; checkT(i1, j1); } for(i1=0; i1<m; i1++) { for(j1=0; j1<n; j1++) { if(temp[i1][j1]=='D') { nflag=1; break; } } if(nflag) break; } //printf("di1=%d j1=%d\n", i1, j1); if(temp[i1][j1]=='D') { reset(); flag[i1][j1]='t'; noD++; checkD(i1, j1); } if(noT==countT && noD==countD) return 1; else return 0; }
void CPUSkeletonize::perform(int type, int structElemV, Image3d *image) { Image3d imageIn(image->getRows(), image->getCols(), image->get3dMatImage().clone()); switch (type) { case 0: { checkA(image, imageIn, structElemV); break; } case 1: { checkB(image, imageIn, structElemV); break; } case 2: { checkC(image, imageIn, structElemV); break; } case 3: { checkD(image, imageIn, structElemV); break; } } imageIn.clear(); }