2

hand drawn line with irregularitiesКак я могу выпрямить линию, нарисованную вручную в Matlab?

Я работаю над проектом обработки изображений, где мне нужно обнаружить углы. Но когда я пытаюсь обнаружить углы с помощью функции corner, он обнаруживает небольшие смещения как углы, как показано. Wrong detection of corners

Я пробовал с различными порогами от 0 до 0,24 и не мог получить результаты пищи.

imgskele = bwmorph(imgfill,'thin',Inf); 
C = corner(imgspur, 'SensitivityFactor', 0.24); 
figure; imshow(imgspur); 
hold on; 
plot(C(:,1), C(:,2),'bo','MarkerSize',10,'MarkerFaceColor','g'); 
hold off; 

Так я имею в виду настройки (перерисовки) линию, чтобы сделать ее прямой линией, соединяющей те точки

Edit 1:

Вот полные размеры исходного и вывода изображения: enter image description here

+0

Возможно, это алгоритм Peucker? Проверьте алгоритм Википедии Рамер-Дуглас-Пьюкер –

+0

@MarkSetchell: Наверное, это излишнее, но основная идея разумна. – MSalters

+0

Ваш * "начальный образ" * не соответствует вашему * "изображению результатов" *, поэтому трудно понять, что заставляет OpenCV думать, что есть углы. Можете ли вы показать полное начальное изображение, содержащее «углы» *, пожалуйста? –

ответ

3

Проблема, которая у вас есть, заключается в том, что функция corner является детектором угла Гарриса, который находит угол заполнения p olygons.

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

Более надежный метод - использовать что-то вроде преобразования Hough, чтобы найти функции линии на изображении. Эти линии будут иметь пересечения, некоторые из которых примерно соответствуют углам, которые вы хотите. Другие - поддельные пересечения, потому что преобразование Хафа предполагает линии, а не сегменты линии. Вам нужно немного поэкспериментировать с тем, что вы принимаете, и тем, что вы отвергаете. Как округленный может быть угол, прежде чем вы перестанете называть его уголком?

+0

Спасибо за подсказку о детекторе угла Харриса. О преобразовании hough Я уже пробовал использовать преобразование hough для обнаружения линий, но столкнулся с такой же проблемой и из-за рисованной природы линии, не все линии были обнаружены. Я разместил вопрос здесь: http://stackoverflow.com/questions/36485935/how-to-detect-hand-drawn-lines-using-hough-transform-in-matlab Вот почему я попытался использовать угол так что я могу соединить углы, чтобы образовать прямые линии между ними, которые заменяют несовершенные линии –

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

  • Нет связанных вопросов^_^