Каскадное преобразование Хафа в OpenCV - PullRequest
0 голосов
/ 02 ноября 2010

Возможно ли выполнить каскадное преобразование Хафа в OpenCV?Я понимаю, что это просто HT, а затем еще один.Проблема, с которой я сталкиваюсь, заключается в том, что возвращаемые значения всегда являются rho и theta и никогда не имеют формы y-перехвата.

Можно ли преобразовать эти значения обратно в y-перехват и разбить их на подпространства, чтобыЯ могу обнаружить точки схода?

Или просто лучше самостоятельно программировать реализацию HT, скажем, на Python?

Ответы [ 2 ]

1 голос
/ 16 декабря 2010

вместо этого вы можете попытаться заполнить область Хафа параметрами 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 для него.

1 голос
/ 03 ноября 2010

Я не думаю, что OpenCV может выполнять каскадные грубые преобразования.Вы должны конвертировать их в xy пробел самостоятельно.Эта статья может вам помочь:

http://aishack.in/tutorials/converting-lines-from-normal-to-slopeintercept-form/

...