Как обнаружить линию на изображении с небольшим шумом?

Хотел бы спросить совета - какой алгоритм использовать для автоопределения линии на изображении?

До: (из http://tinyurl.com/l6d5x9s)

Перед обработкой

Я хочу добиться такого результата (из http://tinyurl.com/pnfaphv):

После обработки

Спасибо заранее за любую помощь!


person user3052757    schedule 11.06.2014    source источник
comment
Это не маленький шум ... это артефакт JPEG, соль и перец, и то, что повсюду выглядит как обычный гауссовский шум. Вы пробовали фильтр размытия + края?   -  person nneonneo    schedule 11.06.2014
comment
я попробовал houghtransform и получил результат (i.stack.imgur.com/wZkwn.jpg ). возможно, вам следует опубликовать больше изображений, которые, как группа, более репрезентативны для проблемы, которую вы хотите решить.   -  person Zaw Lin    schedule 11.06.2014
comment
На самом деле я пытался реализовать houghtransform, но это не так просто, как я ожидал. Пример увеличенного изображения с этой строкой -› i.imgur.com/RYKxm8n.png Он немного изогнут. Хватит ли для этого houghtransform? Я пробовал также некоторые фильтры и т. д., но это не сработало.   -  person user3052757    schedule 12.06.2014
comment
вы можете нарисовать, каков желаемый результат? я попробовал houghtransform, который я использовал в сценарии lpr из (stackoverflow.com/questions/24046089/) и обнаружил линию подбородка. однако я чувствую, что, возможно, это не может работать в целом. можешь попробовать (ipol.im/pub/art/2012/gjmr-lsd )? вот что я получаю (i.stack.imgur.com/W4pam.jpg) . затем вам нужно соединить линии, которые расположены близко друг к другу и имеют одинаковые углы, чтобы получить длинную кривую. может быть, это сработает   -  person Zaw Lin    schedule 13.06.2014
comment
если это не сработает ... возможно, вы можете попробовать подход, основанный на классификации, если интенсивность кривой, которую вы хотите обнаружить, имеет аналогичный диапазон. один из моих коллег использовал нейронную сеть для сегментации зубов, и это сработало хорошо. вы можете использовать патч окружающего изображения и / или краевые функции первого порядка в качестве входных данных   -  person Zaw Lin    schedule 13.06.2014
comment
я нашел соответствующую литературу @ (mobimgproc.googlecode.com/svn-history /r11/trunk/MSthesis.pdf)   -  person Zaw Lin    schedule 13.06.2014
comment
Желаемый результат должен выглядеть следующим образом: i.imgur.com/RRD3rXD.png. Кроме того, первым шагом программы будет отметка двух крайних точек (зеленых точек) этой линии простым щелчком мыши - это очень поможет. По сути, я сделал houghtransform этого изображения i.imgur.com/RYKxm8n.png и получил результат i.imgur.com/LNAfcqc.png. Точка с наибольшей кривой-крестовиной равна (487 237), а линейная функция равна y=-0,65-580,68, и это выглядит так wolframalpha.com/input/?i=y%3D-0.65x-580.68, так что это очень похоже на желаемое изображение. Но что дальше? Как я могу нарисовать эту линию на этом изображении?   -  person user3052757    schedule 13.06.2014
comment
предполагая, что центр изображения рассматривается как начало координат, если у вас уже есть уравнение линии, вам необходимо рассмотреть два случая: 1) линия вертикальна, тогда уравнение линии равно x=rho, и вам нужно соединить две точки (rho+w/2 ,0),(rho+w/2,h) 2) линия не вертикальна, тогда вы должны найти точки пересечения левой и правой границы и линии и соединить их, используя x=0 и x=w для решения y и соедините их.   -  person Zaw Lin    schedule 13.06.2014
comment
для кода Java вы можете обратиться к этому (developpez.net/forums/d495285/autres-langages/algorithmes/). так как сайт требует регистрации, я загрузил их где-то здесь (datafilehost.com/d/be981c93 ). как скомпилированный файл jar, так и исходники, скачанные с сайта   -  person Zaw Lin    schedule 13.06.2014
comment
Не могли бы вы загрузить эту литературу (mobimgproc.googlecode.com/svn-history/ r11/trunk/MSthesis.pdf) на внешнем сервере? Я не могу скачать его. Похоже, преобразование не поможет обнаружить эту строку. Я думал о классификации на основе интенсивности пикселей кривой, но когда мы увеличиваем эту кривую, значения пикселей будут неточными, и я думаю, что алгоритм может пойти в неправильном направлении. Возможно, второй параметр для сравнения, например. расстояние между двумя точками, отмеченными щелчком мыши, связанным со сравнением значений пикселей, поможет достичь обнаружения кривой? Какая зависимость должна быть между ними?   -  person user3052757    schedule 14.06.2014
comment
datafilehost.com/d/6aa8476a Еще одна вещь, которую вы можете попробовать, — это подход, основанный на активных контурах. большинство из них требуют ручной инициализации и работают довольно медленно. но похоже, что это не будет проблемой для вас.   -  person Zaw Lin    schedule 14.06.2014


Ответы (2)


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

Преобразование Хафа фактически не идентифицирует пиксели в строке. Это просто даст вам положение и угол линии. Это также даст вам толщину, если вы поставите порог результата и измерите размер точки. Обычно вы все равно делаете это, используя центроид, чтобы найти фактический центр линии.

person paddy    schedule 11.06.2014

Размытие по Гауссу, затем адаптивное пороговое значение и использование хитрого края. Может сработать

person Pruthvi P    schedule 11.06.2014