如何在图像中找到这种几何形状

时间:2012-11-27 18:41:42

标签: algorithm image-processing machine-learning computer-vision

scene

假设我有一个如上所述的场景图像。一种带有斑点的杆子,旁边可能是没有斑点的相似物体。 如何找到由红色圆圈标记的斑点(二进制图像,指示哪些像素属于斑点)。

请注意,杆与blob一起可以任意旋转,尺寸也可以变化。

4 个答案:

答案 0 :(得分:1)

一种方法可能是使用Viola-Jones object detection framework

虽然该框架主要用于人脸检测 - 但它实际上是为您提供给算法的通用对象设计的。


算法的基本思想是将“好对象”(你正在寻找的)和“坏对象”的样本提供给机器学习算法 - 它从图像中生成模式作为其特征。

在分类过程中 - 使用滑动窗口,算法将搜索对象的“匹配”(分类器返回肯定答案)。


该算法使用supervised learning,因此需要一组标记的示例(正面和负面)

答案 1 :(得分:1)

您可以尝试以下4个步骤进行操作吗?

  1. 圈检测如:writing robust (color and size invariant) circle detection with opencv (based on Hough transform or other features)
  2. 线路检测,例如:Finding location of rectangles in an image with OpenCV
  3. 通过组合相邻线来识别矩形位置(对于每个线段,您有起点和终点位置,您也知道每个线段的方向。这样您就可以确定两个连接线段(其中)端点很接近)是正交的。你的目标是为每个矩形找到3个这样的段。)

  4. 检查每个圆和矩形的相对位置,看看是否有任何一对可以形成knob形状。

答案 2 :(得分:0)

我确信图像处理中有一些边界图算法可以做到这一点。

否则,这是一个快速修复:在中心选择一个像素 “未被发现的区域”,最初是整个图像。 跟踪4个方向的水平和垂直线,每个方向都以 区域的边界,并找到值从0到1或反之亦然。

跟踪每个这样的值开关并完成每个图的边界(步骤A)。 对区域执行相同操作 仍然未被发现:从某个中心开始 通过连接中心到图像边界或连接到的线来指向和浏览 已知区域边界处的像素。

在步骤A中,您还可以检查您追踪的边界是否是 线条或曲线。每当它是曲线时,你只需要两个点 - 为了计算的准确性,指向彼此一定距离。

垂直于这两个相切点的线 在图中红色圆圈的中心相交。

答案 3 :(得分:0)

您可以分割图像。然后仅使用片段中的像素来进行霍夫变换以找到圆圈。 然后,您将只有包含圆圈的细分。您可以使用修改后的霍夫变换来查找矩形。然后,“最佳”矩形和方形组合将成为您的匹配。这在计算上非常有意义。

另一种方法,如果您已经拥有这些二进制图片,则通过将距质心的距离与沿边缘行进的距离进行比较,转换为(例如256个bin)样本。如果从距离质心最远的点开始,则会有一个相当旋转的强大特征向量。