0

我正在尝试根据以下参数合并两个黑白图像。

新创建的数组使用两个图像的宽度和高度中最大的一个作为它自己的。数组中特定点的 int 包含一个表示灰度量的数字。新的二维数组将根据以下条件合并两个图像。

  • 如果位置在两个数组中都存在,则结果数组中的值是数组 a 和 b 中的值的平均值。
  • 如果位置只存在于数组 a 中,则结果数组中的值就是数组 a 中的值
  • 如果位置仅存在于数组 b 中,则结果数组中的值是数组 b 中的值
  • 如果该位置不在两个数组中,则在结果数组中的该位置分配值 127。

这是我的代码。arrayIndexOutOfBounds: 167由于某种原因它返回时不会运行。如果有人可以查看它,我将不胜感激。

public static int[][] merge(int[][] a, int[][] b)
{
    int biggerx = 0;
    int biggery = 0;
    if (a[0].length > b[0].length) {
        biggery = a[0].length;
    }
    else {
        biggery = b[0].length;
    }
    if (a.length > b.length) {
        biggerx = a.length;
    }
    else {
        biggerx = b.length;
    }
    int[][] merged = new int[biggerx][biggery];
    for (int x = 0; x < merged.length; x++) {
        for (int y = 0; y < merged[x].length; y++) {
            if (x <= a.length && y <= a[x].length && x > b.length && y > b[x].length) {
                merged[x][y] = a[x][y];
            }
            else if (x <= b.length && y <= b[x].length && x > a.length && y > a[x].length) {
                merged[x][y] = b[x][y];
            }
            else if (x <= b.length && y <= b[x].length && x <= a.length && y <= a[x].length) {
                merged[x][y] = ((a[x][y] + b[x][y]) /2);
            }
            else {
                merged[x][y] = 127;
            }
        }
    }
    return merged;
}
4

1 回答 1

0
else if (x <= b.length && y <= b[x].length && x <= a.length && y <= a[x].length) {
    merged[x][y] = ((a[x][y] + b[x][y]) /2); // <= problematic line
}

在这一行中,您尝试达到超出 a 界限的点。在我的示例中,我将 a 设置为 be(10, 10)并将 b 设置为(5, 20)。它在x = 0, y = 10. 现在,如您所见a[0][10],它超出了范围。

这是我的试用代码及其输出:

else if (x <= b.length && y <= b[x].length && x <= a.length && y <= a[x].length) {
    System.out.println("x = " + x + " y = " + y);
    System.out.println("merged.length = " + merged.length);
    System.out.println("merged[0].length = " + merged[0].length);
    System.out.println("a.length = " + a.length);
    System.out.println("a[0].length = " + a[0].length);
    System.out.println("b.length = " + b.length);
    System.out.println("b[0].length = " + b[0].length);
    System.out.println();
    System.out.println();
    merged[x][y] = ((a[x][y] + b[x][y]) /2);
}

输出:

x = 0 y = 10

merged.length = 10

merged[0].length = 20

a.length = 10

a[0].length = 10

b.length = 5

b[0].length = 20

编辑:刚刚注意到我提出的解决方案不适用于您。

EDIT2:需要将语句类型更改为x <= a.lengthand 或andy <= a[x].lengthx < a.lengthy < a[x].lengthx <= a.length - 1y <= a[x].length - 1

于 2013-07-23T18:13:48.593 回答