Проблема с вашим кодом в том, что при инициализации массива здесь:
int i, j;
int[][] hor = new int[i][j];
Это можно прочитать как:
int i, j=0;
int[][] hor = new int[0][0];
Значением по умолчанию для int является 0, поэтому в основном вы создаете пустой двумерный массив. Когда вы пытаетесь вставить значения, выдается исключение.
Чтобы исправить это, переместите инициализацию массива в коде, где вы уже знаете высоту и ширину.
width = image.getWidth();
height= image.getHeight();
int[][] hor = new int[height][width];
И уберите эти i, j сверху. Они вам не нужны;) Определите их только для циклов. Хорошей практикой является определение переменной там, где она вам нужна, а не на уровне класса.