Распознавание формы прямоугольника - PullRequest
0 голосов
/ 20 июля 2011

У меня есть список точек обводки, и я хочу определить, является ли этот обводка прямоугольной.Так что 4 угла примерно 90 градусов.После этого мне нужен размер, положение и ориентация прямоугольника.

Я использую C #, но алгоритмы на других языках или псевдокод также полезны.

Спасибо

Ответы [ 2 ]

1 голос
/ 20 июля 2011

Я предполагаю, что вы собрали каждый штрих в отдельный список:

  1. Найдите линию тренда для удара (я бы начал с Простая линейная регрессия для этого).
  2. Найти угол между каждыми двумя пересекающимися линиями тренда (сравните с 90 градусами с некоторым порогом).
  3. Найдите ориентацию (угол) любой из линий тренда, чтобы получить ориентацию формы(конечно, все, что близко к 0 mod 90 deg, равно 0 в случае квадрата).
  4. Найдите длину любой из линий тренда (расстояние от одного пересечения до другого)и длина одной из соседних (пересекающихся) линий, эти две длины будут вашей длиной и шириной (или шириной и высотой, если хотите) для расчета размера (области или чего-либо еще).

    • На шаге 1 вы можете использовать множество алгоритмов вычисления линии тренда, и, возможно, стоит потратить время на проверку нескольких из них.

В случае, когда все точки выбраны вта же коллекциясначала нужно разбить эту коллекцию на 4 мазка (хотя это отдельная задача ... сложная задача)

1 голос
/ 20 июля 2011

Ну, я сделал что-то подобное некоторое время назад.
Вы можете скачать его здесь .
http://up352.siz.co.il/up2/lhmjmdenn53m.png
Эта вещь позволяет вам обнаруживать края - так как высмотрите, это довольно точно.
Когда вы получаете края, все, что вам нужно, это вычислить углы между ними - и если это ~ 90, то это прямоугольник.

...