2013-06-22 101 views

回答

1

总的来说,你问的事情是一个大问题。在真实世界的图像中,您需要找到每个椭圆形状,区分哪一个具有顶部(直到您容忍并考虑了哪个角度?)。然后你需要很好地分割这些形状,以便找到顶部椭圆形物体的区域。

但是,如果你需要找到更简单的相似图片的例子,但仍然是一个更通用的方法,你可能首先通过使用任何边缘检测(例如坎尼)得到的边缘。然后,对曲线和椭圆使用Hough变换。但我不认为有这方面的功能或图书馆。所以你可能需要实现你自己的Hough变换。为此,你必须决定你是什么意思的椭圆形顶部。对于你的两幅图像,如果你成功找到椭圆形的顶部,就把它放在它下面。但是为了获得更多的一般性,你可能想要用更复杂的方法来细分它。

对于Hough变换; http://en.wikipedia.org/wiki/Hough_transform#Circle_Detection_Process 和椭圆使用它http://en.wikipedia.org/wiki/Randomized_Hough_transform

0

实际上有一个函数来检测opencv的圆圈。

使用hough transform低参数2 -cause你应该检测与仅给予其顶部的圆。

另一种方式应该是这样的;

1低通滤波器(高斯模糊,OpenCV的文档里面搜索)

2 - 彩色滤光片 - 可选(使用对象的颜色,如果你知道它,否则会尝试从像素的颜色(image.width/2,0)

3- Canny边缘检测(再次,参照该文档)

4-找到轮廓(再次,参照该文档)

5-如果有具有轮廓最好是大面积和包含像素(image.width/2,0) - 你会使用pointPolygonTest在这里 - 然后你在底部有一个blob。

6至检测此斑点是“椭圆形”是个大问题;但你可以使用“椭圆”属性进行一些过滤;

  • 椭圆曲线有1个且只有1个峰值点。应该只有1个具有最大高度的轮廓像素。
  • 任何一个椭圆曲线的3点都不能代表一条线。这并不难实现,但对于算法来说很复杂。
+0

据我所知在opencv中的圆检测器无法检测到椭圆形状。由于他们的数学定义会不同?对不起,我不喜欢OpenCV –

+0

是的,当然,它只能用于纯粹的圈子。 – baci

0

我会建议一个比霍夫简单的方法变换圈。 从上面的图片中,我看到椭圆形的颜色是均匀的,而其余的图像没有。

  1. 选择合适的色彩空间(可能HSV)
  2. 采取灰度作为色调或饱和度 - 这些将描述图像(未中的像素的强度)
  3. 计算中的颜色的梯度(2)
  4. 像素与梯度= 0属于椭圆
+0

虽然这种方法可以帮助这两个图像,但问题不在于“我想在这些照片中找到具有非均匀颜色背景的这两个统一颜色的物体”,它会在数据库中取得成功,并且如果您只是更改颜色那么会发生什么? –

+0

那么,如果解决方案患有过度拟合训练集并且不能推广到整个数据集,那只是“欺骗”。改变颜色会改变色调和饱和度,但不应该对色相/饱和度的梯度产生不利影响。 – Leeor

+0

通过改变颜色,我的意思是改变颜色和背景的颜色,如不透明的灰色 –

0
对于

椭圆检测,可以参考this post。这两种方法基于霍夫变换,如果需要可以很容易地调整。