二进制灰度图像的矢量化

时间:2014-03-19 21:25:34

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

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

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

谢谢

2 个答案:

答案 0 :(得分:2)

如果你有合适的不间断形状,你可以使用像findContours().之类的东西来追踪它们的轮廓。但是如果你的输入(你没有正确描述)是嘈杂和粗略的,那么这种方法应该依赖于Hough变换,见下文。通过相同的硬币,在拟合曲线中,很多将取决于噪声水平和异常值的存在(例如,非形状的背景元素或仅仅近似的不精确形状,例如适当的椭圆)。除非是家庭作业,否则很难想象在典型的任务中有适当的线条和正确的形状。

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

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

底线,鉴于你的形状有点嘈杂,你的任务是非平凡的(你可能没有意识到的程度),因此应该分成几个子项目,如寻找形状,拟合曲线,等。

答案 1 :(得分:2)

也许你需要立方贝塞尔:

这是我已完成的项目,(1)我使用Ramer-Douglas-Peucker去除噪音,(2)将曲线表示为我使用least square fitting获得的立方贝塞尔曲线:

这是原始图纸:

enter image description here

矢量化图片:

enter image description here

由于它已经转换为数学公式,因此可以无限缩放。

很抱歉,我无法分享这些代码,因为它非常庞大,但我希望您明白这一点。

如果您想要跟踪库,可以使用: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/