算法描述:
神經網絡圖像分類算法首先通過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)
