簡體   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