Ну, для этого у вас есть несколько вариантов в зависимости от того, насколько вам нужен ваш подход.
Простые решения (с допущениями):
Для этих методов I Предполагая, что ваши изображения, которые вы указали, - это то, с чем вы работаете (т. е. объекты уже сегментированы и примерно одинаковы. Также вам нужно будет скорректировать поворот (по крайней мере, грубо). например,
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
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 . ПРИМЕЧАНИЕ. С помощью этого метода вы, вероятно, не захотите бинаризовать изображение, поэтому есть более доступные функции обнаружения.
задан Mark Amery 8 October 2017 в 20:33
поделиться