用Python實現人臉檢測-2(數據預處理)

其實,這模塊的PCA部分其實可以不要的,只要對圖像如果預處理得當的話。

但還決定實現一個PCA,因為既然學到了,還是嘗試實現一個,裏面用到numpy模塊進行線性運算。

一般用以檢測的圖片,咱都決定先按比例變換到一個小圖(這裡固定為320的寬度,寬度自適應),當然同時還將像素數據轉換成8位灰度(相比較RGB,數據量少了2/3),然後再對這張小圖進行滑動窗口操作,一旦得到人臉的坐標數據,再按照比例恢復到原圖的坐標位置。這樣應該可以提升一定的效率。

至於使用PCA與否,關鍵還是看你自己的考慮吧,可能并不需要這個,也能得到很好的效率,因為即使20*20的方格裏,也有400個像素特徵,這或許還並不能算多。不過咱還是實現了,在400維降到2維,居然能擁有100%的方差保留。

圖像預處理使用PIL模塊,非常強大的圖像處理模塊,除了有些人扯效率不行之外,沒什麼好挑剔的,不過有很多python庫好像都是用c實現了,還能扯效率慢?

numpy模塊,為了做線性代數運算。如果自己實現一個svd和矩陣運算,感覺又複雜,而且效率肯定不如人家專門研究這個做出來的強,不過感興趣的也可以自己試試看,折騰一個出來,隨便告訴咱怎麼實現的也好啊~ 咱在這直接跳過這部分。

整個模塊,主要有這幾個功能,獲取圖像樣本、圖像縮放、PCA(平均標準化、均方差矩陣、u矩陣降維、樣本矩陣降維)。

實現的具體步驟,請翻一下咱撰寫的學習筆記-降維部分,也不算很難,除了沒自己實現的svd外,下面是自己寫的python代碼。

下圖,是在兩個20*20像素的圖像樣本下的k維矩陣(k=2)。

k dimensionality data matrix

從原來的400*2降到2*2,100%方差保留,壓縮效果。。。。不言而喻。

发表评论

电子邮件地址不会被公开。 必填项已用*标注