在对图像应用Canny运算符后,我具有某些类型的边缘,并且想检测出可能的椭圆形候选对象,因此我尝试了首次圆形Hough变换(CHT),并产生了很好的结果。现在,我正在尝试椭圆霍夫变换(EHT),它的表现确实很奇怪!
首先,即使在调整输入图像的大小之后,执行仍然要花费大量的时间(CHT运行时以毫秒为单位的分钟数!),因此要克服该问题,需要调整输入图像的大小至少要达到其原始尺寸的30%(我想知道这是正常的吗?)。
第二,它实际上并没有检测到任何椭圆,它只是给出了一些散布在各处的椭圆,有时它们中的大部分长/短轴等于零(这太疯狂了!)!
所以有人可以指出EHT是否通常比CHT可靠,快速。
为什么会给出如下所示的奇怪结果!
这是边缘检测后的图像...红色箭头指示我要用圆圈/椭圆封装的内容(CHT成功返回了一个圆圈)
这是调整大小为30%后EHT的结果
这是我正在运行的代码的一个片段
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!")