我试图检测彩色图像中包含椭圆形顶部的区域。
以下是我绘制的一些例子:
http://i.imgur.com/fh6udfL.jpg
http://i.imgur.com/3qLBrVn.jpg
你将如何做到这一点?我对图像处理缺乏经验,但我愿意阅读和学习。我主要使用OpenCV和C ++,但我也可以使用其他库。
答案 0 :(得分:1)
总的来说,你提出的问题是一个大问题。在现实世界的图像中,你需要找到每个椭圆形状,区分哪个有顶部(直到你容忍和考虑的角度?)。然后你需要很好地分割这些形状,这样你就可以找到顶部椭圆形物体的区域。
但是,如果你需要像示例中那样找到更简单的图像,但仍然是一种更通用的方法,你可能首先通过使用任何边缘检测来获得边缘(例如Canny)。然后,使用Hough Transform作为曲线和椭圆。但我认为没有功能或库。所以你可能需要实现自己的Hough变换。为此,您必须确定椭圆形顶部的确切含义。对于你的两张图片,如果你成功找到椭圆形顶部,只需获得它下面的区域。但是为了更加通用,您可能希望使用更复杂的方法对其下的形状进行分段。
对于霍夫变换; http://en.wikipedia.org/wiki/Hough_transform#Circle_Detection_Process 并使用椭圆http://en.wikipedia.org/wiki/Randomized_Hough_transform
答案 1 :(得分:0)
实际上有一个功能可以检测opencv中的圆圈。
使用低参数2的hough transform - 因为你应该检测到只有顶部的圆圈。
另一种方式应该是这样的;
1-低通滤波器(高斯模糊,在opencv doc中搜索)
2-彩色滤镜-optional(如果你知道的话,使用对象的颜色,否则尝试从像素中获取颜色(image.width / 2,0)
3- canny边缘检测(再次参考文档)
4-找到轮廓(再次参考文档)
5-如果你的轮廓具有最大的区域并且包括像素(image.width / 2,0) - 你将在这里使用pointPolygonTest - 那么你底部有一个blob。
6-检测这个斑点是否是“椭圆形”是一个大问题;但你可以使用“ovality”属性进行一些过滤;
答案 2 :(得分:0)
对于圆圈,我建议采用比霍夫变换更简单的方法。 从上面的图像中,我看到椭圆形具有均匀的颜色,而其余部分则是如此 图像没有。
答案 3 :(得分:0)
对于椭圆检测,您可以参考this post。这两种方法基于霍夫变换,如果需要可以轻松调整。