Ответ 1
Хорошо, для этого у вас есть пара опций, в зависимости от того, насколько вам нужен ваш подход.
Простые решения (с допущениями):
Для этих методов я предполагаю, что ваши изображения, которые вы предоставили, - это то, с чем вы работаете (т.е. объекты уже сегментированы и примерно одинаковы. Кроме того, вам нужно будет скорректировать поворот (по крайней мере, в грубый способ). Вы можете сделать что-то вроде итеративного поворота сравнительного изображения каждые 10, 30, 60 или 90 градусов или любую грубость, с которой вы чувствуете, что можете уйти.
Например,
for(degrees = 10; degrees < 360; degrees += 10)
coinRot = rotate(compareCoin, degrees)
// you could also try Cosine Similarity, or even matchedTemplate here.
metric = SAD(coinRot, targetCoin)
if(metric > bestMetric)
bestMetric = metric
coinRotation = degrees
- Сумма абсолютных различий (SAD): Это позволит вам быстро сравнивать изображения, как только вы определили приблизительный угол поворота.
- сходство с косинусом: это работает немного по-другому, обрабатывая изображение как 1D-вектор, а затем вычисляет размерный угол между два вектора. Чем лучше совпадение, тем меньше будет угол.
Комплексные решения (возможно, более надежные):
Эти решения будут более сложными для реализации, но, вероятно, будут давать более надежные классификации.
- Haussdorf Distance: Этот ответ даст вам введение в использование этого метод. Это решение, вероятно, также нуждается в коррекции вращения для правильной работы.
- Преобразование Фурье-Меллина: Этот метод является расширением фазовой корреляции, которая может извлекать поворот, масштаб и трансляцию (RST) преобразовать между двумя изображениями.
- Обнаружение и извлечение функций: этот метод включает обнаружение "надежных" (т.е. масштабных и/или зависящих от вращения) функций в изображении и сравнивая их с набором целевых функций с помощью RANSAC, LMedS или простых наименьших квадратов. OpenCV имеет пару образцов, используя эту технику в matcher_simple.cpp и matching_to_many_images.cpp. ПРИМЕЧАНИЕ.. С помощью этого метода вы, возможно, не захотите бинаризовать изображение, поэтому есть более доступные функции обнаружения.