是否有任何用于将光栅图像转换为矢量的库,将采样颜色的数量限制为特定的集合?类似于VectorMagic中所做的事情,但提供了要使用的颜色子集。
2 回答
Imagetracer 是一个免费的开源(公共领域)库和应用程序,可能很有用。免责声明:我做了这些。
如果你需要一个命令行应用程序,我推荐 ImageTracer.jar 来自
https://github.com/jankovicsandras/imagetracerjava
有这样的选项
java -jar ImageTracer.jar input.png outfilename output.svg numberofcolors 4
将颜色数限制为 4。如果从 Java 程序调用该库,则可以使用自定义调色板,还有许多其他选项。
您可以从浏览器或 Node.js 使用 JavaScript 版本: https ://github.com/jankovicsandras/imagetracerjs
有执行精细矢量化的开源库/程序potrace 。问题是它首先将输入图像转换为发光图像,然后将其二值化。此步骤是可选的,由单独的程序完成,因此您可以通过构建自己的多个二值化图像版本来以不同的方式使用 potrace。我认为 VectorMagic 会根据输入图像的梯度/拉普拉斯算子构建其轮廓,这就是为什么您不能强加任何颜色集的原因。
如果您有一个颜色子集用作输入,我建议您遵循以下算法:
- 对于输入颜色子集的每种颜色,找到与所选颜色“最接近”的颜色空间子空间,而不是任何其他颜色。类似于计算输入子集的 Voronoi 分区的算法可以立即完成这项工作。使用例如qhull。
- 对于每个子空间,将输入图像二值化,如果在子空间内,则将每个像素绘制为白色,否则绘制黑色。然后对其应用 potrace 或 VectorMagic 的矢量化。
最后,您将获得一组轮廓。也许轮廓不会完全匹配,但会足够接近让您简化它们并正确删除轮廓的双倍。