как проверить, если кривые похожи - PullRequest
3 голосов
/ 04 июля 2011

Как сравнить две черные кривые на белом фоне? Как сделать это так быстро? Например это

http://i.stack.imgur.com/xUcwc.jpg

и это

enter image description here

похожи, но это

enter image description here

и это

enter image description here

не

Первую кривую я нарисую на JPanel, вторая - изображение.

Ответы [ 3 ]

4 голосов
/ 04 июля 2011

У меня есть идея.Не уверен, что это лучший, но каким-то образом он позволяет оценить коэффициент сходства двух крав.

Позволяет составить матрицу для каждого крава, выставив 1 для черных пикселей и 0 для белых.Теперь, если мы хотим сравнить два крува с матрицами a и b, сначала мы должны построить третью матрицу c, где:

if(a[i][j] == 0 && b[i][j] == 0)
    c[i][j] = 0;
else if(a[i][j] == 0 || b[i][j] == 0)
    c[i][j] = 1;
else
    c[i][j] = 2;

Затем мы будем обозначать S количество ячеек, гдеc[i][j] != 0, и на T количество клеток, где c[i][j] == 2.И, наконец, два краве похожи, если T / S > 1 - eps, где eps, вы должны сами выбрать, какую точность вы хотите получить.

1 голос
/ 05 июля 2011

Для каждой точки кривой1 найдите ближайшую точку на кривой2, рассчитайте максимальное или среднее расстояние. Затем поменяйте местами кривые, повторите и получите максимальный результат.

Если вы хотите учесть направление - используйте модифицированную функцию расстояния, которая включает сравнение направлений.

0 голосов
/ 04 июля 2011
  1. Удалить толщину.
  2. Заменить исходную «аналоговую» линию длинными штрихами.
  3. Определить набор возможных «фигур».Я могу предложить следующий набор: 4 линии (горизонтальные, вертикальные и 2 диалекта), 4 кривые - с разрывами вверх, влево, вправо или вниз и эллипсом.
  4. Итерация по штрихам каждой линиии принять решение о его форме.

Этот алгоритм не очень точен.Вам, вероятно, придется провести дополнительный анализ, например:

  1. Если разрыв кривой слишком мал, то форма имеет эллипс.
  2. Если первый / последний ход короткий инаправленный не так, как остальные штрихи, его следует игнорировать.
...