梁福林 馮生強 馬思思 石華 唐瓊
摘要:本文利用圖像識別技術的模式識別,設計了一種用于識別衣物品牌與型號的基于Android平臺的物品識別軟件。其在結構上總共分兩大模塊,即客戶端板塊和服務器板塊,用戶通過客戶端拍取圖片,將圖片上傳到服務器上,服務器自動截取圖片,通過3輪識別,找到最相似的圖片。
關鍵詞:模式識別;圖像識別;Android平臺
中圖分類號:G642 文獻標志碼:A 文章編號:1674-9324(2015)39-0238-02
一、引言
隨著手機的發展,人們的生活也變得越來越便捷,但是在某些方面人們仍然會會遇到困難,比如說走在街上,看到街邊行人身上漂亮的衣服,不知道其品牌,更不知道在哪兒能夠買到。有些時候人們會選擇一種方式,即先把別人穿的衣服拍下來,然后再去網上查找,或者去實體店查找。但是在偌大的市場上找到一件相似的衣服如同大海撈針。所以急需要物品識別的軟件產生,幫助人們解決尋找喜歡的物品的難題。
二、系統的設計與實現
1.功能設計。本文所設計的基于Android平臺的物品識別軟件主要包括客戶端和服務器兩部分??蛻舳酥饕撠煂σ路恼詹l送圖片給服務器,服務器則負責接收數據后對圖像進行識別,并將識別出的衣服的品牌和型號返還給客戶端。
在Android客戶端采用的C/S結構,如圖1所示??蛻舳说淖饔檬谦@取圖片并發送給服務器。服務器的作用是獲取客戶端發送的圖片,分別經過三輪的識別,得到圖像的信息。用戶與客戶端的交互是通過Activity類完成的。服務端與數據庫相連,實現圖像的讀取與識別。Android客戶端與服務器端的數據交換是基于Socket實現的。
用戶使用本文所設計的物品信息查詢系統時,只需打開軟件,點擊識別,軟件就可自動對圖片進行截圖,并將所截圖片發給識別模塊,分別進行三輪識別,具體的識別模塊流程如圖2所示。
2.系統的關鍵技術的實現。(1)自動截圖的實現。據統計,有90%的人物圖片的背景與目標圖像的灰度值存在很大的不同,所以提取截圖就是依托這種情況來得到目標圖像的。具體實現如下:①把圖像用灰度數組表示。創建一個行和列都和圖像相同的整型的灰度數組,從左到右、從上到下依次掃描原圖像的像素點,通過提取灰度值得函數,得到每一個像素點的灰度值,存進數組中。②得到平均灰度值。計算灰度平均值可以通過式(1)計算。
其中,size1為灰度數組的總的列數,size2為灰度數組總的行數,p[i][j]代表第i列,第j行的圖像的灰度值,r為平均灰度值。③得到二值數組。求二值數組的目標是讓背景取值為0,目標圖像的取值為1。首先算出中間部分的平均灰度值,整幅圖的平均灰度值大于中間部分的平均灰度值則令t1=0,t2=1;如果平均灰度值小于中間部分的平均灰度值則令t1=1,t2=0。建立行數,列數和灰度數組行數和列數相同的二值數組,從左到右,從上到下的掃描灰度數組,比較灰度值和整幅圖的平均灰度值大小,如果灰度數組的灰度值大于平均灰度值,則把二值數組對應灰度數組的位置的值設置為t1,否則設置為t2。④求取截圖的開始坐標和結束坐標。從左到右求取每一列的灰度數組的1占有每一列的長度的比例,如果比例大于10%則X1的值設置為列值;從右到左求取每一列的灰度數組的1占有每一列的長度的比例,如果比例大于10%則X2的值設置為列值;從上到下求取每一行的灰度數組的1占有每一列的長度的比例,如果比例大于60%則Y1的值設置為行值;掃描的終止位置離底部的距離不能超過(X2-X1)*3/2。如果描到這個位置,那么就設置Y1的值為這個行值。令底部的行值為Y,如果(Y-Y1)>(X2-X1)*3/2,則Y2=Y1+(X2-X1)*3/2,否則Y2=Y。⑤截圖。上一步得到了開始坐標(X1,Y1)和結束坐標(X2,Y2),可以創建出一個圖像數組A[X2-X1][Y2-Y1],把原圖在開始坐標和結束坐標內的圖像數組存進該數組中,就得到了截圖。(2)第一輪識別:顏色識別。本節主要講述怎么通過識別顏色,來實現第一輪數據的獲取。①獲取圖片。拍下的照片先把它轉化為Android的Bitmap類,再把圖片發送至服務器。服務器獲取圖片后先自動截圖,獲取目標圖片。再通過BufferedImage類的getRGB()方法獲取圖像的像素數組。②獲取圖片的顏色二維數組。先做預處理,把顏色的3個向量的每一個向量分作6個組,得到216種顏色,用肉眼去區分不同的顏色,并按紅橙黃綠青藍紫和同一顏色顏色的深淺排序。把每一種顏色都映射到這一維數組上,實現3維數組向一維數組轉換。以得到整張圖片的顏色數組。③提取平均顏色并識別。通過得到的圖像的顏色數組去算出顏色平均值,再與數據庫中的顏色平均值所比較,得到與圖像顏色平均值最近的前10%的數據。(3)第二輪識別的實現。①計算圖片的每一種顏色的比例。先掃描每一張圖片的顏色數組,分別記錄每一個顏色出現的次數。用每一個顏色出現的次數除以像素點總數,得到每一種顏色的比例。②查看圖片相似度。
size為顏色的總數,a[t]代表圖片a顏色下標為t的顏色占整幅圖顏色的比例,b[t]代表圖片b顏色下標為t的顏色占整幅圖的顏色比例,r為相似度。③得到相似結果。根據公式(2)算出第一輪掃描得到的圖像中的所有圖像的相似度,并從小到大排序,取排名前10%的圖像進行第三輪識別。(4)第三輪識別的實現。第三輪識別和第二輪很相似,第三輪識別是取被比較圖的3個固定位置的圖像塊,即截取3個局部圖像,算出其每一種顏色的比例,再與第二輪識別得到的圖像的對應位置(相對位置和被比較圖的3個局部圖像相對位置相同)相比較,得到這3個位置分別的相似度依托以下公式計算出相似度。
三、測試結果與分析
對35張樣本,129張樣本的測試圖片做測試,匹配正確120張,錯誤9張,正確率93.02%。
對35張樣本,60張用手機拍的測試圖片,匹配正確10張,錯誤50張,正確率16.67%。
第一種測試失敗的原因經分析如下:
1.部分圖像截圖不正確,背景白色和衣服白色的圖片容易截取錯誤。
2.肉眼劃分顏色的細度不夠,導致部分顏色會出現深和潛匹配效果相同。
第二種測試失敗的原因分析如下:
1.不同攝像頭廠商采光,處理顏色的技術不同,導致有些物品拍攝下來,顏色變化太大。
2.對照片拍攝時,照片反光太明顯,引起顏色變化太大導致識別失敗。
解決方案:
1.設計一種攝像頭轉換程序,即分析兩個攝像頭拍攝物品顏色的區別,把本地攝像頭拍攝的照片通過圖像處理,處理為種本攝像頭的效果圖片,再查詢數據庫(有待研究)
2.依靠背景的顏色特點,識別是否有燈光的影響,然后再對實際的物體做圖像處理,去除燈光的影響,再查詢數據庫。
四、總結
在同一攝像頭,同一環境下拍照同一個依托顏色和明顯的花紋區分的物品的圖像識別基本上正確。以后的圖像研究可以從不標準圖片往標準圖片上靠攏,識別率會高很多。只是本軟件還存在一些問題沒有解決,如環境問題和攝像頭效果問題等,希望讀者可以與我們一起分析。
參考文獻:
[1]張洪剛,陳光,郭軍.圖像處理與識別[M].北京郵電大學出版社,2006.
[2]數字圖像處理:Java語言算法描述[M].北京:高等教育出版社,清華大學出版社,2004.
[3]孫夑華.數字圖像處理:Java編程與實驗[M].北京:機械工業出版社,2011.