обнаружение объекта (параллельных линий), в котором деталь перекрыта

Я столкнулся с некоторыми проблемами при обнаружении объектов с помощью opencv / python.

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

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

Здесь я столкнулся с двумя проблемами и ищу возможные решения.

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

  2. Следующая проблема (при условии, что Q1 решена) заключается в том, что красные линии перекрываются в середине желтой частью. Как я могу сделать так, чтобы две красные части рассматривались как один и тот же объект? Ищу самый конец красных линий внизу.

image


person SSS    schedule 02.08.2018    source источник


Ответы (1)


Как я мог обнаружить все параллельные линии?

Я могу придумать один подход - использовать HoughLines , чтобы обнаружить линии на изображении. По этой ссылке:

lines = cv2.HoughLines(edges,1,np.pi/180,200)

Это вернет все обнаруженные линии, параметризованные двумя переменными: rho (расстояние от начала координат) и theta (угол от начала координат).

После этого параллельными линиями будут те, которые имеют одинаковый угол (тета), но разные значения rho.

person DarkCygnus    schedule 02.08.2018
comment
Спасибо!! Это только для определения прямых линий? - person SSS; 03.08.2018
comment
@SSS рад, что смог помочь. Да, это для обнаружения прямых линий (или в основном прямых). Однако я полагаю, что вы можете обнаружить непрямые линии, обнаруживая и объединяя последовательные отрезки прямых линий. Существует также вариант, называемый вероятностным преобразованием HoughTransform (он также реализован в opencv). Это, как правило, лучше работает для линейных сегментов. Также (несвязанный) существует вариант преобразования Хафа для обнаружения кругов, если вам это когда-нибудь понадобится. - person DarkCygnus; 03.08.2018