本文试图实现一种矢量图像的形状匹配算法。
该算法的输入是由等高线段构成的二维形状defined模型。根据本文的研究,这样的片段可以作为多条线,例如通过向量化像Canny这样的边缘检测器的输出。
我试图使用Inkscape的位图跟踪功能来矢量化tiff图像。我从它得到的svg图像有一个具有多个属性值的路径节点,但这不是算法想要的:


如何向量化到多行而不是路径?
发布于 2017-04-17 06:12:54
如果您查看第八章的SVG规范,它将描述如何解析path元素。简短的版本是,您将希望找到元素的d属性。该元素应该是描述曲线的字符串。它将包含以下命令:
m -移动命令l - Lineto命令c,s,q & a -曲线命令z -闭路径简单的行只是m和l序列的组合。曲线要么是圆弧,二次贝塞尔,要么是三次贝兹。
若要将Bezier曲线转换为线段,可以执行以下操作:
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曲线维基百科的公式。
https://computergraphics.stackexchange.com/questions/4995
复制相似问题