Я пытаюсь найти надежный способ определить сходство между геометрическими фигурами (многоугольниками).
В одном из своих подходов я пытался использовать библиотеку cvopen и методы findContours() и matchShapes(). Однако для меня это не идеальный способ, так как у меня могут быть очень похожие фигуры, но с разными координатами точек. И соответственно две фигуры определяются как совершенно разные. Пример ниже
Я начал исследовать вопрос дальше и попытался определить идентичность фигур на основе площади, периметра и сравнения углов фигур. Но и этот вариант не совсем оптимален, так как одинаковые фигуры могут отличаться по размеру (а значит, и по площади и по периметру), а углы фигур могут немного отличаться. Пример ниже
Вы можете спросить: какие цифры я считаю схожими, а какие разными? В примере ниже фигуры категорически не похожи друг на друга, но первые две фотографии я отнесу к похожим фигурам.
Я не прошу готовый код решения, я лишь прошу у вас советов и идей. Какими еще методами можно попробовать правильно определить сходство фигур?
matchShapes должен работать. Почему вы считаете, что это не так? Масштаб и вращение не должны быть проблемой.
См. Learnopencv.com/shape-matching-using-hu-moments-c-python
Похожий вопрос: stackoverflow.com/q/77774217/12728244
Можете ли вы определить, что именно здесь означает сходство? Типичными подходами являются контурные моменты, расстояние Хаусдорфа, расстояние фаски и тому подобное, но часто это недостаточно хорошо соответствует интуитивному неявному определению «сходства». Подходы могут использоваться с нормализацией положения, размера и угла фигур или без них.
@MarkSetchell Да, в этом случае цифры также считаются схожими.
Возможно, мы сможем вам помочь, если вы расскажете, откуда взялись эти цифры. у вас есть какое-то применение, но вы пока держите это в секрете. ты говоришь абстрактно/расплывчато. это скрывает истинную задачу.
@ChristophRackwitz Я не думал, что это важно. Могу поделиться: сравниваю текст в документе на тождественность по ключевым фразам. Я сделал шаблон рисунка, определив координаты ключевых фраз. На каждом последующем входящем документе я ищу ключевые фразы и рисую цифру. Затем я сравниваю фигуру на шаблоне с новой фигурой.
Вас волнует исключительно текст или также документ/макет текста? чем может отличаться сам текст? какие различия несущественны, какие существенны? — звучит как задача НЛП, возможно, ML/DL/AI. Я бы не подумал подойти к этому «графически».
Вопрос интересный, и я уверен, что на него можно посмотреть со многих точек зрения, поскольку очень много вопросов остается открытым. Мой вопрос к вам: хотите ли вы узнать, похожи ли они по форме? или должность тоже?
Пара методов, которые пришли мне в голову прямо сейчас:
Удачи!
1) Если фигурки одинаковые, но разных размеров - по мне они должны быть одинаковыми; 2) Если фигуры одинаковые, но лежат в разных координатах - по мне они должны быть одинаковыми; 3) Если 1-3 угла имеют разные наклоны (как в примере номер два), но в целом видно, что фигуры похожи - по мне они должны быть одинаковыми;
Один из вариантов — использовать сходство формы (несколько модулей), в котором в основном используется расстояние Фреше :
from shapesimilarity import shape_similarity
def are_similar(p1, p2, threshold=0.9): # << adjust if needed
try:
sim = shape_similarity(p1, p2)
except AssertionError:
sim = 0
return sim > threshold
Используемые входы:
Спасибо, что обратили внимание на мой вопрос и поделились кодом. Я рассмотрю этот подход и вернусь к вам.
Спасибо, ваш подход мне очень помог
Считаются ли фигуры подобными, если они имеют совершенно одинаковую форму, но во много раз больше/меньше? А как насчет того, где одно является вращением другого?