2017-02-07 1 views
0

ピクセル数と周囲のピクセル数に基づいてグリッドを構築するアルゴリズムを理解しようとしています。たとえば、200ピクセルのランダムピクセルがあるとします。私はピクセルaを持っており、それを囲む各ピクセルへの参照を得ることができます。これは、すべてのピクセルに当てはまります。本質的には、各ピクセルはパズルピースであり、各ピースはすべての隣接ピクセルを参照します。どのようにプログラムで情報どのように私はプログラム的に隣接ピクセルだけを与えられたピクセルのグリッドを作成するのですか

+0

参照はどのような順序で並べられていますか?ジグソーパズルのピースは、それがどの4つのものに接続するのかを順番に教えてくれるわけではありません。これは、外側の境界を構成して内向きに作業するのが比較的容易になります。 – Tommy

+0

実際には、有限の境界はなく、IDを含むオブジェクト(ピクセル)の配列と、他のピクセルへの4つの参照(各方向に1つ) – user379468

+0

"各ピクセルはパズルピースです"ということを説明できますか? – cuongptnk

答えて

0

があなたの

  • 入力と仮定すると、ピクセルのリストであり、各ピクセルは(属性topleftbottomrightを持っていることを与えられたピクセルのグリッド(完成したパズルを)クリートありません周囲のピクセルへの参照)とあなたの
  • 出力は、2次元配列の画素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)にいくつかのカウントと同様の操作を行うことができます。

このアルゴリズムは線形実行時間を持ち、一定の余分なスペースを必要とするため、最適でなければなりません。

関連する問題