【问题标题】:Vectorization of binary grayscale image二值灰度图像的矢量化
【发布时间】:2014-03-19 21:25:33
【问题描述】:

我有包含线条、曲线和一些简单形状(椭圆和多边形)的二进制灰度位图图像(黑白),我的目标是将这些元素描述为公式。

其中一个选项是对图像应用矢量化,但我不是这个领域的专家,所以我需要你的帮助来建议我能做什么。是否有任何工具或库能够提供描述这些对象的公式?

谢谢

【问题讨论】:

  • 我真的不明白你的目标是什么。你的意思是你需要识别给定线条画的简单形状吗?例如,用户绘制了不完美的嘈杂六边形,并且您想以某种方式将其细化为近似六边形。
  • 是的@azer89 就像你在说什么......用户会画一条曲线,我想自动找到一个描述这条曲线的公式。

标签: image-processing graphics computer-vision graphics2d vector-graphics


【解决方案1】:

也许你需要三次贝塞尔曲线:

这是我做过的一个项目,(1) 我使用Ramer-Douglas-Peucker 去除噪音,(2) 将曲线表示为我使用least square fitting 获得的三次贝塞尔曲线:

这是原图:

矢量化图像:

由于已经转换成数学公式,所以可以无限放大。

抱歉,我无法分享代码,因为它非常庞大,但我希望你能明白。

如果你想要跟踪库,你可以使用这个:http://potrace.sourceforge.net/

此外,如果您只想去除噪音,可以尝试 CSS:http://www.morethantechnical.com/2012/12/07/resampling-smoothing-and-interest-points-of-curves-via-css-in-opencv-w-code/

【讨论】:

  • 伟大的@azer89 非常感谢你!我的目标实际上是了解公式并可以访问它们。再次感谢您提供非常好的建议和指导。
  • 其实我还是挺疑惑的,“公式”是什么意思?你能通过画图来详细说明你的问题吗?
【解决方案2】:

如果你有很好的连续形状,你可以使用findContours().之类的东西来追踪它们的轮廓。但是,如果您的输入(您没有正确描述)嘈杂且粗略,则该方法应依赖于霍夫变换,见下文。同样,在拟合曲线时,很大程度上取决于噪声水平和异常值的存在(例如,不是形状的背景元素或仅近似的不准确形状,例如适当的椭圆)。除非是家庭作业,否则很难在典型的任务中想象适当的干净线条和适当的形状。

Hough linesHough circles 是openCV 库中使用最广泛的函数。请注意,拟合椭圆很重要,因为它们有 5 个参数(线有 2 个,圆有 3 个)并且霍夫空间增长得太多。可以使用霍夫线或特殊的矩形霍夫线找到矩形。可以使用广义非参数霍夫检测其他形状。

拟合曲线应使用 RANSAC 去除异常值,并使用几何(点距离方面的最小二乘)拟合以最小化像素噪声。后一个过程通常涉及非线性优化,应该通过更简单的代数拟合来初始化。幸运的是,已经编写了简单的几何图元拟合函数,请参阅fitLine().

归根结底,鉴于您的形状有点嘈杂,您的任务并非微不足道(在您可能没有意识到的程度上),因此应该将其拆分为几个子项目,例如寻找形状、拟合曲线、等等。

【讨论】:

  • 感谢@Vlad,我的图像非常干净,因为我正在追踪孩子们绘制的线条,并且我正在生成这些图像,所以没有背景。只是白色背景上的黑色线条。是的,你是完全正确的,我现在正试图将我的问题深入到几个子问题中。但是这种任务应该已经在矢量化软件中解决了不是吗?在矢量化图像的文件中,某处有线条和形状公式,我是对的还是完全错的?
  • 曾经有矢量化显示,其中光束将绘制形状而不是光栅。有绘制图元的函数。但这就是所谓的“直接工程”:公式->绘制形状。您正在尝试解决逆向工程:多个形状-> 多个公式,这是一个更难的问题。那里没有独特的配方或图书馆。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多