我正在尝试从图像数据库中检测CD的图像。我想我可以在每个图像上使用圆形霍夫变换,并选择包含具有相似中心的同心圆的图像。
我已经尝试在EMGU中使用HoughCircles方法,如果圆圈不在外圆的中心,则可以正常工作,但如果它们不在,则工作正常。这是Hough变换本身的限制,还是只是实现的minDist限制的问题?
在以下2张图片上使用以下参数(我已经进行了大量的调整):
Gray cannyThresh = new Gray(180);
Gray accumulatorThresh = new Gray(300);
int dp = 3;
double minDist = 0.0000001 //Ideally higher, but ok for illustrating this point
CircleF[] circles = gray.HoughCircles(cannyThresh, accumulatorThresh, dp, minDist, 0, 0)[0]
偏移内圈(工作正常):
中央内圈(未能正确检测外圈,大概是因为中心与内圈的接近程度?)
我能做些什么来检测圈子是否共享一个类似的中心?
答案 0 :(得分:1)
你应该先做边缘检测。然后你将得到两个细圆圈,而不是一个大黑管。这些圈子很容易找到。
答案 1 :(得分:1)
好的,这可能是一个粗略的,准备好的方法来使这项工作(然后找出'为什么'以后)。
假设圈子没有碰到:
对于检测到的每个此类组件,检查其中心是否接近检测到的霍夫圆之一。基本检查组件是否具有相应的检测到的霍夫圆。它不需要完全匹配。
因此我们基本上可以避免使用Hough变换进行参数化。显然,连通组件将对应于CD的确切位置。
答案 2 :(得分:1)
对于其他通过谷歌来到这里寻找使用OpenCV检测同心圆的方法:似乎OpenCV Hough Circle检测无法做到这一点。 至少根据书中的一段“Learning OpenCV: Computer Vision with the OpenCV Library”
最后,因为中心被认为是其相关累加器值的升序,并且因为如果它们太靠近先前接受的中心,则不保留新的中心,当多个圆同心或近似时,存在偏向于保持较大的圆。同心的。
出于性能原因,似乎已选择此实现细节。
答案 3 :(得分:0)
An algorithm for the detection of multiple concentric circles 提出了一种方法。
我的免费解释如下: