2015-11-05 7 views
1

Я работал над вариантом образца opensv squares, чтобы обнаружить прямоугольники. Он отлично работает для закрытых прямоугольников, но мне было интересно, какие подходы я могу предпринять, чтобы обнаружить прямоугольники с отверстиями, т. Е. Отсутствующие углы, слишком короткие линии.Обнаружение неполных прямоугольников (отсутствующих углов/коротких контуров) в OpenCV

Выполняю некоторую дилатацию, которая закрывает небольшие промежутки, но не эти большие.

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

Я думаю, что первый шаг - определить, какие линии являются кандидатами для формирования полного прямоугольника, а затем выполнить некоторую экстраполяцию строк. Это seems promising, но мои прямоугольники не будут располагаться идеально горизонтально или вертикально.

Я пытаюсь обнаружить три левых прямоугольников в этом образе:

image

+0

Это 2 проблемы: 1. обнаружить сегменты линий, которые не являются идеальными линиями. 2. Групповые сегменты, возможно, заканчиваются прямоугольником. – Micka

+0

У вас есть предложения по борьбе с обнаружением несовершенных сегментов линии? Я пробовал HoughLines/HoughLinesP, которые, похоже, не работают, я думаю, что они нацелены на более совершенные линии. Мое текущее мышление состоит в том, чтобы проанализировать контуры для # точек и некоторого вида области для коэффициента длины дуги, чтобы догадаться, в какой «части» прямоугольника – muscovy

+0

для контуров вы можете попробовать PCA. но это не удастся для подключенных угловых частей прямоугольника ... Мне нравятся методы RANSAC, но вам придется реализовать их самостоятельно. – Micka

ответ

0

Возможно, эта статья представляет интерес? Rectangle Detection based on a Windowed Hough Transform

В основном, возьмите преобразование линии hough. Вы получите максимальные значения в местах в (theta, rho), которые относятся к местам, где есть линии. Чем больше значение, тем длиннее/прямая линия. Возможно, сделать порог, чтобы получить лучшие линии. Затем мы пытаемся искать пар линий, которые

1) параллельно: максимумы возникают при сходном тета

2) одинаковой длины: значения максимумов похожи

3) ортогонально другой паре линий: значения теты находятся на 90 градусов от значений тета других пар.

В документе есть несколько деталей, например, преобразование в скользящем окне, а затем с использованием показателя ошибки для консолидации несколько совпадений.