Поиск делается с помощью уникальных частей (искривление прямой с углом: 15-165 градусов внутри одной такой части, не нашли - расширяем радиус, нашли - отрезаем эту зону из дальнейшего поиска) на общем изображении и их расположении относительно друг друга.
Все контурные кусочки поворачиваются по одному алгоритму: например, максимальное кол-во точек по линии-радиусу (от центра до края) - всегда вниз. Если они повторяются - максимальный угол между такими повторами - всегда слева.
Каждый такой кусок - это отдельный хэш. Связка таких кусков - "дерево" хешей.
При поиске - сравниваем хэши искомого и куска из базы с другим через расстояние Хэмминга и ищем зависимости по дереву наиболее совпавшей их последовательности.