我做了一个神经网络,它工作得很好,但我试图用它来进行图像识别。 所以我做了一个程序,取一个图像的每个 3x3 正方形,对其中所有颜色值进行平均,这样它就变成了 1 个 RGB 元组而不是 9 个 RGB 元组。 然后它制作一个包含所有这些元组的大数组,这样我就可以把它输入到我的神经网络中。 这里是将图像转换为可用数据的代码:
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()
它大大减少了要处理的数据,但即使这样,500x500 的图像也会给出一个长度为 83667 的数组,这是相当大的。 将其输入我的神经网络,因为数组中的每个数字都是输入节点,它太慢了,是我通过将每个 3x3 正方形压缩成 1x1 正方形来减少图像数据长度的方式还是我将其输入我的方式神经网络?如果是我喂它的方式,我应该怎么做?有人可以帮忙吗,谢谢!
您可以使用 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 矩阵并将 is 存储为文本文件。
训练:在上一步中,您应该能够将图像转换为尺寸为 500 x 500 的 2D 矩阵。如果您将其作为输入馈送到ANN,则可以将其展平为维度(250000,1(的一维数组,或者如果使用CNN,则可以保持2D输入。对于图像,首选 CNN