2009-08-19 3 views
4

Мне нужно рассчитать минимальный прямоугольник области (наименьший возможный прямоугольник) вокруг многоугольника.Вычислить минимальный прямоугольник области для многоугольника

Единственный вход, который у меня есть, - это количество точек в многоугольнике.

У меня также есть координаты точек.

+1

только количество точек? или у вас есть координаты? – Naveen

+0

Это обычная форма? – nickf

+4

Является ли многоугольник произвольной ориентацией или прямоугольник должен быть ортогонален системе координат? –

ответ

5

Используйте алгоритм rotating calipers для выпуклого многоугольника, иначе выпуклый корпус. Конечно, вам понадобятся координаты точек в многоугольнике, а не только количество точек.

+0

Я думаю, что это мне поможет .. точнее я должен рассчитать ширину и длину полигона !!! – Samra

+1

Это не проблема: при применении алгоритма вы вычисляете ширину и длину ограничивающего прямоугольника, выровненного по каждому краю по очереди. – p00ya

-2

Очевидно, что для получения ответа понадобятся координаты точек. Если прямоугольник выровнен по осям X и Y, то решение тривиально. Если вы хотите наименьший возможный прямоугольник под любым углом, вам нужно будет сделать какой-то процесс оптимизации.

+0

спасибо за ур комментарий Да, мне нужна пряжка под любым углом. Не могли бы вы спроектировать процесс оптимизации – Samra

+0

Несколько человек уже упомянули алгоритм вращающихся суппортов. Это в основном, как это делается.Вы выполняете эквивалент основного ограничивающего прямоугольника min/max, но с системой координат, повернутой под углом каждой из сторон. –

7

Это называется Minimum Bounding Box, это самый простой алгоритм, используемый в пакетах OCR. Вы можете найти реализацию с помощью вращающихся суппортов из пакета OpenCV. После того, как вы получите исходный код, проверить этот файл,

cv/src/cvrotcalipers.cpp 

метод вам нужно, это cvMinAreaRect2().

+0

Я не могу найти этот метод. Можете ли вы дать мне точные данные для этого спасибо – Samra

+0

Это здесь http://www.google.com/codesearch/p?hl=ru&sa=N&cd=1&ct=rc#WMkTvnMDpLM/cv/src/cvrotcalipers.cpp&q=cvMinAreaRect2 –

0

Выполните следующий алгоритм

  1. Поворот многоугольника на плоскость XY
  2. Выберите 1 край и выровнять этот край с осью X (использование арктангенсом). Используйте min/max x, y, чтобы найти ограничивающий прямоугольник. Вычислить область и сохранить в списке
  3. Сделайте то же самое для оставшихся ребер в обрезаемом многоугольнике.
  4. Выберите прямоугольник с минимальной площадью.
  5. Поворот ограничительный прямоугольник назад для Coplanar обратного вращения стадии 1 и стадии 2

для более подробно проверки связи Minimum-Area-Rectangle

Смежные вопросы