PCA圖像特征提取算法:
PCA算法基於變量協方差矩陣對信息進行壓縮和處理,通常用於數據降維,可將它用於圖像矩陣降維,以降維后的矩陣為基礎提取圖像特征。當提取的圖像特征維度比較高時,為了簡化計算量以及存儲空間,需要對這些高維數據進行一定程度上的降維,並盡量保證數據不失真。此外,PCA算法還可以應用於圖像矩陣,它能找到變化大的維,去除掉那些變化不大的維度,這樣能更有效提取圖像明顯特征,便於后期識別算法並進一步加工,因為圖像特征組含有的不明顯的特征值將會影響識別的精度。
import numpy as np
import cv2
import mlpy
def readpic(fn): #返回圖像特征碼 fnimg = cv2.imread(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 = result_alltz.reshape(len(result_alltz)) return result_alltz
