我有一个将2D形状作为路径元素存储在SVG中。这些形状由贝塞尔曲线和线段组成。
我还使用弧长参数化在形状上生成一组等间距点。
如何使用SVG或这些点来确定形状的中轴线?
我使用Python,但任何伪代码或算法建议都将不胜感激。
以下是我正在处理的形状类型示例,红点是沿曲线采样的点。
我有一个将2D形状作为路径元素存储在SVG中。这些形状由贝塞尔曲线和线段组成。
我还使用弧长参数化在形状上生成一组等间距点。
如何使用SVG或这些点来确定形状的中轴线?
我使用Python,但任何伪代码或算法建议都将不胜感激。
以下是我正在处理的形状类型示例,红点是沿曲线采样的点。
有点晚,但是让我们开始吧:
最后找到n-prongs,其中n>= 3。从每个接触点开始:
如果上述中的1或2次迭代中的任何一次发生,请移动到边界上的下一个接触点(使用next)。但是,如果需要3次或更多次迭代,则可以证明存在3-prong分支点,并且应在cp1和cp1.next之间的每个边界段上插入其接触点。
在这种情况下,请插入3-prong(见下面如何找到这些)并重新从步骤1开始,从cp1再次开始。
这里我们与论文稍有不同,使用构建外接圆方法来代替使用势函数。
如果有任何不清楚的地方,请随时提问。
CpNode
对象返回。此对象包含一个具有 ...(继续) - Floriscircle
属性,这正是您要寻找的。它实际上存储了额外的(在技术上数学上是冗余的信息),例如切线相交最大球体边界上的点等。 - FlorisA lookup table is used, that assigns 0 or 1 to each configuration of
the 3x3 binary square, whether the central pixel should be removed
or kept.
We want a point to be removed if it has more than one neighbor
and if removing it does not change the number of connected components.
The distance transform to the background is computed, as well as
the cornerness of the pixel.
The foreground (value of 1) points are ordered by
the distance transform, then the cornerness.
A cython function is called to reduce the image to its skeleton. It
processes pixels in the order determined at the previous step, and
removes or maintains a pixel according to the lookup table.
Because
of the ordering, it is possible to process all pixels in only one
pass.
我希望这能对你有所帮助