唯一识别大致相同形状但大小不同的聚类椭圆

时间:2013-11-20 03:01:47

标签: python opencv

我正在研究寄生虫卵的形象。我需要识别尽可能多的鸡蛋,我已经使用分水岭算法设法在它们周围设置了不错的边界,但是我想看看整个卵形蛋,而不仅仅是蛋黄部分,这通常是什么分水岭算法挑选出来。我尝试过椭圆检测,但它只能得到水泡(中间有一个白点的圆形黑点),我实际上想忽略它(但我打算稍后再实施)。

实现这一目标的最佳方法是什么,我已经研究过图像映射,但它只返回最佳匹配,我也考虑了形状识别,但显然没有在OpenCV中实现。

以下是我使用分水岭算法获得的结果: http://imgur.com/7ptyIOL

以下是我想要得到的内容:http://imgur.com/XPLUixa

1 个答案:

答案 0 :(得分:0)

好吧我今天一直在抨击它,这是我找到的解决方案。我对图像进行阈值处理,然后找到轮廓。在我找到轮廓后,如果它通过了我做过的一点检查功能,我会在每个轮廓周围画一个椭圆。这目前效果很好,但我需要改进我的图像阈值处理方法,然后才能期待任何真正的进展。

此代码生成轮廓并绘制它们

_, contours, hierarchy = cv2.findContours(opening.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
  #will give an error if there are less than 5 points
  if len(c) > 4:
    elip = cv2.fitEllipse(c)
    if check_ellipse(elip):                                                    
      cv2.ellipse(img, elip, (255, 0, 0))

这是用于检查正确性的函数

def check_ellipse(ellipse):
  h = ellipse[1][0]
  w = ellipse[1][1]
  #make sure it's not too large, or too circular
  if abs(h-w) < 2 or h > 30 or w > 30:
    return False                                                                              
  return True

稍后我可能会改变它,所以它首先摆脱了所有没有通过测试的省略号,这样我就可以得到一个他们坐标的列表,如果我想要进一步的话,这就是我真正需要的程序