flu*_*lie 4 python svg medial-axis
我将2D形状存储为SVG中的路径元素。形状由贝塞尔曲线和线段组成。
我在使用弧长参数化生成的形状上也有一组等距的点。
如何使用SVG或这些点确定形状的中轴?
我正在使用Python,但是任何形式的伪代码或算法建议都将不胜感激。
以下是我正在处理的形状类型的示例,红色点是沿曲线的采样点。
有点迟,但这里去了:
上面的图片显示:(我已经使用在线工具将OP的图像转换为SVG,因此是红点的伪装,即参差不齐的边界)1.叠加了中间和比例轴变换(MAT和SAT)。2.仅缩放轴变换。3.仅中间轴变换。4. 2个分支中的一个(请参阅下文)。5.单三孔的SAT(有许多在MAT)。
为了找到中轴(MA)或中轴变换(MAT)以下算法都可以使用(在上面的图像紫色曲线)(基于一纸 由财,财,月球和嫣-看到一个演示实现这里,也负责处理相交的形状和带有孔的形状)。还存在其他算法。
该算法比查找二进制图像(例如位图)骨架(又名草火或离散变换)要难得多,但是具有一些优势(例如,解析)。为简化起见,下面的讨论仅处理没有孔的简单(不相交)形状的情况。
最终找到n> = 3 的n个分支。从每个接触点开始:
如果发生上述情况的1或2次迭代,则移至边界 上的下一个接触点(使用next)。但是,如果需要进行3次或更多次迭代,则可以证明存在3个分支的分支点,并且应该在cp1和cp1之间的每个边界块 上插入接触点 s 。接下来。
在这种情况下,请插入3叉(请参见下面的查找方法),然后再次从cp1开始返回步骤1 。
我将在这里进行总结,但是Choi等人的论文。很清楚地解释了这一部分,并且易于理解。
在边界上选择一个将成为2叉点的第一个接触点的点,并将其称为bp1。从边界点(即要找到的2叉中的第一个“叉”)绘制一条向内法线 。现在迭代:
在这里,我们通过构造外接圆而不是使用势函数来偏离本文。
请随时询问是否不清楚。