【发布时间】:2016-06-23 00:15:53
【问题描述】:
我目前正在尝试检测两者;青光眼图像的杯子和圆盘。他们使这两个从图像的其余部分中脱颖而出的方式是它们比图像的其余部分更亮。但是杯子比圆盘亮,所以我只能检测到杯子。我要实现的是,把两者都包围起来;杯子和圆盘有两个不同的圆圈。杯子是图像中最亮的,圆盘是第二亮的。我该怎么做?
这是我的代码(只检测杯子并环绕它。我试图检测两者;杯子和圆盘,并用不同的圆圈环绕它们。)
image = cv2.imread(args["image"])
orig = image.copy()
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (args["radius"], args["radius"]), 0)
(minVal, maxVal, minLoc, maxLoc) = cv2.minMaxLoc(gray)
image = orig.copy()
cv2.circle(image, maxLoc, args["radius"], (255, 0, 0), 2)
cv2.namedWindow("Test", cv2.WINDOW_NORMAL)
cv2.imshow("Test", image)
cv2.waitKey(0)
我也在尝试在不手动输入半径的情况下这样做。如果您对此有任何想法,请分享。
【问题讨论】:
-
1.尝试根据像素的强度对像素进行分组,例如使用 k-means,您可能会以这种方式找到磁盘。 2. 青光眼的圆盘和其余部分看起来有明显的圆形边缘。您可以先计算边缘图像并在该图像中找到圆圈。
-
@DXM 如何获取边缘图像?我试过了,但我得到了青光眼本身的边缘。
-
外面全黑了吗?为青光眼计算一个遮罩,您可以尝试在边缘检测之前或之后应用到遮罩。如果你已经尝试过 Canny 边缘检测,你也可以尝试只计算图像的梯度,使用 sobel 或其他算子。
标签: python c++ image opencv image-processing