我试图通过导航连接到至少一个白色像素的黑色像素来获取二进制图像的周边,当然我没有做到这一点。它适用于前几个像素,但由于某种原因,它超出连接像素的轨道,我的意思是它不能再找到黑色像素。我可能做错了但请,请赐教。 提前谢谢,
public void getPerimeter(){
int[] start = new int[2];
start = findStart();
int[][][] P = new int[8][8][2];
int[] c = new int[2];
c[0] = start[0]; c[1] = start[1];
do{
P = setNeighbors(c[0], c[1]);
int i=backTrack(P);
do{
if(getPixelval(P[i][i][0], P[i][i][1]) == BLACK){
++Perimeter;
c[0] = P[i][i][0];
c[1] = P[i][i][1];
prev[0] = P[i-1][i-1][0];
prev[1] = P[i-1][i-1][1];
break;
}
i++;
}while(true);
if(c[0] == start[0] && c[1] == start[1])break;
}while(true);
}
public int backTrack(int[][][] P){
int i=0;
for(int j=0;j<8;j++){
if(P[j][j][0]==prev[0] && P[j][j][1]==prev[1]){
return j;
}
}
return i;
}
public int[][][] setNeighbors(int row, int col){
int[][][] P = new int[8][8][2];
P[0][0][0] = row-1; P[0][0][1] = col;
P[1][1][0] = row-1; P[1][1][1] = col-1;
P[2][2][0] = row; P[2][2][1] = col-1;
P[3][3][0] = row+1; P[3][3][1] = col-1;
P[4][4][0] = row+1; P[4][4][1] = col;
P[5][5][0] = row+1; P[5][5][1] = col+1;
P[6][6][0] = row; P[6][6][1] = col+1;
P[7][7][0] = row-1; P[7][7][1] = col+1;
return P;
}
public int[] findStart(){
int[] spoint = {0,0};
for(int i=0;i<image.getWidth();i++){
for(int j=0;j<image.getHeight();j++){
if(getPixelval(j, i) == BLACK){
spoint[0] = j;
spoint[1] = i;
++Perimeter;
prev[0] = j-1;
prev[1] = i;
return spoint;
}
}
}
return spoint;
}