void ScanLineGrowing(int crow, int ccol, IMAGE8BIT *grayim, IMAGEINT *labelim, float gThresh, int new_label) { int i,j; int left, right; int nowrow; /* Check condition */ if (crow <0 || crow >= labelim->row) return; if (ccol <0 || ccol >= labelim->col) return; if (labelim->image[crow][ccol] !=0 ) return; left = ccol-1; while (left>=0 ) { if (fabs((double)(grayim->image[crow][left+1]- grayim->image[crow][left]))>gThresh) break; left--; } right = ccol+1; while (right < labelim->col) { if (fabs((double)(grayim->image[crow][right-1]- grayim->image[crow][right]))>gThresh) break; right++; } /* Adjust */ left++; right--; /* Relabeling current line */ for (i=left; i<=right; i++) { labelim->image[crow][i] = new_label; } /* Check a line up and down*/ for (nowrow = crow-1; nowrow <= crow+1; nowrow+=2 ) { if (nowrow >=0 && nowrow < labelim->row ) { for (i=left; i<=right; i++) { for (j=(i-1); j<= (i+1); j++) { if (j>=0 && j < labelim->col) { if (fabs((double)(grayim->image[crow][i]- grayim->image[nowrow][j]))<= gThresh) { ScanLineGrowing(nowrow, j, grayim, labelim, gThresh, new_label); } } } } } } return; }