在java中查找pgm文件中2-d数组的平均值

时间:2013-11-17 15:31:05

标签: java arrays pgm

嘿,我想为pgm文件构建一个2-d数组的低通滤波器。该程序假设用它的平均值和它的8个最近邻居替换每个像素。我被困住了,不知道我做错了什么。谢谢您的帮助。现在它给了我一个java.lang.ArrayIndexOutOfBoundsException:-1错误。

    public static int[][] lowpass(int[][] image)  
{
    int height = image.length;
  int width = image[0].length;
  int[][] result = new int[height][width];
  int sum;
  int avg;

  for (int col = 0; col < image.length; col++)
  {
     result[0][col] = image[0][col];
     result[height - 1][col] = image[height - 1][col];
  }

  for (int row = 0; row < image[0].length; row++)
  {
     result[row][0] = image[row][0];
     result[row][width - 1] = image[row][width - 1];
  }      

  for (int row = 1; row < height - 1; row++)
  {  
     for (int col = 1; col < width - 1; col++)
     {
        sum = image[row - 1][col - 1] + image[row - 1][col] + image[row - 1][col + 1] + image[row][col - 1] + image[row][col] + image[row][col + 1] + image[row +1][col - 1] + image[row +1][col] + image[row + 1][col + 1];
        avg = sum / 9;
        result[row][col] = avg;
     }
  }

    return result;
}

1 个答案:

答案 0 :(得分:2)

您的代码中有很多错误:

  1. 您遍历所有单元格,而不仅仅是邻居。
  2. 你永远不会为总和增加价值。
  3. 每次检查新单元格时都需要重置它。
  4. 我会写一个更简单的方法calculateAvg(image, col, row)来计算基于单元格和邻居的平均值。不要忘记检查边缘发生的事情。