вместо этого вы можете попытаться заполнить область Хафа параметрами m и c, чтобы y = mx + c можно было переписать как c = y - mx, поэтому вместо обычного rho = x cos (theta) + y грех (тета), у вас есть c = y - mx
обычно вы проходите тэты и вычисляете rho, а затем увеличиваете значение аккумулятора для этой пары rho и тета. Здесь вы должны пройти через значение m и вычислить значения c, а затем накопить этот элемент m, c в аккумуляторе. Ящик с наибольшим количеством голосов будет правильным m, c
// going through the image looking for edge pixels
for (i = 0;i<numrows;i++)
{
for (j = 0;j<numcols;j++)
{
if (img[i*numcols + j] > 1)
{
for (n = first_m;n<last_m;n++)
{
index = i - n * j;
accum[n][index]++;
}
}
}
}
Я полагаю, что когда это становится неэффективным, трудно определить размер шага для прохождения m, поскольку они технически должны переходить от -infinity к бесконечности, поэтому у вас могут возникнуть проблемы. да, так много для преобразования Хафа в терминах m, c. Лол
Полагаю, вы могли бы пойти другим путем и изолировать m так, чтобы это было m = (yc) / x, чтобы теперь вы циклически проходили через кучу значений y, которые имеют смысл, и их гораздо легче управлять, хотя все еще трудно определить вашу матрицу аккумулятора, потому что м по-прежнему не имеет ограничений. Я думаю, вы могли бы ограничить значения m, которые вы хотели бы найти.
Да, гораздо больше смысла идти с rho и theta и конвертировать их в y = mx + c, а затем даже создавать совершенно новый образ и заново запускать преобразование hough для него.