繁体   English   中英

在Python上用图像实现Kruskal算法

[英]Implementing Kruskal's Algorithm in Python on images

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

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

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

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

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

class Edge:
    def x
    def y
    def direction
    def weight

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

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

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

edges.sort(key=weight)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM