алгоритм Евклида для сравнения изображений

Я собираюсь разработать приложение для сравнения изображений на java. Для этого я выбрал алгоритм Евклида. Это приложение включает в себя 2 изображения. 1. Фактическое изображение 2. Часть фактического изображения.

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

Может ли кто-нибудь дать мне алгоритмические шаги? код на java будет оценен ..!


person janasainik    schedule 28.10.2010    source источник
comment
Вы не имели в виду корреляцию? (en.wikipedia.org/wiki/Digital_image_correlation)   -  person schoetbi    schedule 28.10.2010


Ответы (1)


Вот относительно простая идея, в которой некоторые части намеренно опущены, так как вопрос пахнет домашней работой.

public static boolean contains(Image large, Image small) {
  final int largeWidth = large.getWidth(), largeHeight = large.getHeight();
  final int smallWidth = small.getWidth(), smallHeight = small.getHeight();

  if (smallWidth > largeWidth || smallHeight > largeHeight) {
    return false;
  }

  for (int x = 0; x < largeWidth - smallWidth; x++) {
    for (int y = 0; y < largeHeight - smallHeight; y++) {
      if (subImageEquals(large, x, y, small)) {
        return true;
      }
    }
  }
  return false;
}

private static boolean subImageEquals(Image large, int x, int y, Image small) {
  // TODO: checks whether all pixels starting at (x, y) match
  // those of the small image.
}
person Roland Illig    schedule 28.10.2010
comment
subImageEquals должен возвращать double для схожести, поскольку из-за сжатия и прочего шума и т. д. два изображения не равны для всех пикселей. Скорее вы должны вычислить сходство, как в алгоритме корреляции. - person schoetbi; 29.10.2010
comment
@schoetbi: да, subImageEquals должен возвращать значение типа double. @Roland Illig: Можем ли мы применить наибольший общий делитель (GCD)? - person janasainik; 29.10.2010
comment
Я не понимаю, какое отношение НОД имеет к сравнению изображений. Можете ли вы объяснить это немного больше? - person Roland Illig; 31.10.2010
comment
НОД — это как евклидово расстояние между областями. - person janasainik; 02.11.2010
comment
На самом деле я беру два изображения, такие как A и B, чтобы сравнить друг друга. Я думаю, что лучше взять 25 регионов для каждого изображения. Тогда будет неплохо посчитать расстояние между областями. Алгоритм Евклида — лучший способ найти НОД. НОД предназначен для измерения расстояния между двумя областями..! - person janasainik; 12.11.2010