霍夫椭圆检测

时间:2019-06-11 15:23:50

标签: python ellipse hough-transform

在对图像应用Canny运算符后,我具有某些类型的边缘,并且想检测出可能的椭圆形候选对象,因此我尝试了首次圆形Hough变换(CHT),并产生了很好的结果。现在,我正在尝试椭圆霍夫变换(EHT),它的表现确实很奇怪!

首先,即使在调整输入图像的大小之后,执行仍然要花费大量的时间(CHT运行时以毫秒为单位的分钟数!),因此要克服该问题,需要调整输入图像的大小至少要达到其原始尺寸的30%(我想知道这是正常的吗?)。

第二,它实际上并没有检测到任何椭圆,它只是给出了一些散布在各处的椭圆,有时它们中的大部分长/短轴等于零(这太疯狂了!)!

所以有人可以指出EHT是否通常比CHT可靠,快速。

为什么会给出如下所示的奇怪结果!


这是边缘检测后的图像...红色箭头指示我要用圆圈/椭圆封装的内容(CHT成功返回了一个圆圈)

Canny edge detection

这是调整大小为30%后EHT的结果

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!")

0 个答案:

没有答案