假设我有一个如上图所示的场景图像。一种带有斑点的杆子,旁边可能是类似的没有斑点的物体。如何找到由红色圆圈标记的 blob(指示哪些像素属于 blob 的二进制图像)。
请注意,与斑点一起的极点可以任意旋转,并且大小也可能不同。
假设我有一个如上图所示的场景图像。一种带有斑点的杆子,旁边可能是类似的没有斑点的物体。如何找到由红色圆圈标记的 blob(指示哪些像素属于 blob 的二进制图像)。
请注意,与斑点一起的极点可以任意旋转,并且大小也可能不同。
一种方法是使用Viola-Jones 对象检测框架。
尽管该框架主要用于人脸检测 - 它实际上是为您提供给算法的通用对象而设计的。
该算法的基本思想是将“好对象”(您正在寻找的)和“坏对象”的样本提供给机器学习算法 - 该算法从图像中生成模式作为其特征。
在分类期间 - 使用滑动窗口,算法将搜索对象的“匹配”(分类器返回肯定答案)。
该算法使用监督学习,因此需要一组标记的示例(正例和负例)
您可以尝试通过以下 4 个步骤来完成吗?
通过组合相邻线来识别矩形位置(对于每条线段,您都有起点和终点位置,您还知道每条线段的方向。这样您就可以确定两条连接线段(端点靠近)是否正交. 你的目标是为每个矩形找到 3 个这样的段。)
检查每个圆形和矩形的相对位置,看看是否有任何一对可以形成knob
形状。
我确信在图像处理中有一些边界映射算法可以做到这一点。
否则,这里有一个快速解决方法:在“未发现区域”的中心选择一个像素,最初是整个图像。在 4 个方向上跟踪水平和垂直线,每个方向都在区域的边界处结束,发现值从 0 变为 1,反之亦然。
跟踪每个这样的值开关并完成每个图形的边界(步骤-A)。对仍未发现的区域执行相同操作:从某个中心点开始,浏览连接中心与图像边界或已知区域边界像素的线。
在 Step-A 中,您还可以检查您追踪的边界是直线还是曲线。每当它是一条曲线时,您只需要它上面的两个点——为了计算的准确性,这些点彼此相距一定距离。
垂直于这两个切点的线在图中红色圆圈的中心相交。
您可以分割图像。然后仅使用线段中的像素来进行霍夫变换以找到圆圈。然后,您将只有带有圆圈的段。您可以使用修改后的霍夫变换来查找矩形。“最佳”矩形和正方形组合将成为您的匹配项。这是非常注重计算的。
如果您已经拥有这些二进制图片,另一种方法是通过将到质心的距离与沿边缘行进的距离进行比较来转换为(例如 256 个 bin)样本。如果您从距质心最远的点开始,您将拥有一个相当旋转的鲁棒特征向量。