【发布时间】:2013-04-09 00:07:16
【问题描述】:
作为一个小项目,我决定编写一个小型光栅到矢量转换器。网上有很多很多的资源,但是可以给我任何一种起点的实际实现要少得多。我还没有决定要用哪种语言来做这件事,但 Python 似乎很适应。
第一个问题是大多数论文都针对矢量化徽标或灰度图像,我对这两者都不太感兴趣。potrace,其算法描述为here,是其中之一那些图书馆。相同的技术是否适用于照片位图?
我对我的发现感到沮丧,直到我偶然发现了Vector Magic。结果是惊人的!但是,他们没有提供有关其算法的任何信息。此处描述了一种产生类似质量结果的方法: http://eprints.gla.ac.uk/47879/1/ID47879.pdf。策略是移除轮廓并对其进行处理,然后再将它们绘制为向量。
但没有提及他们是如何做到这一点的。我可以用 openCV 提取轮廓,但那又如何呢?我无法理解向量的创建,或轮廓提取后发生的任何事情。
所以,总而言之,这是我的问题:您为这个项目推荐哪种语言或库?你有什么关于实现一个可以产生令人满意结果的算法的技巧吗?
【问题讨论】:
-
GIMP 有用于矢量化照片的代码。我假设您不想编写自动化 GIMP 的程序而不是使用库,或者将其编写为 GIMP-fu 脚本而不是独立程序。但是,由于 GIMP 是开源的,您可以查看代码的工作原理。我相信基本思想是:(1)模糊,(2)分色,(3)按颜色选择,(4)对于每种颜色,对于每个不连贯的区域,将边界作为向量进行追踪。
-
更简单的替代方法是仅使用边缘检测算法,并将每条边缘作为向量进行跟踪。有关边缘检测算法的说明以及更多信息的链接,请参阅the Wikipedia article。
-
感谢您的信息!你会建议什么语言? Python在这里是一个不错的选择吗?
-
这取决于你的目标是什么。如果您想要一些实用的东西,我可能会让 GIMP 完成繁重的工作,并使用 Python-Fu 在内部编写脚本。如果你想了解它是如何工作的,我会从一个非常简单且众所周知的边缘检测算法开始,比如Canny's,你可能可以找到从课堂笔记到大量文档来源的各种文档。
标签: python opencv image-processing vector vectorization