Как определить сегменты линии вместо строк на изображении после выполнения преобразования Hough? Имеет ли смысл сохранять минимальные и максимальные координаты для каждого накопительного бункера или есть лучший способ?
Я не использую OpenCV, btw.
Как определить сегменты линии вместо строк на изображении после выполнения преобразования Hough? Имеет ли смысл сохранять минимальные и максимальные координаты для каждого накопительного бункера или есть лучший способ?
Я не использую OpenCV, btw.
Даже если вы не используете OpencV, вы можете посмотреть код HoughLinesP function, который возвращает сегменты линии.
И да, сохранение экстремальных координат аккумуляторов имеет смысл.
[изменить] 2011-07-19] Если у вас несколько сегментов линии, которые лежат на той же строке, что и в примере belisarius" выше, вам нужно будет сделать еще одну работу, просто помните, что крайние координаты не будут быть достаточным. Так что это зависит от вашего точного приложения.
Я думаю, что этот образ, показывающий преобразование Hough для линий и сегментов, поможет вам поймать, что происходит:
В принципе, вам нужно будет следить за тем, какие именно очки давали голосование каждому бункеру Hough. Вы можете сделать это либо после заполнения бункеров (как в версии Matlab), так и при заполнении бункеров (более эффективное, но также более интенсивное, что может быть неэффективным для встроенной платформы). Оттуда вы можете следить за пикселями вдоль линии, чтобы извлекать фактические сегменты, создавая новый сегмент, когда промежуток между соседними пикселями слишком велик.
См. это частичное описание алгоритма Matlab для получения дополнительной информации о том, как извлекать пиксели в конкретный бункер Хью, включая фактическую реализацию (связанный с hough_bin_pixels.m).
Matlab имеет функцию houghlines, которая делает именно то, что вы хотите. Он извлекает сегменты линии на основе преобразования hough.
http://www.mathworks.com/help/toolbox/images/ref/houghlines.html
Сохранение экстремальных координат для бункеров hough не будет работать, если два отдельных сегмента линии лежат в одной строке.
Я хочу сделать прямо противоположное, я хочу извлечь всю линию, а не отрезки. Как вы можете видеть ниже, houghlines создает несколько отрезков, как можно извлечь длинные строки?
Красный - это линии, зеленый - это отправные точки, а желтый - это конечные точки.