Сравнение двух байтовых массивов, которые представляют две картинки

Я программирую небольшое приложение для Android, и мне нужно сравнить между двумя картинками. Изображения представлены в виде двухбайтового массива.

Есть ли алгоритм для сравнения между ними? Мне нужно проверить изменения, которые были сделаны между ними.

1 ответ

Это зависит от того, хотите ли вы просто отметить, что они разные, или записать каждое из различий между ними.

Просто чтобы проверить, что они разные (как указал Хантер МакМиллен) - http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html:

boolean different = Arrays.equals(byteArray1, byteArray2);

Чтобы сохранить индивидуальные различия (при условии, что ваши фотографии имеют одинаковый размер):

byte[] differenceArray = new byte[byteArray1.length];
for (int i = 0; i < byteArray1.length; i++) {
    differenceArray[i] = (byte) (byteArray1[i] - byteArray2[i]);
}

РЕДАКТИРОВАТЬ:

Если вам нужно два измерения (например, 800x600) для вашего байтового массива, вы можете сделать:

byte[][] differenceArray = new byte[byteArray1.length][byteArray1[0].length];
for (int x = 0; x < byteArray1.length; x++) {
    for (int y = 0; y < byteArray1[0].length; y++) {
        differenceArray[x][y] = (byte) (byteArray1[x][y] - byteArray2[x][y]);
    }
}

Разностный массив будет равен 0, если между двумя изображениями нет различий, в противном случае числа будут отличаться байтами.

Другие вопросы по тегам