如何检测二进制图像中的曲线?
computer-vision
image-processing
matlab
5
0

我有一个二进制图像,我想检测/跟踪该图像中的曲线。我什么都不知道(坐标,角度等)。谁能指导我该如何开始?假设我有这张图片在此处输入图片说明

我想分开曲线和其他线条。我只对曲线及其参数感兴趣。我想存储曲线的信息(在数组中)以备后用。

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

1)读一本关于图像分析的书

2)扫描黑色像素,发现黑色像素时将其存储,然后将其设置为白色。这将获得一个对象中的点并将其从图像中删除。只需不断重复此操作,直到没有剩余的黑色像素。

如果要将曲线与直线分开,请尝试进行直线拟合,然后获取相关系数。类似的算法可用于曲线,并且相关性告诉您点与理想形状的接近度。

收藏
评论

这实际上取决于您所说的“曲线”的含义。

如果要简单地将每个离散像素集合标识为“曲线”,则可以使用连接组件算法。每个分量将对应于像素的集合。然后,您可以进行一些测试以确定组件的线性或其他特征。

如果要查找直线,圆曲线或任何其他参数曲线,则可以使用霍夫变换来检测图像中的元素。

最好的方法实际上取决于您要寻找的曲线,以及您需要有关曲线的哪些信息。

参考链接:

收藏
评论

由于您似乎已经拥有一个好的二进制映像,因此,最简单的方法是将映像的不同连接组件分开,然后计算其参数。

首先,您可以通过扫描图像来进行分离,当遇到黑色像素时,可以应用标准的填充算法来找出形状中的所有像素。如果您有matlab映像工具箱,则可以找到使用bwconncompbwselect过程的方法。如果形状没有完全连接,则可以对图像应用形态学闭合操作以连接形状。

分割出不同的形状之后,可以通过测试曲线与直线的偏离程度来过滤掉曲线。您只需选择曲线的端点,然后计算其他点与端点定义的直线之间的距离,即可完成此操作。如果该值超过某个最大值,则将显示一条曲线而不是一条直线。

另一种方法是测量端点距离与对象长度的比率。对于直线,此比率将接近1;对于曲线和摆动的形状,该比率将更大。

如果图像具有希望与曲线分开的角度,则可以检查曲线的方向梯度。分割形状,从中选取等距的点集,并为每个点计算与上一个点和下一个点的角度。如果角度差太大,则您将没有平滑的曲线,而是有些倾斜的形状。

实施中可能遇到的困难包括粗线,您可以通过骨架变换来解决。有关骨架的matlab实现和查找曲线端点的信息,请参见matlab图像处理工具包文档

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号