Сравнение двух байтовых массивов, которые представляют две картинки
Я программирую небольшое приложение для 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, если между двумя изображениями нет различий, в противном случае числа будут отличаться байтами.