1 位光栅图像的矢量化

Vectorization of 1 bit Raster Images

提问人:Scooter 提问时间:2/25/2018 更新时间:2/25/2018 访问量:774

问:

我想将仅由两种颜色组成的低分辨率光栅图像转换为矢量图像。

我目前的方法很简单。我使用摩尔轮廓跟踪算法在形状的边缘“走动”。当我在形状周围走动时,我会创建与正在描摹的像素具有相同斜率的简单线条。一旦斜率发生变化,我就会关闭那条线,然后开始一条新线。这将生成一个线列表,这些线类似于从每个等值线创建的多边形。

这种方法存在一些明显的问题:

  1. 这些线仅沿每条等值线轨迹闭合为多边形。这是因为每个等值线都精确地转换为一个闭合的多边形,目前我无法将线从一个等值线连接到另一个等值线。
  2. 该算法只能对带有线条的图像进行建模。我真的很希望能够创建同时具有线条和曲线的矢量图像,以便更准确地表示位图图像。

追踪前:

enter image description here

描摹后(每种颜色代表找到的不同轮廓)。

enter image description here

以下是我希望能够转换的其他类型的图像的一些示例:

enter image description here

enter image description here

所以我的问题是,什么是好的算法可以将这些图像之一作为输入,并输出由曲线和线组成的矢量图像,这些曲线和线条对原始位图进行建模?

算法 与语言无关 的光栅 矢量图形

评论

0赞 SeldomSeenSlim 2/28/2018
所以这是一个有趣的问题,我有点惊讶还没有人发表评论。在你的例子中,你会把节点放在哪里,比如说,看起来融化的飞机?我的想法是,当满足某些条件时,大多数算法都无法进行调用,例如,单元格周围的所有像素都是 1 值,例如,飞机尾部与面体相遇的地方;你能举一个例子来说明你希望看到的矢量化吗?
0赞 Scooter 3/1/2018
哈哈,你所指的那架“融化”的飞机应该是一把枪(但我明白你为什么认为它是一架飞机)。我现在有一个矢量化的工作解决方案。一旦我完善了算法并将其完全实施在我实际尝试做的事情(旋转)中,我将发布一个答案,描述我采取了哪些步骤。
0赞 SeldomSeenSlim 3/1/2018
嗯。所以从某种意义上说,你想做无损旋转。你知道你可以把它们旋转为像素,对吧?顺便说一句,我对矢量化函数非常感兴趣,因为它完全不相关。对我来说,我对在栅格中定义“对象”感兴趣。但是我在边缘方面遇到了困难,或者说,一些规则在你有 7/9 像素的边缘上是如何工作的。
0赞 Scooter 3/2/2018
是的,我正在尝试获得无损旋转。原帖在这里。这个解决方案对我来说还不够好,所以我的新方法是矢量化轮廓,然后在精灵的其余部分上色。至于像 7/9 像素这样的情况,我不确定。这些情况确实不会出现在我正在处理的精灵中,但如果你发送一些示例,我可以看看。
0赞 SeldomSeenSlim 3/2/2018
因此,7/9 问题的一个例子是在融化的飞机(或枪管)的尾部附近。如果打算使用焦点函数来确定矢量变换的节点,这些区域可能是一个问题。我首先使用了一种算法,尝试找出栅格的节点位置,然后尝试弄清楚如何连接它们。这个周末我会花一些时间讨论这个问题,并发布一些我以前尝试过的选项,并希望能找到一个解决方案。

答: 暂无答案