gpt4 book ai didi

python - houghcircles - 寻找参数

转载 作者:太空宇宙 更新时间:2023-11-03 21:52:30 27 4
gpt4 key购买 nike

有没有一种方法可以使圆检测无参数? - 为什么 cv2.HoughCircles() 中的参数在更改后有时不会受到影响?我有一个 for 循环来改变参数,但它不会一直影响结果。

Hough Circles 似乎需要用户进行大量参数优化,如果用户想以非常通用的方式使用该系统,这是一个糟糕的问题。因此,我正在尝试创建一种算法来自动为 opencv 的 houghcirlces 函数找到最佳参数。目前,houghcirlces 函数接受圆的最大和最小半径,它将在图像中找到圆,并设置一些阈值来确定找到的圆的匹配程度。

我希望为最小和最大半径划分不同的范围以在其中进行搜索,然后将找到的每个部分的圆圈用于我应该用于最终 houghcircles 变换的参数。 (如果有人对此有更好的方法,我很乐意听到。)

但是我遇到了这个问题:

似乎没有遵守最小和最大半径参数,或者 Canny 和 Hough 空间阈值


例如,我们可以拍摄这张图片:

circles
(来源:stanford.edu)

然后运行下面的代码:

import numpy as np
import cv2

file_path = '1.png'
img = cv2.imread(file_path)
gray = cv2.imread(file_path, cv2.IMREAD_GRAYSCALE)
# Begin using the largest dimesion of the image as the largest possible radius
largest_dimension = np.max([gray.shape[0], gray.shape[1]])
for i in range(1,100):
# For the first iteration we use the largest possible radius
if i == 1:
maxRadius = largest_dimension
# THe next iterations we use what the minimum radius was last iteration
else:
maxRadius = minRadius
# Reduce the size by 2 everytime
minRadius = maxRadius/2
dp = 1 # Inverse ratio of thresholded image resolution ?? Not sure what to do with this
minDist = minRadius # Not likely to be much closer than the minimum radius...?
param1 = 200 # Canny edge threshold - image OTSU threshold dependence ??
param2 = 100 # Hough space threshold - radius dependance? np.pi*maxRadius**2 ??
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, dp, minDist, param1, param2, minRadius, maxRadius)

# Display some inforation about the results
if circles is not None:
img_copy = img.copy()
radii = np.array([c[2] for c in circles[0]])
num = len(circles[0])
avg = np.mean(radii)
print str(num) + ' found: avg radius: ' + str(avg)
if any(radii < minRadius) or any(radii > maxRadius):
print 'The minimum and maximum radii given are not being respected'
for c in circles[0]:
cv2.circle(img_copy, (c[0],c[1]), c[2], (255,0,255),2)

cv2.namedWindow('', cv2.WINDOW_NORMAL)
cv2.imshow('',img_copy)
cv2.waitKey(0)

我们将得到如下所示的输出,并且函数不会每次都考虑半径。此外,如果我们将 param1 和 param2(Canny 边缘检测和 Hough 空间阈值)从 3 更改为 6000,几乎没有任何变化。

很明显,下面显示的图像检测到的圆圈比任何人通常检测到的要多得多,而且只会变得更糟。

cicrlces

我可能会提到,我想在未来使用此脚本的图像将显示为如下所示:

最佳答案

我遇到了同样的问题,参数表现异常 - 你有

circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, dp, minDist, param1, param2, minRadius, maxRadius)

但是函数签名其实是

>>> import cv2
>>> print cv2.HoughCircles.__doc__
HoughCircles(image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]]) -> circles

注意参数列表中的圆圈 -

我从某个地方复制了一些代码,这些代码明确命名了剩余的参数,比如

circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=0,maxRadius=0)

在某些时候我删除了名字。错误!

关于python - houghcircles - 寻找参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36245239/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com