我正在研究寄生虫卵的形象。我需要识别尽可能多的鸡蛋,我已经使用分水岭算法设法在它们周围设置了不错的边界,但是我想看看整个卵形蛋,而不仅仅是蛋黄部分,这通常是什么分水岭算法挑选出来。我尝试过椭圆检测,但它只能得到水泡(中间有一个白点的圆形黑点),我实际上想忽略它(但我打算稍后再实施)。
实现这一目标的最佳方法是什么,我已经研究过图像映射,但它只返回最佳匹配,我也考虑了形状识别,但显然没有在OpenCV中实现。
以下是我使用分水岭算法获得的结果: http://imgur.com/7ptyIOL
以下是我想要得到的内容:http://imgur.com/XPLUixa
答案 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
稍后我可能会改变它,所以它首先摆脱了所有没有通过测试的省略号,这样我就可以得到一个他们坐标的列表,如果我想要进一步的话,这就是我真正需要的程序