У меня есть изображение, которое состоит из нескольких «углов», которые образуют форму сетки:
После некоторого поиска Hough показался мне подходящим, потому что его не беспокоили разрывы в строках. Однако проблема, с которой я столкнулся, заключается в том, что мои линии «жирные», и любое обнаружение краев, которое я запускаю (в данном случае Canny), выделяет края линии, а не середину:
Это означает, что преобразование Хафа заканчивается выделением одной (или обеих) «сторон» линий сетки, а не середины.
Учитывая, что я знаю, что я ищу (эта сетчатая форма, всегда примерно одинаковой ориентации), есть ли лучший способ выполнить часть «Обнаружение края», чтобы дать мне центральные линии, или я должен искать на совершенно другой метод?
Ответы:
Преобразование Хафа действительно помогло бы в этом. Чтобы «утончить» линии, вы можете рассмотреть операцию скелетонизации
Это создаст изображение, подобное этому:
Из-за способа, которым работает скелетонизация, он все равно будет создавать некоторые линии, которые будут казаться не относящимися к сетке, но эти линии в направлении «ошибочных» направлений не так уж много (по крайней мере на данном изображении), чтобы запутать обнаружение линий преобразования Хафа слишком много, и он четко выберет два основных набора линий в разных направлениях. (Вот как выглядит вывод HT:)
Если вы используете MATLAB, вы можете проверить эту страницу справки
источник
Альтернативой преобразованию Хафа будет преобразование Радона ( 1 , 2 ). Грубое описание алгоритма для обнаружения решетчатой структуры может выглядеть следующим образом:
РЕДАКТИРОВАТЬ :
Вот небольшой фрагмент кода Matlab для иллюстрации шага 1-3:
Чтобы ответить на ваш вопрос из комментариев: Мне показалось, что из одного примера, который вы предоставили, этот метод более устойчив к мелким дефектам в обнаруженной сетке. Скелеты редко дают прямые линии, что может быть недостатком для последующего преобразования Хафа.
источник