首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以多条线代替路径的矢量化

以多条线代替路径的矢量化
EN

Computer Graphics用户
提问于 2017-04-13 03:43:49
回答 1查看 698关注 0票数 1

本文试图实现一种矢量图像的形状匹配算法。

该算法的输入是由等高线段构成的二维形状defined模型。根据本文的研究,这样的片段可以作为多条线,例如通过向量化像Canny这样的边缘检测器的输出。

我试图使用Inkscape的位图跟踪功能来矢量化tiff图像。我从它得到的svg图像有一个具有多个属性值的路径节点,但这不是算法想要的:

如何向量化到多行而不是路径?

EN

回答 1

Computer Graphics用户

发布于 2017-04-17 06:12:54

如果您查看第八章SVG规范,它将描述如何解析path元素。简短的版本是,您将希望找到元素的d属性。该元素应该是描述曲线的字符串。它将包含以下命令:

  • m -移动命令
  • l - Lineto命令
  • csq & a -曲线命令
  • z -闭路径

简单的行只是ml序列的组合。曲线要么是圆弧,二次贝塞尔,要么是三次贝兹。

若要将Bezier曲线转换为线段,可以执行以下操作:

代码语言:javascript
复制
const float kNumPolyLines = 10; // <- change this to make more lines per bezier segment
const float kDeltaT = 1.0 / kNumPolyLines;
Point c0;
Point c1;
Point c2;
Point c3;
GetBezierControlPoints(&c0, &c1, &c2, &c3); // <- get the 3 or 4 control points for the next bezier segment
Point prevPoint = c0;
Point currentPoint;
for (float t = kDeltaT; t <= 1.0; t += kDeltaT)
{
    currentPoint = CalculateBezier(c0, c1, c2, c3, t);

    // Now you have the next line segment in your poly line. 
    // It goes from prevPoint to currentPoint. Store it or draw it, 
    //or whatever you need

    // Get ready for the next iteration
    prevPoint = currentPoint;
}

您可以找到二次和三次bezier曲线维基百科的公式。

票数 2
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/4995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档