Hough Ellipse Detection - PullRequest
       18

Hough Ellipse Detection

0 голосов
/ 11 июня 2019

У меня есть определенные типы ребер после применения оператора Canny к изображению, и я хотел бы определить возможных кандидатов на форму эллипса, я попробовал преобразование Хафа первого круга (CHT), и оно дало действительно хорошие результаты. Сейчас я пробую эллиптическое преобразование Хафа (EHT), и оно ведет себя очень странно!

Прежде всего, требуется действительно огромное количество времени для выполнения даже после изменения размера входного изображения (с точностью до минут, когда CHT работает в течение миллисекунды!), Поэтому для преодоления проблемы необходимо изменить размер входного изображения при по крайней мере, до 30% от его первоначального размера (мне интересно, это нормально?).

Во-вторых, он на самом деле не обнаруживает никаких эллипсов, он просто дает несколько случайных эллипсов, разбросанных тут и там, и иногда большинство из них с большой / малой осью равны нулю (что просто безумие)!

Так может кто-то указать, является ли EHT обычно надежным и быстрым по сравнению с CHT.

и почему это дает такие странные результаты, как показано ниже!


Вот изображение после обнаружения края ... и красная стрелка указывает на то, что я пытаюсь инкапсулировать с помощью круга / эллипса (CHT успешно возвращает круг вокруг него).

Canny edge detection

Вот результат EHT после изменения размера до 30%

enter image description here


Вот фрагмент кода, который я запускаю

def find_ellipse(edgesImg,img):


    print("starting Hough ellipse detection....")
    ximg = rescale(edgesImg, 0.3)
    result = hough_ellipse(ximg,accuracy=45, threshold=10,
                       min_size=70, max_size=180)
    result.sort(order='accumulator')
    print("sorted result:", result)
    print("list size:", result.size)
    if result.size:
        #return result
        best = list(result[-1])
        yc, xc, a, b = [int(round(x)) for x in best[1:5]]
        orientation = best[5]
        print("orientation", orientation)
        coor = ((int(xc),int(yc)),(int(a),int(b)),orientation)
        print("coordinates:",coor)
        cv2.ellipse(ximg,coor,(255,0,0),2,cv2.LINE_AA)
        cv2.imshow("Hough",ximg)
        cv2.imshow("edges",edgesImg)
        cv2.waitKey()
        return coor
    else:
        print("Sorry nothing found!")
...