Algorithm 基于距离变换算法的形状突发

Algorithm 基于距离变换算法的形状突发,algorithm,image-processing,Algorithm,Image Processing,我正在开发HTML5画布应用程序,该应用程序需要在画布上绘制的形状上创建边界突发效果。它看起来像是沿着形状边界的内部渐变。类似于内部辉光过滤器的东西。请参见此处的示例: 出于我的目的,我还需要在垂直方向和水平方向上有不同的梯度速度,以便,例如,水平方向的爆发比垂直方向的爆发更宽 我了解到这是使用距离变换算法完成的,我在Jerry Huxtable的网站上找到了一个Java实现,现在我需要弄清楚我需要使用什么距离度量来在不同方向上具有不同的梯度 我将非常感谢任何帮助,因为我在图像处理方面有一点经验

我正在开发HTML5画布应用程序,该应用程序需要在画布上绘制的形状上创建边界突发效果。它看起来像是沿着形状边界的内部渐变。类似于内部辉光过滤器的东西。请参见此处的示例:

出于我的目的,我还需要在垂直方向和水平方向上有不同的梯度速度,以便,例如,水平方向的爆发比垂直方向的爆发更宽

我了解到这是使用距离变换算法完成的,我在Jerry Huxtable的网站上找到了一个Java实现,现在我需要弄清楚我需要使用什么距离度量来在不同方向上具有不同的梯度


我将非常感谢任何帮助,因为我在图像处理方面有一点经验。此外,如果我可以使用其他算法,那么很高兴看到它们。

实现形状突发渐变的最简单方法

  • 找到透明像素旁边的所有不透明像素,将其
    最短距离透明像素
    记录为1,并将所有周围像素添加到开放列表,候选像素最短距离透明像素为2
  • 处理打开列表中的每个像素,始终从最低的候选像素开始
  • 如果像素是透明的,或者已经处理过,请退出
  • 记录shortestDistanceToTransparentPixel,并将周围所有像素添加到openList中,候选shortestDistanceToTransparentPixel等于用于此像素的值(+1)
  • 现在您了解了算法的概念,需要注意以下几点:

    • 这只是形状突发的一个简单近似值
    • 您确实希望将对角线添加到openList中,距离对角线像素的距离为Sqrt(2)
    关于获得准确的形状爆裂梯度。

  • 找到透明像素旁边的所有不透明像素,将其
    最短距离透明像素
    记录为1,然后将所有这些像素添加到BSP树中
  • 对于形状中的每个像素(您将通过alpha进行测试),找到最近的像素并计算精确距离(将像素添加到BSP树)

  • 几乎实现形状突发渐变的最简单方法

  • 找到透明像素旁边的所有不透明像素,将其
    最短距离透明像素
    记录为1,并将所有周围像素添加到开放列表,候选像素
    最短距离透明像素为2
  • 处理打开列表中的每个像素,始终从最低的候选像素开始
  • 如果像素是透明的,或者已经处理过,请退出
  • 记录shortestDistanceToTransparentPixel,并将周围所有像素添加到openList中,候选shortestDistanceToTransparentPixel等于用于此像素的值(+1)
  • 现在您了解了算法的概念,需要注意以下几点:

    • 这只是形状突发的一个简单近似值
    • 您确实希望将对角线添加到openList中,距离对角线像素的距离为Sqrt(2)
    关于获得准确的形状爆裂梯度。

  • 找到透明像素旁边的所有不透明像素,将其
    最短距离透明像素
    记录为1,然后将所有这些像素添加到BSP树中
  • 对于形状中的每个像素(您将通过alpha进行测试),找到最近的像素并计算精确距离(将像素添加到BSP树)