2017-02-07 32 views
0

我想找出一個算法,建立一個網格,基於像素和周圍像素的數量。例如,假設我有200個隨機像素。我有像素a,並且可以獲取對其周圍每個像素的引用。這適用於所有像素。實質上,每個像素都是拼圖塊,每一塊都有其所有鄰居的參考。如何編程方式創造鑑於信息我如何以編程方式創建一個像素網格給定只有像素鄰居

+0

是否以任何方式訂購參考?一塊拼圖不只是告訴你它連接了哪一個,而是以什麼順序。這將使構建外部邊界相對容易,然後向內工作。 – Tommy

+0

其實沒有,沒有有限的邊界,只有一個包含ID的對象(像素)數組,以及4個引用其他像素,每個方向一個 – user379468

+0

你能解釋一下「每個像素是拼圖塊」嗎? – cuongptnk

回答

0

假設你

  • 輸入像素的網格(完成拼圖)是像素的列表以及每個像素具有的屬性topleftbottomright(到周圍像素的參考文獻)和您的
  • 輸出將是一個2D陣列的像素的grid

你可以做如下:

def pixel_graph_to_grid(pixels): 
    if len(pixels) == 0: 
     return [[]] 

    # (1) Finding the top left pixel. 
    p = pixels[0] 
    while p.top: 
     p = p.top 
    while p.left: 
     p = p.left 

    # (2) Go row-wise through the image. 
    grid = [] 
    first_of_row = p 
    while True: 
     p = first_of_row 
     row = [p] 
     while p.right: 
      p = p.right 
      row.append(p) 

     grid.append(row) 

     if first_of_row.bottom: 
      first_of_row = first_of_row.bottom 
     else: 
      break 

你也可以做一些計算類似(1)知道你有多大的內存來分配的網格。

該算法具有線性運行時間並且需要恆定的額外空間,所以它應該是最優的。

相關問題