Как определить лучшие 4 точки из списка, которые образуют прямоугольник?

#python #list #coordinates #rectangles

Вопрос:

После обнаружения края изображения у меня есть список точек, которые имеют произвольную форму, но я хочу исключить те, которые не влияют на форму прямоугольника. На следующем примере изображения две точки в левом нижнем углу (E, F) должны быть удалены, поэтому форма оставшихся точек почти прямая (так как D немного выше, это придает форму трапеции, но это не имеет значения)

Я подумал о грубой силе всех точек и сравнил их площадь, но это не гарантирует того, что вы прямой. Но я не знаю, как это реализовать на python. Если у кого-то есть лучший подход, я хотел бы его услышать, пожалуйста. Заранее спасибо.

пункты f, e следует удалить из списка

п = [ (8,133), (78,13), (242,89), (183,217), (217,235), (213,240) ]

Ответ №1:

Лучший подход, которому вы можете следовать, — это использование наклона

Математическая формула для наклона данной прямой показана ниже.

 m = (y2-y1)/(x2-x1)  

так, например: если наклон (8,133), (78,13) равен (242,89), (183,217), это означает, что у нас есть 2 параллельные линии, то у нас есть прямоугольник, но это не означает, что 4 точки на 4 углах. однако они будут находиться в пределах 2 сторон прямоугольника.

Если вы хотите убедиться, что они находятся на 4 углах, вы можете вычислить наклон (8,133)(183,217) и наклон (78,13)(242,89), а затем сравнить их, если они равны, то у вас есть 4 угловые точки прямоугольника.

сначала выполните резервное копирование кода, вам понадобятся все возможные комбинации длины 4 из всех точек, чтобы выполнить это использование combinations с itertools

 from itertools import combinations  p = [(8,133), (78,13), (242,89), (183,217), (217,235), (213,240)] possible_combinations = [] for comb in combinations(p, 4):  possible_combinations.append(comb)  

после этого примените описанный выше алгоритм к каждой комбинации, чтобы получить свой прямоугольник.