2017-06-19 116 views
0

我做了一個神經網絡,它工作正常,但我試圖用它來進行圖像識別。所以我製作了一個程序,它將圖像的每個3x3方塊取平均值,使其成爲RGB的1個元組而不是RGB的9個元組。那麼它會生成一大堆所有這些元組,所以我可以將它們饋入我的神經網絡。這裏要說的是轉換圖像轉換成可用的數據代碼:什麼是處理神經網絡圖像數據的更好方法?

from PIL import Image 

def norm(lst): 
    newtemp = [] 
    for value in lst: 
     if bool(value): 
      newtemp.append(value) 
    R = [] 
    G = [] 
    B = [] 
    for value in xrange(len(newtemp)): 
     R.append(newtemp[value][0]) 
     G.append(newtemp[value][1]) 
     B.append(newtemp[value][2]) 

    R = (sum(R)/len(R))/255. 
    G = (sum(G)/len(G))/255. 
    B = (sum(B)/len(B))/255. 

    return [R,G,B] 

def imgConverter(img): 
    im = Image.open(img) 
    im = im.convert("RGB") 
    edge = 3 
    width = im.size[0] 
    height = im.size[1] 
    pix = im.load() 
    color = [] 
    for x in xrange(0, width, edge): 
     for y in xrange(0, height, edge): 
      xmin = min(x+edge, width)-x 
      ymin = min(y+edge, height)-y 
      temp = [[] for _ in xrange(edge*edge)] 
      for xpos in xrange(0, xmin): 
       for ypos in xrange(0, ymin): 
        temp[ymin*ypos+xpos] = pix[x+xpos, y+ypos] 
      color.append(norm(temp)) 
    return color 

def datacrunching(color): 
    newdata = [] 
    for RGB in xrange(3): 
     for value in xrange(len(color)): 
      newdata.append(color[value][RGB]) 
    return newdata 

data = str(datacrunching(imgConverter("cat0.jpg"))) 
file = open("img_data.txt", "w") 
file.write(data) 
file.close() 

它大大降低了數據處理,但即便如此,圖像是500×500將給lenght 83667陣列,這是相當大的。因爲數組中的每個數字都是輸入節點,所以它的速度太慢,這是我通過將每個3x3正方形分解爲1x1正方形來減少圖像數據長度的方式,這個問題或者將其送入的方式我的神經網絡?如果是我餵食的方式,我該怎麼做?有人可以幫忙,謝謝!

+1

您可能需要稍微閱讀一下「圖像特徵提取」(Google是您的朋友);不能給出更多的建議,因爲這非常依賴於手頭的任務。 –

回答

2

您可以使用PIL將圖像轉換爲灰度。

from PIL import Image 
image_file = Image.open("convert_image.png") # open colour image 
image_file = image_file.convert('1') # convert image to black and white 

這比取平均值要快得多。

image_file現在包含圖像作爲黑白圖片。您可以將其轉換爲一個numpy矩陣,並將其存儲爲文本文件。


訓練:在前面的步驟中,應該能夠你的圖像轉換成尺寸的2D矩陣500×500。這可以被展平到尺寸的一維數組(250000,1)如果你是將其作爲輸入提供給ANN,或者如果使用CNN則可以保持2D輸入。對於圖像,首選CNNs

+0

我想我沒有正確解釋自己,我所展示的程序工作正常,速度很快,其次是圖像2000x2000,問題是當我將數據輸入到我的神經網絡時,輸入節點變得巨大的數量太多爲我的電腦。問題更多的是我如何餵它到我的神經網絡 – Tissuebox

+0

@Tissuebox編輯。 –