2015-02-20 2 views
0

Я пытаюсь выполнить OpenCV на блок-схеме, чтобы извлечь структуру (изображение 1). Все изображения генерируются компьютером. Я могу извлечь блоки в порядке и удалить их из изображения, чтобы мы просто остались со стрелками (изображение 3).OpenCV - Извлечение стрелок из диаграммы

Проблема заключается в том, что я не уверен, как извлекать соединения. То есть когда я применяю HoughLinesP, для каждой стрелки создается большое количество строк (изображение 2). Кто-нибудь знает метод извлечения строк, так что я получаю только одну строку для каждой выделенной стрелки?

Original image HoughLinesP applied to arrows Arrows segmented from image

ответ

2

Поскольку изображение не имеет никакого шума, используя преобразование Хью не является оптимальным.

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

Фильтр для линии 2 пикселя толщина может быть что-то вроде:

0 0 0 0 0 0 
0 0 0 0 0 0 
1 1 1 1 1 1 
1 1 1 1 1 1 
0 0 0 0 0 0 
0 0 0 0 0 0 
+0

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

+0

Вы всегда можете запускать несколько фильтров различной толщины и собирать гистограмму количества совпадений. – Photon

+0

Спасибо, что отлично поработал. Я отфильтровал горизонтальные и вертикальные линии, затем нашел контуры линий. Используя ограничительную рамку строк, я мог бы искать ближайшие строки для их соединения. Дает хорошие результаты, намного лучше, чем HoughLinesP для моего приложения. – Jimwalks

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