2012-06-14 21 views
1

列表中的一個顯著變化所以我的代碼查找在Python

for x in range(x1,x2): 
     for y in range(y1, y2): 
      cpixel = pixels[x, y] 
      if bw: 
       bw_value = int(round(sum(cpixel)/float(len(cpixel)))) 
       all_pixels.append(bw_value) 
       title = "Averaged (B&W) Pixel Values" 
      else: 
       if lumi: 
        luma = (0.3 * cpixel[0]) + (0.59 * cpixel[1]) + (0.11 * cpixel[2]) 
        all_pixels.append(luma) 
        title = "Pixel Luminosity Values" 
       else: 
        if round(sum(cpixel))/float(len(cpixel)) > 100: 
         all_pixels.append(255) 
        else: 
         all_pixels.append(0) 
        title = "Pixel Binary Transform Values" 

截斷並從這裏Getting list of pixel values from PIL修改了一下,以一個邊界區域內發出的像素值(all_pixels)的列表(用戶此位選擇)。

我試圖找出一個有效的方法來檢測一系列相似的值已被記錄後的列表內的變化。由於列表似乎列出了從上到下和從左到右的像素值。在場景中,我將使用它,它會有一個類似值的列表,直到它碰到圖像的一個區域,然後這些值將開始來回切換,直到值再次穩定在一個新值的附近。

我感興趣的是跟蹤這兩者之間的邊界,我想檢測這個邊界的位置以及是否向左或向右移動。除了必須檢查每個值,因爲它被附加到all_pixels,然後追溯座標,我無法真正想到任何其他方法。

即使我設置了任意數量的值,在下一個明顯不同的下一個值被認爲是顯着變化之前,不僅僅是異常值,在這之後值開始切換舊價值和新價值之間。

我想理想情況下我需要爲這個邊界區域/線的座標生成某種最合適的線。我只需要一些想法來解決這個問題。

+1

你說的'重大變化'是什麼意思?它有什麼用途?這聽起來像你想做一些運動跟蹤。 – Junuxx

+0

事實上,基本上我在一個圓筒裏有一個粉末,我想跟蹤它的體積,因爲它被挖掘後壓實。 「我所說的邊界是由它的陰影產生的粉末的頂部線,如此重要的是任何值都大於陰影區產生的值,基本上我在每次點擊後拍攝一張圖像,這就是我想要的跟蹤它的變化 – DamianJ

回答

1

根據您的評論對問題的描述,我覺得一個簡單的邊緣檢測器就足夠,不過這將取決於東西,如攝像頭角度,對比度,照明等

你可以採用圖像的垂直導數,可能會平滑一點,找到最高值的行。假設圖像放大在圓柱體上,除了粉末邊界之外沒有其他主要的垂直對比度,這應該是粉末的高度。

你可以自己編寫代碼,或者使用OpenCV,但我認爲這可能會對這項任務有點過分。 Numpy也是一個不錯的選擇。

+0

感謝您的建議,我會看看我想出了什麼。 – DamianJ