Чтение 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;
}
}