2013-12-20 4 views
3

Я написал код с MATLAB, который после сглаживания (со срединным фильтром для уменьшения шума), обнаружение края с помощью алгоритма Sobel и, наконец, пороговое значение, использует заранее определенные шаблоны, чтобы опустить нереальные (или нежелательные) ребра. Мой вопрос заключается в том, что когда я подаю пример Pattern = [1 1 1;0 0 0;0 0 0] на изображение с обнаруженным краем (BW), неожиданно у меня остались вертикальные края (фактически никаких существенных изменений не было сделано).Как улучшить обнаружение края с заранее определенными шаблонами в MATLAB?

Мой шаблон кода приложения:

[l,k] = size(edgeDetected_BW); 

P(1:l , 1:k)=1; //improved edge detected image 
Pattern = [1 1 1;0 0 0;0 0 0]; 


for i=1:l-2 
    for j=1:k-2 
     if((edgeDetected_BW([i i+1 i+2] , [j j+1 j+2])| Pattern) == Pattern) 
      P(i+1 , j+1) = 0; 
     end 
    end 
end 

После выполнения этого кода были утолщенной линии и несколько точек были удалены. Где моя ошибка?

.:Back view of a car:. .: Вид сзади на автомобиль :.

Точки в желтых кругах нежелательны.

ответ

0

Если ваша цель - прореживание края, я бы использовал [1 1 1;0 0 0;1 1 1]; в качестве шаблона шаблона. Кроме того, P(i:i+2 , j:j+2) = 0;

+0

Благодарим вас за ур ответ, после применения советов, о которых вы упомянули выше, потеря ценных данных не была пренебрежимой, поэтому я применил несколько шаблонов и, наконец, «ИЛИ» выходы. Результат: было удалено много точек (желательно), но снова линии были утолщены. – aminous

+0

вы можете загрузить изображение edgeDetected_BW и свой код, щелкнув «изменить» своего исходного сообщения? – lennon310

+0

Несомненно, на самом деле моя проблема связана с этой частью кода. Так я применил эти pattenrs (рядом с вашим шаблоном): 'P = [1 0 1; 1 0 1; 1 0 1]' 'P = [0 0 0; 1 1 1; 1 1 1] '' P = [1 1 1; 1 1 1; 0 0 0] ' – aminous

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