如果存在噪声,如何断开圆圈,如果边缘断裂则检测圆圈?

时间:2017-05-06 10:45:37

标签: python-2.7 opencv image-processing

我试图检测所有的光学圆圈但是我遇到了圆形边缘完全断裂的困难。在某处,由于噪音,圆圈在二值化之后相互接触。有没有办法解决它?

pattern = [{0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9},
        {0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9},
        {0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9},
        {0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9},
        {0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9},
        {0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9},
        {0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9},
        {0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9},
        {0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9},
        {0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9}
    ]   
stringLen = len(pattern)
blobCnts = sum([len(d) for d in pattern])

raw_image = cv2.imread(imagePath)
gray = cv2.cvtColor(raw_image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255,
            cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]

bloblist = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]
blobcnts = contours.sort_contours(bloblist)[0]
contour_list = []
sorted_contour = []
for blob in blobcnts:
        approx = cv2.approxPolyDP(blob,0.01*cv2.arcLength(blob,True),True)
        area = cv2.contourArea(blob)
        (x,y),r = cv2.minEnclosingCircle(blob)
        center = (int(x),int(y))
        r = int(r)
        if ((len(approx) >= 8) & (len(approx) <= 23) & (area > 30) & (8 < r < 20)):
            contour_list.append(blob)

numlist = []
if blobCnts == len(contour_list):
        for (l, i) in enumerate(np.arange(0, blobCnts, stringLen)):
            cnts = contours.sort_contours(contour_list[i:i + 10],method="top-to-bottom")[0]
            numlist.append(cnt)

print cnt

2 个答案:

答案 0 :(得分:0)

如果圆圈已填满,请使用Canny获取边缘。然后应用霍夫变换。这对于缺少像素,遮挡等的圆圈来说是稳健的。

霍夫改变了“投票”系统的工作。每个可能的圆圈由每个像素投票(如果它在其上)。根据先前的信息,你必须使用它有点不同。如果您知道您只有一个像素,请选择最高像素。如果你知道你有两个,选择最高,然后排除任何非常接近它的圆圈(这可能是同一个圆圈的投票)并采取下一个最高的独立圆圈。如果你不知道这个数字,你必须确定你的阈值和圆圈之间的最小距离(通常你会想要禁止重叠小于四分之一半径)。

答案 1 :(得分:0)

来自opencv的

This示例听起来像你的问题(http://docs.opencv.org/trunk/d3/db4/tutorial_py_watershed.htmlenter image description here