在Python上用图像实现Kruskal算法

时间:2013-02-01 19:26:57

标签: python image algorithm kruskals-algorithm

网格使用存储在两个数组中的边来定义图像:

  • h[x][y]给出了x,yx+1,y
  • 的边权重
  • v[x][y]给出了x,yx,y+1
  • 的边权重

我正在尝试实施Kruskal的算法。这很简单 - 我可以找到implementations online并复制它们。问题是处理边缘。特别;对它们进行排序令人困惑。

有没有更好的方法来存储此拍摄的边缘?我希望它们从每个像素到相邻的像素。我将图像存储为i [x] [y],边缘权重只是图像值之间的差异。

1 个答案:

答案 0 :(得分:1)

您需要做的是创建所有边的列表,然后对它们进行排序。为此,您需要定义一个类Edge:

class Edge:
    def x
    def y
    def direction
    def weight

然后,解析hv矩阵并构建edges列表。最后,它应该有2 * N * M个元素。边缘的方向应为'h''v',具体取决于您解析的矩阵。

如果您不将hv矩阵用于任何其他目的,则可以完全删除它们,因为您可以直接从i计算边的权重基质

最后,出于算法的目的,您需要使用权重作为标准对列表进行排序:

edges.sort(key=weight)