Как определить ограничивающие прямоугольники нескольких элементов? - PullRequest
4 голосов
/ 14 января 2012

Я хотел бы реализовать алгоритм, который найдет ограничивающие прямоугольники контуров (уже определенные другим алгоритмом).Единственное, что у меня есть, это бинаризованное изображение (как показано ниже).Основная идея заключается в следующем:

  • взять что-то вроде этого - предварительно обработанное бинаризованное изображение enter image description here

  • и произвести что-то подобное enter image description here

Ответы [ 5 ]

3 голосов
/ 14 января 2012

Проверьте маркировку подключенного компонента: http://en.wikipedia.org/wiki/Connected-component_labeling. В этом случае вы можете найти подключенные компоненты из белых или черных пикселей (белый в вычислительном отношении проще, поскольку у вас меньше белых точек на изображении).

1 голос
/ 14 января 2012

Могу ли я предложить наивный подход для начала:

На изображении выполните двумерный двоичный поиск средней точки изображения (x, y). С этого момента выполните заливку.

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

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

0 голосов
/ 14 января 2012

Вы можете рассчитать минимальное остовное дерево и удалить самые длинные ребра. Затем вы можете рассчитать K-средних. Удалите еще один длинный край и вычислите k-средних. Промойте и повторяйте, пока не получите N = 10. Я полагаю, что этот алгоритм назван однолинейным k-средних и кластер похож на вороной диаграммы:

«Алгоритм k-кластеризации в одной линии ... это точно алгоритм Крускала ... эквивалентный поиску MST и удалению k-1 самых дорогих ребер.»

Смотрите, например, здесь: https://stats.stackexchange.com/questions/1475/visualization-software-for-clustering

Затем для каждого кластера вы применяете это правило:

They highest y - 1 is the top of the rectangle. 
The leftmost x - 1 is the left of the rectangle. 
The lowest y + 1 is the bottom of the rectangle. 
The rightmost x + 1 is the right of the rectangle.

Обратите внимание, что под самым высоким я имею в виду самое близкое к верху экрана значение, а не самое большое.

0 голосов
/ 14 января 2012

Похоже, что в OpenCV уже есть несколько алгоритмов для нахождения ограничивающего прямоугольника контура. Так что изучение того, как работает их функция, может быть хорошим началом. http://opencv.itseez.com/doc/tutorials/imgproc/shapedescriptors/bounding_rects_circles/bounding_rects_circles.html

0 голосов
/ 14 января 2012

Для каждого элемента:

They highest y - 1 is the top of the rectangle. 
The leftmost x - 1 is the left of the rectangle. 
The lowest y + 1 is the bottom of the rectangle. 
The rightmost x + 1 is the right of the rectangle.

Обратите внимание, что под самым высоким я имею в виду самое близкое к верху экрана значение, а не самое большое.

...