Я пытаюсь понять, как это работает. Я считаю, что я понимаю концепцию:Понимание преобразования Hough для строк
Для всех краевых пикселей найдите все строки, проходящие через него, и для каждой из этих строк значения массива аккумулятора (соответствующие наклону и y-перехвату) на 1. Линии которые пересекают многие граничные точки, будут иметь много голосов в массиве аккумуляторов.
То, что я не понимаю, находится в коде, который я нашел для его реализации. Во-первых, я полагаю, что мы можем предположить, что после применения краевого детектора краевые пиксели имеют ненулевое значение, а не ребра - 0. В коде из моего учебника программа ищет все точки с ZERO VALUE и, для всех проходящих линий увеличивает соответствующие значения аккумулятора на 1. Я думал, что он будет искать линии, проходящие через граничные точки (NON-ZERO), а не пустое пространство? Может ли кто-нибудь объяснить мне эту часть?
Ниже приведен код Matlab, который я нашел в учебнике по обработке изображений. Я не тестировал его, поскольку я работаю с C++. % Сообщений - это мое понимание того, что делает конкретная линия:
function HTline(inputimage)
[rows,columns] = size(inputimage);
acc1 = zeros(rows,91);
acc2 = zeros(columns,91);
for x = 1:columns
for y = 1:rows
if(inputimage(x,y)==0 %If pixel=0, i.e., non-edge
for m = -45:45 %For a certain range of slope values
b = round(y-tan((m*pi)/180)*x); %Calculate y-intercept for slope values
if (b<rows & b>0) %If y-intercept is within the image height
acc1(b,m+45+1)=acc1(b,m+45+1)+1; %Increase accumulator values. What?
end
end
for m=45:135 %etc
b=round(x-y/tan((m*pi)/180));
if(b<columns & b>0)
acc2(b,m-45+1)=acc2(b,m-45+1)+1;
end
end
end
end
end
К сожалению, хотя книга объясняет концепцию понятным образом, она затем помещает код в фигуру без непосредственной ссылки, за исключением того, что строки обнаруживаются путем принятия максимумов аккумулятора, поэтому это не инверсия черных и белый. Поскольку я студент, я склонен полагать, что я ошибаюсь, но я думаю, что пришло время сделать что-то на C и посмотреть, что произойдет. Спасибо за ваш подробный ответ, я сохраню то, что вы сказали в уме. – William
@William Если вы не уверены, что вам следует попробовать это в Matlab, так как это будет легче протестировать и пробовать. Но если C - ваша вещь, тогда идите вперед. Кроме того, как я уже сказал, помните, что код, который у вас есть, несколько устарел. На самом деле у меня есть код из класса машинного зрения, где я реализовал преобразование hough, основанное на параметризации rho/theta и методе gradient/sobel. Я могу добавить его к моему ответу, если вы заинтересованы. Наконец, если мой ответ ответил на ваш вопрос, это хорошая практика, чтобы принять его. – Justin
Я, вероятно, буду придерживаться C и учиться понемногу в своем собственном темпе, но в любом случае спасибо.Кстати, я понимаю ошибку в моем комментарии выше, может быть, она была фактически инвертирована черно-белой. Извините, забыл принять! – William