算法描述:
神经网络图像分类算法首先通过PCA技术提取样本图像特征码与待分类图像特征码,然后将特征码送入神经网络进行训练,让神经网络学习每个类别图像的特征最后将未知类别图像送入神经网络,自动识别它的类型。步骤如下:
- 基于PCA技术提取每个样本的图像特征码。
- 根据样本特征码生成输入项,根据样本所属类别生成对应的输出项。
- 将输入与输出项送入非线性网络神经训练。
- 基于PCA技术生成待分类图像的特征码。
- 将待分类图像的特征码送入神经网络仿真测试,根据神经网络输出项判断其所属类别。
输出目标设计
神经网络的输出目标以及输出函数的设计应本着灵活使用的原则。举个例子神经网络的输出值为3个图像类别,用数字1~3来表示,但不能直接将数字作为目标输出值。
- 将数字转换为1以内的小数。比如:乘以输出值的最大数的倒数进行调整等。
- 按照二进制编码的思路,将其设计为如下形式:
def readpic(fn): #返回图像特征码 fnimg = cv2.imgread(fn) img = cv2.resize(fnimg,(500,400)) w = img.shape[1] h = img.shape[0] w_interval = w/20 h_interval = h/10 alltz = [] for now_h in range(0,h,h_interval): for now_w in range(0,w,w_interval): b = img[now_h:now_h + h_interval,now_w:now_w + w_interval,0] g = img[now_h:now_h + h_interval,now_w:now_w + w_interval,1] r = img[now_h:now_h + h_interval,now_w:now_w + w_interval,2] btz = np.mean(b) gtz = np.mean(g) rtz = np.mean(r) alltz.append(btz,gtz,rtz) result_alltz = np.array(alltz).T pca = mlpy.PCA() pca.learn(result_alltz) result_alltz = pca.transform(result_alltz, k=len(result_alltz)/2) result_alltz = reuslt_alltz.reshape(len(result_alltz)) return result_alltz
接着是输入与输出初始化:
#x和d样本初始化 train_x = [] d = [] sp_d = [] sp_d.append([0,0,1]) sp_d.append([0,1,0]) sp_d.append([1,0,0]) #读取图片 for ii in range(1,4): for jj in range(1,4): fn = 'ptest' +jj+'.jpg' pictz = readpic(fn) train_x.append(pictz) d.append(sp_d[ii-1]) myinput = np.array(train_x) mytarget = np.array(d)