int[][] maxErose(int[][] input, int[][] itag) { int before = 1; boolean end = false; int[][] ret = new int[input.length][input.length]; int[][] rtag = new int[input.length][input.length]; int[][] temp = new int[input.length][input.length]; int s; Roi[] r; int it = 1; for (int i = 0; i < input.length; ++i) { arrayCopy(input[i], temp[i]); arrayCopy(itag[i], rtag[i]); } while (!end) { for (int i = input.length - 1; i >=0; --i) { arrayCopy(temp[i],ret[i]); } s = segment(ret, rtag); r = findRoi(s, rtag, 0, 0, 60, 60); for (int i = 0; i < s; i++) { before = segment(temp, rtag); temp = erose(temp, rtag, r, i); if (segment(temp, rtag) < before) end = true; } } return ret; } int[][] erose(int[][] input, int[][] itag, Roi[] r, int k) { Otoczenie S = new Otoczenie(1, 1, 1, 1, 1, 1, 1, 1, 1); int[][] ret = new int[input.length][input.length]; for (int i = 0; i < input.length; ++i) { arrayCopy(input[i], ret[i]); } for (int j = r[k].yMin; j <= r[k].yMax; ++j) { for (int i = r[k].xMin; i <= r[k].xMax; ++i) { if (itag[i][j] == 2*k + 1) { if (!hit(S, i, j, input)) { itag[i][j] = 0; ret[i][j] = 0; } } } } return ret; }