对于一个学校项目,我正在尝试建立一个跟踪方法。它应该基于 EdgeDetection 方法中的 Array 来跟踪形状轮廓的坐标。我确保轮廓只有一个像素厚。因为它是一个项目,所以我不能使用库中的任何花哨的技巧。到目前为止,我正在使用嵌套的 forloop 来查找形状的开头。然后我使用这样的形状:p9 p2 p3p8 p1 p4p7 p6 p5p1 是我在数组中的当前位置,然后我在 p2-p9 中搜索下一个位置。到目前为止的代码如下所示:private static String traceCoordinates(int o[][]){ String useless = null; //int[][] n = new int[m[0].length][m.length]; //int[][] o = new int[n.length][n[0].length]; // n = transpose(m); //o = thinning(n); int hits = 0; System.out.print(" "); for (int a = 0; a < 1; a++) { for (int b = 0; b < o[0].length; b++) { String c = String.format("%3s", b); System.out.print(c + " "); }System.out.println(""); } for (int y = 0; y < o.length; y++) { //String e = String.format("%3s", y).replace(" ", "0"); //System.out.print("row" + e + " "); for (int x = 0 ; x < o[0].length ; x++) { if (o[y][x] == 0) { int xEnd = x; int yEnd = y; int a = y + 1; int b = y - 1; int c = x + 1; int d = x - 1; /* Her findes værdien af de 8 nabopixler på baggrund af deres indbyrdes index. */ int p2 = o[b][x]; int p3 = o[b][c]; int p4 = o[y][c]; int p5 = o[a][c]; int p6 = o[a][x]; int p7 = o[a][d]; int p8 = o[y][d]; int p9 = o[b][d];完成后,跟踪通过 StringBuilder 作为字符串返回,因此是无用的变量。我的问题是我的方法只能检测到一个方向的线。当该方向上没有更多像素时,它会跳出循环。
1 回答
当年话下
TA贡献1890条经验 获得超9个赞
对于轮廓跟踪,仅知道当前像素是不够的。您还需要到达它的方向。然后,从当前方向开始,围绕当前像素(顺时针或逆时针)旋转,开始寻找下一个像素。
因此,您的表应该有 8 x 256 个条目。或者,您可以依次尝试 8 个邻居(实际上 6 个就足够了)。不同的空间/时间折衷是可能的。
要启动遍历,您可以查找一个像素被一个空白包围的配置,然后是一个像素。停止标准有点棘手。为了正确起见,您应该在回到初始像素时停下来,准备继续朝同一方向前进。
添加回答
举报
0/150
提交
取消