在java中查找pgm文件中二维数组的平均值

在java中查找pgm文件中二维数组的平均值,java,arrays,pgm,Java,Arrays,Pgm,嘿,我想为pgm文件的二维阵列构建一个低通滤波器。该程序假定用每个像素及其8个最近邻的平均值替换每个像素。我陷入困境,不知道自己做错了什么。谢谢你的帮助。现在它给了我一个java.lang.ArrayIndexOutOfBoundsException:-1错误 public static int[][] lowpass(int[][] image) { int height = image.length; int width = image[0].length; in

嘿,我想为pgm文件的二维阵列构建一个低通滤波器。该程序假定用每个像素及其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;
}
公共静态int[][]低通(int[][]图像)
{
int height=image.length;
int width=图像[0]。长度;
int[][]结果=新的int[高度][宽度];
整数和;
国际平均值;
for(int col=0;col
您的代码中有许多错误:

  • 迭代所有单元格,而不仅仅是相邻单元格
  • 你永远不会给总和增加价值
  • 每次检查新单元格时都需要重置它

  • 我将编写一个更简单的方法
    calculateAvg(image,col,row)
    ,它将根据单元格和邻居计算平均值。别忘了检查边上发生了什么。

    好吧,代码中没有任何地方可以计算当前piel及其8个邻居的平均值。每次迭代的总和都保持在0。是否确定
    sum
    大于9?因为否则,此
    求和/9
    计算将为您提供
    0
    (整数转换)。最好使用
    float[][]result
    avg=sum/9.0
    。只是一个简单的猜测;)我让它工作了。谢谢你的建议