У меня есть определенные типы ребер после применения оператора Canny к изображению, и я хотел бы определить возможных кандидатов на форму эллипса, я попробовал преобразование Хафа первого круга (CHT), и оно дало действительно хорошие результаты. Сейчас я пробую эллиптическое преобразование Хафа (EHT), и оно ведет себя очень странно!
Прежде всего, требуется действительно огромное количество времени для выполнения даже после изменения размера входного изображения (с точностью до минут, когда CHT работает в течение миллисекунды!), Поэтому для преодоления проблемы необходимо изменить размер входного изображения при по крайней мере, до 30% от его первоначального размера (мне интересно, это нормально?).
Во-вторых, он на самом деле не обнаруживает никаких эллипсов, он просто дает несколько случайных эллипсов, разбросанных тут и там, и иногда большинство из них с большой / малой осью равны нулю (что просто безумие)!
Так может кто-то указать, является ли EHT обычно надежным и быстрым по сравнению с CHT.
и почему это дает такие странные результаты, как показано ниже!
Вот изображение после обнаружения края ... и красная стрелка указывает на то, что я пытаюсь инкапсулировать с помощью круга / эллипса (CHT успешно возвращает круг вокруг него).
![Canny edge detection](https://i.stack.imgur.com/t4bCm.png)
Вот результат EHT после изменения размера до 30%
![enter image description here](https://i.stack.imgur.com/cU9lw.png)
Вот фрагмент кода, который я запускаю
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!")