算法:对线条/其他几何形状的缓冲效果

时间:2012-02-03 11:59:38

标签: algorithm image-processing computational-geometry

如何围绕线生成缓冲任何类型的几何形状
Shapely等可用软件包不感兴趣,但希望实施enter image description here

3 个答案:

答案 0 :(得分:4)

在数学上,此操作是Minkowski sum。你应该在一本关于计算几何的好书中找到一个参考和一些伪代码。尝试O' Rourke的Computational Geometry in C,或Berg等的Computational Geometry: Algorithms and Applications

答案 1 :(得分:3)

<强>编辑: 这可以看作间接解决方案。如果您可以将几何形状作为图像,即2D矩阵,那么您可以实现(见下文)简单的函数,如膨胀/侵蚀(相当简单的内核作业)等,以使图像上的所有形状(现在像素)周围的周围区域。

这比做硬数学更直接。以下显示了一个实验。 算法很简单:

  1. 每次移动四个方向的矩阵一个像素并重复直到你想要的方向 缓冲区的深度。
  2. 总和产生的矩阵
  3. 就是这样。

    显然,对于花哨的输出,您可以使用轮廓或其他功能从输出中生成线条。

    enter image description here

    <强>更新 请注意,如上所述,这个想法非常简单,实际上是基于多边形,线条或问题中的任何内容的矩阵演示。也就是说,分辨率由表示矩阵的维度定义。然而,一个优点是它适用于任何复杂的输入。

    角落看起来是圆形的。[/ p>

    enter image description here

答案 2 :(得分:0)

这是扩张的一种解决方案。

使用bresenham的线条算法。

for each pixel <p> along the line.
check surrounding pixels and fill all pixels <p'> that have that have distance(p,p') < radius <r>.

半径r是您要使用的圆的预定半径。