MATLAB 人脸识别矩阵(矩阵、相似度)
目錄
使用MATLAB矩陣運算進行有關人臉識別算法方案設計
1.運算過程:
(1)變量注釋
(2)計算結果及過程分析
2.源代碼:
3.附加部分
(1)條件改變
(2)運行結果
(3)改變條件后的源代碼
使用MATLAB矩陣運算進行有關人臉識別算法方案設計
(人臉識別是一個復雜問題,涉及到多種技術和算法,機器學習算法是當前人臉識別的關鍵算法。本示例用簡化方式,通過矩陣計算人臉比對過程,目的是練習圖像處理命令和矩陣計算方式)。建模:在人臉識別中,把人臉劃分為10個區域:臉部輪廓、眼睛、眉毛、鼻子、嘴巴、下巴、左臉、右臉、左耳、右耳(可以假設區域,通過圖像矩陣定位判斷)。每一個區域有22個特征,每一個特征數字化后的取值范圍是1-100之間。按照下面過程給出方案設計,具體數據自己可以合理假設。
(1)通過采集給出人臉特征基準矩陣,給出具體的基準矩陣Ax(每一個人都
有一個基準矩陣,給出至少10人的基準矩陣)。提示:矩陣Ax中,每一行表
示一個人臉區域特征向量(10個區域),每一列表示一個區域特征(22個特
征),特征值范圍1-100(可以隨機生成)。(A1,A2,…,A10,…)
?
(2)隨機采集到某一個人的人臉圖像,提取該人的人臉特征(可以通過假設
給出),給出一個具體的需要判斷的示例矩陣B,要求判斷B與Ax中哪一個人
的人臉特征相似?
?
(3)關鍵計算1:計算和判斷人臉特征的相似度,規則是:左耳、右耳的特 征的特征值誤差范圍是20%,左臉、右臉的誤差范圍是10%,其他特征的誤差 范圍是3%;如果特征值在誤差范圍內都認為是相似的。提示:運用矩陣減法 運算、矩陣邏輯比較運算,相似時為真true用1表示,不相似時為假false用0表
示。
?
(4)關鍵計算2:計算和判斷人臉區域的相似度,規則是每一個區域的22個 特征中,80%以上特征相似就認為區域相似。提示:運用向量計算、sum命令 。
?
(5)關鍵技術3:計算和判斷人臉相似度,規則是10個區域中,90%以上相似 ,就認為相似。提示:運用向量計算、sum命令。
1.運算過程:
(1)變量注釋
A:通過隨機數模擬生成人臉基準矩陣(通過100次迭代模擬100張人臉)
B:用作判斷標準的預設矩陣(通過隨機數生成)
C:A、B矩陣各元素的誤差(|A-B|./A)
line:存儲第j個區域的特征向量判斷結果的數組
a:存儲所有區域判斷結果的數組(若有區域滿足相似條件,則向數組中添加一個“1”元素)
flag:哨兵變量
i,j:迭代變量
工作區截圖:
(2)計算結果及過程分析
計算結果如下圖,顯示識別失敗。這個結果是合理的,因為從概率上來看,從隨機生成的矩陣中找出一個與示例滿足相似條件矩陣本來就是小概率事件。但可以通過查看變量來分析相似情況。
?
line截圖如下:
可以看到只有兩個特征符合相似條件。
并且a=[]為空數組,說明沒有符合相似條件的區域。所以100張隨機生成的人臉中沒有與預設人臉相似的。識別失敗。
計算結果全圖如下:
2.源代碼:
B=randi(100,10,22);flag=0; for i=1:100a=[];A=randi(100,10,22);C=abs(A-B)./A;for j=1:6line=C(j,:)<=0.03;if sum(line,2)>=22*0.8a=[a,1];endendfor j=7:8line=C(j,:)<=0.1;if sum(line,2)>=22*0.8a=[a,1];endendfor j=9:10line=C(j,:)<=0.2;if sum(line,2)>=22*0.8a=[a,1];endendif sum(a,2)>=9fprintf("第%d個矩陣識別成功\n",i);flag=1;end end if flag==0fprintf("識別失敗\n"); end至此,作業所要求的內容已經結束。
3.附加部分
在本作業外,為了驗證本程序的正確性,我們決定改變預設條件,充分執行該程序。
(1)條件改變
現改變如下條件:
將左耳、右耳的特征的特征值誤差范圍由20%調到100%;
左臉、右臉的誤差范圍由10%調到100%;
其他特征的誤差范圍由3%調到100%;
并將隨機生成的人臉特征矩陣數量由100調到10000個;
(2)運行結果
可以看到在新的判斷標準下,最終有5個矩陣滿足相似條件。
數組line截圖如下:
可以看到在最后一次迭代的臉部區域有15個特征符合判斷條件。
數組a截圖如下:
在數組a中有4個“8”元素,所以在最后一次迭代中有8個區域符合條件。該矩陣(第10000個矩陣)識別不成功,從運算結果可以看到只有第119個、第1871個、第6152個、第7194個、第7328個識別成功。所以程序運行結果是符合預設要求的。
(3)改變條件后的源代碼
B=randi(100,10,22);flag=0; for i=1:10000a=[];A=randi(100,10,22);C=abs(A-B)./A;for j=1:6line=C(j,:)<=1;if sum(line,2)>=22*0.8a=[a,1];endendfor j=7:8line=C(j,:)<=1;if sum(line,2)>=22*0.8a=[a,1];endendfor j=9:10line=C(j,:)<=1;if sum(line,2)>=22*0.8a=[a,1];endendif sum(a,2)>=9fprintf("第%d個矩陣識別成功\n",i);flag=1;end end if flag==0fprintf("識別失敗\n"); end總結
以上是生活随笔為你收集整理的MATLAB 人脸识别矩阵(矩阵、相似度)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机领域车牌识别,城市智慧停车的智能眼
- 下一篇: 数据结构-第二章(1)-线性结构