2013-10-15 4 views
1

Я пытаюсь сделать сегментацию на основе шипов книги. У меня были проблемы довольно долгое время. Два изображения ниже являются примером неудачной сегментации с использованием Hough Lines. Я пытаюсь провести линию между всеми книгами.Повышенная точность линии Hough/Сегментация книжных шипов через OpenCV и C++

Я также попробовал HoughLineP, что на самом деле делает худшие результаты. Я попытался настроить все параметры как HoughLine, так и HoughLineP. Но я не могу улучшить скорость обнаружения. или даже ухудшить неправильное обнаружение.

enter image description here enter image description here

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

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

Последняя программа, которую я ищу, - это подсчет количества книг, которые есть. но для этого, прежде всего, мне нужна чистая и успешная сегментация.

Есть ли у кого-нибудь другие методы, которые я могу попробовать? Я был бы очень благодарен всем отзывам, комментариям и ответам. Я застрял в этом уже больше месяца. Благодарю.

ответ

1

Если вы можете предположить, что ваши шипы всегда будут выровнены по вертикали внутри изображения, было бы целесообразно использовать фильтр обнаружения края, который обнаруживает только вертикальные линии. Это уменьшит некоторые шумы от деталей на самих шипах (титры и т. Д.) И придаст Hough-преобразованию больший шанс на успех.

Свертка фильтр, такой как это может быть использовано:

-1 0 1 
-1 0 1 
-1 0 1 
+0

Спасибо. Я попробую его сегодня и дам вам знать результат. Тем не менее, я хотел бы попросить, чтобы такой же цвет книги был сложен вместе, как книга seth godwin, а также передовая книжка с рекламой, изящные края не разделяли эти две книги, как показано в вопросе. Любая идея, как я могу сделать Canny более эффективной, чтобы разделить их? – rockinfresh

+1

Мое замечание состоит в том, чтобы избежать обнаружения [Canny] (https://en.wikipedia.org/wiki/Canny_edge_detector), поскольку он найдет края под всеми углами. Вас интересуют только вертикальные края, поэтому другой фильтр может их изолировать. Вы можете использовать [Gimp] (http://www.gimp.org/), чтобы экспериментировать с различными типами обнаружения края самостоятельно.Загруженное изображение - это загнутый GIF, который не подходит для обнаружения края, поскольку он имеет много шума. Является ли ваше входное изображение GIF? –

+0

Нет. Мое входное изображение - все PNG или файлы JPEG, изображение, загруженное в вопрос, является GIF. Спасибо, что предложили Gimp. Я проверю это сейчас. Я буду экспериментировать с различными фильтрами и надеюсь скоро вернуться к вам, если он будет работать, в последнее время занят в школе. Спасибо за совет! – rockinfresh

1

Я бы скорее комментарий, чем ответ, но ...

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

В последнее время я делаю краевое обнаружение нелинейным способом, находя градиент во всех восьми направлениях и беря максимум этих значений в качестве выхода для каждого пикселя. Затем повторяется для каждого цвета, когда его цветное изображение. Это легко в Matlab, но я не знаком с Visual Studio.

Удачи!

+0

Я также изучаю обработку изображений в MatLab. Тем не менее, Greenhorn в отношении MatLab. У вас есть пример/учебник/код, на который я могу ссылаться? Буду весьма признателен за это. Благодарю. – rockinfresh

+0

У меня нет кода или Matlab в настоящее время, но я просто использую матричную манипуляцию, тогда алгоритмы Matlab возьмут верх. Хотя для многопроцессорных компьютеров есть время обработки, которое должно быть включено в Matlab. Это находится в файле справки Matlab для пакета обработки изображений ... возможно, страница справки функции преобразования hough укажет на него. – Jason

+0

В python используется только четыре точки вместо восьми, Edges = max (numpy.abs (A [0: -1,0: -1 ,:] - A [0: -1,1:,:]), numpy. abs (A [0: -1,0: -1 ,:] - A [1:, 0: -1,:]), numpy.abs (A [0: -1,0: -1 ,:] - A [1:, 1:,:]), numpy.abs (A [1:, 0: -1 ,:] - A [0: -1,1:,:])), тогда maxEdges = max (A [ :,:, 0], A [:,:, 1], A [:,:, 2]), где A - это изображение в качестве матрицы в качестве матрицы в этом случае. – Jason