Чтение 2d массива из другого 2D массива в Java

Чтобы выполнить выравнивание локальной гистограммы, я пытаюсь прочитать некоторые строки и столбцы из заполненного нулями двумерного массива и выполнить на них некоторый процесс. На первом этапе я дополняю свой исходный массив (arr[][]) с нуля и сохранить его в temp_arr[][] который отлично работает Затем я пытаюсь прочитать массив 3*3 из этого temp_arr[][] каждый раз и сохраняйте их в массиве 3*3, чтобы выполнить на них какой-либо процесс. однако, я получаю результат частично, а затем ошибку. Вот что я получаю после запуска своего кода:

000 012 045

000 123 456

000 230 560

00 Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 5 at lhe_test.main(lhe_test.java:28)

Может кто-нибудь помочь, пожалуйста?

вот мой код:

public class lhe_test {

    public static int x=0 ; 
    public static double sum = 0;
    public static double mn =0;
    public static int [][] savedImage;
    public static int row , col;
    public static int [][] temp_tb= new int[ImagePro.pad][ImagePro.pad];


    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int [][] arr = {{1,2,3},
                {4,5,6},{7,8,9},{10,11,12}};

        ImagePro.pad = 3 ;
        int temp_arr[][] = zero_pad(arr , ImagePro.pad);
        int p = ImagePro.pad/2; 

      for (int i = 0 ; i < temp_arr[0].length -p ; i ++){
        for (int j = 0 ; j< temp_arr.length - p ; j++){
        for (int ii=0 ; ii< ImagePro.pad ; ii++){
              for (int jj =0 ; jj<ImagePro.pad ; jj++){

                  int temp=temp_arr[ii+i][jj+j];
                  temp_tb[ii][jj]= temp;
                 System.out.print(temp_tb[ii][jj]); 
            }
              System.out.println();
                      }

          System.out.println();

        }
       }

      }
    public static int[][] zero_pad (int [][] imageData , int ratio){


        int w = imageData[0].length +((ratio-1));
        int h = imageData.length +((ratio-1));
        int [][]temp = new int[h][w];
        for (int i = 0 ; i<h ; i++){
            for (int j =0 ; j<w ; j++){
                temp[i][j]=0;
            }
        }

        for (int k=0 ; k<imageData.length ; k++){
            for (int l=0 ; l <imageData[0].length ; l++){
                temp[k+(ratio-1)/2][l+(ratio-1)/2]= imageData[k][l];
            }
        }
    return temp;
    }

}

1 ответ

Добавлены некоторые комментарии в некоторых проблемных областях

import java.awt.image.BufferedImage;

public class lhe_test {

    public static int [][] temp_tb= new int[3][3];
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int [][] arr = {{1,2,3},
                {4,5,6},{7,8,9},{10,11,12}};

        int temp_arr[][] = zero_pad(arr , 3); // tmp_arr is [6][5]

        int p = 3/2; // integer division 3/2 = 1

        // i will have values 1,2,3
        for (int i = p ; i < temp_arr[0].length -p ; i ++){   
            // j will have values 1,2,3,4
            for (int j = p ; j< temp_arr.length -p ; j++){    
                // ii will have values 0,1,2,3,4, which is > 2
                for (int ii=i-p ; ii< i+ 2*p ; ii++){         
                    // jj will have values 0,1,2,3,4,5, which is > 2
                    for (int jj =j- p ; jj<j + 2*p  ; jj++){  
                        temp_tb[ii][jj]=temp_arr[ii][jj];
                    }

                }
            }
        }
    }
    public static int[][] zero_pad (int [][] imageData , int ratio){


        int w = imageData[0].length +((ratio-1)); 
        // w = 3+(3-1) = 5
        int h = imageData.length +((ratio-1)); 
        // h = 4+(3-1) = 6
        int [][]temp = new int[h][w];
        for (int i = 0 ; i<h ; i++){
            for (int j =0 ; j<w ; j++){
                temp[i][j]=0;
            }
        }

        for (int k=0 ; k<imageData.length ; k++){
            for (int l=0 ; l <imageData[0].length ; l++){
                temp[k+(ratio-1)/2][l+(ratio-1)/2]= imageData[k][l];
            }
        }
        return temp;
    }
}
Другие вопросы по тегам