2012-01-14 2 views
4

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

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

  • и производить что-то вроде этого enter image description here

+0

Ознакомьтесь с нашим сайтом-сестрой, [DSP.SE]. –

ответ

3

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

1

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

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

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

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

+0

Двумерная двумерная, вы имеете в виду kd-дерево? – Bytemain

+0

Я имею в виду разделение пространства на 4 куранта, как в квадранте. –

+0

Я думаю, что kd-дерево тоже будет работать. Но квадтри приятно иметь. – Bytemain

0

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

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

Вы меня немного поняли: есть картина (матрица 0s и 1s), и я хочу найти эти прямоугольники - их координаты. – Patryk

0

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

+0

Хорошо, это хорошая идея, но я хочу начать с нуля. Я не могу использовать реализацию OpenCV. – Patryk

+0

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

+0

У меня есть только бинаризованное изображение - вот и все. Мне нужно как-то разобрать ограничивающие прямоугольники. – Patryk

-1

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

«Одноканальный алгоритм 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. 

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