Проблема
Мне нужно сопоставить два отпечатка пальца и оценить сходство.
Я уже публиковал похожий вопрос, но я Думаю, я добился достаточного прогресса, чтобы оправдать новый вопрос.
Ввод
Для каждого изображения у меня есть список мелочей (важных моментов). Я хочу сопоставить отпечатки пальцев, сопоставив эти два списка.
Графически они выглядят так:
Минимум состоит из триплета (i, j, theta)
, где:
i
это строка в матрицеj
- это столбец в матрицеtheta
— это направление. Я еще не использую этот параметр в своем алгоритме сопоставления.
Что я уже сделал
- Для каждого списка найдите "плотные регионы" или "кластеры". В некоторых областях точек больше, чем в других, и я написал алгоритм для их нахождения. Могу объяснить дальше, если хотите.
- Сдвиг второго списка, чтобы учесть разницу в положении пальцев на обоих изображениях. Я пренебрегаю различиями в вращении пальцев. Сдвиг осуществляется путем совмещения барицентров центров кластеров. (Надежнее барицентра всех мелочей)
Я попытался построить матрицу для каждого списка (после сдвига), чтобы для каждой мелочи увеличивался соответствующий элемент и его близкие соседи, как показано ниже.
1 1 1 1 1 1 1
1 2 2 2 2 2 1
1 2 3 3 3 2 1
1 2 3 4 3 2 1
1 2 3 3 3 2 1
1 2 2 2 2 2 1
1 1 1 1 1 1 1
Вычитая две матрицы и складывая абсолютные значения всех элементов в результирующей матрице, я надеялся получить низкие числа для близких отпечатков пальцев.
Результаты
- Я протестировал несколько отпечатков пальцев и обнаружил, что количество кластеров очень стабильно. Совпадающие отпечатки пальцев очень часто имеют одинаковое количество кластеров, а разные пальцы дают разные числа. Так что это определенно будет фактором в общей оценке сходства.
- Однако сумма различий не сработала. Не было никакой корреляции между сходством и суммой.
Мысли
- Мне может понадобиться использовать направления точек, но я пока не знаю, как
- Я мог бы использовать стандартное отклонение точек или кластеров.
- Я мог бы повторить этот процесс для разных типов мелочей. Прямо сейчас мой алгоритм определяет окончания и разветвления гребней, но, возможно, мне следует обрабатывать их отдельно.
Вопрос: как я могу улучшить свой алгоритм?
Изменить
Я прошел долгий путь с момента публикации этого вопроса, так что вот мое обновление.
Я вообще отказался от бифуркаций, потому что мой алгоритм прореживания слишком часто их путает. Однако в конечном итоге я довольно часто использовал углы.
Моя первоначальная идея подсчета кластеров довольно хорошо держится в небольших тестах, которые я проводил (разные комбинации моих пальцев и пальцев нескольких добровольцев).
Я даю оценку на основе следующих тестов (10 тестов, поэтому 10% за успех. Это немного наивно, но я найду лучший способ превратить эти 10 результатов в оценку, поскольку каждый тест имеет свои особенности):
- Cluster-thingy (все нижеследующие используют не кластеры, а мелочи. Это единственный подход, связанный с кластерами, который я использовал)
- Средняя
i
позиция - Средний угол
i
дисперсияj
дисперсия- Угловая дисперсия
i
эксцессj
эксцесс- Угол эксцесса
j
асимметрия
Действительно статистический подход.
Сравнение одних и тех же пальцев практически всегда дает от 80 до 100%. Странные сравнения пальцев между 0 и 60% (не часто 60%). У меня нет точных цифр, поэтому я не буду притворяться, что это статистически значимый успех, но это похоже на хороший первый выстрел.