MATLABによる顔認証の実装
1. 顔認証技術の詳細
一般に、顔認識システムは、画像抽出、顔位置特定、グラフィックス前処理、顔認識(本人確認または身元確認)を含む。システムへの入力は、通常、未同定の顔を含む1枚の画像または一連の画像、および顔データベース内の既知の身元または対応するコードを持つ顔の多数の画像であり、その出力は認識すべき顔の身元を示す一連の類似度スコアである。
2. 顔認証技術の幅広い応用範囲
ある技術の導入や発展は、人類の緊急なニーズと密接に関係しており、社会経済や科学技術の急速な発展により、人類はセキュリティ(個人の安全、プライバシー保護などを含む)にますます関心を寄せるようになっています。顔認証の重要なアプリケーションの1つは、人間のID認識です。一般に、人物の識別方法には3つのタイプがあります。
<ブロッククオート
1. IDカード、運転免許証、家の鍵、印鑑などの文書や資格証明書などのIDアイテム。
2. 各種パスワード、パスフレーズ、暗号などの特別な知識;
3. ヒューマンバイオメトリクス
顔、指紋、手の形、掌紋、虹彩、DNA、署名、音声など、人間の生理的・行動的なさまざまな特徴を含んでいる。は従来の本人確認技術で、利便性とスピードが特徴ですが、セキュリティが低く、偽造しやすい、盗まれやすいという致命的な欠点があります。特殊な物品は紛失、盗難、コピーされる可能性があり、特殊な知識は忘れられ、混乱し、漏えいする可能性がある。これに対し、生体特徴は、自己安定性が強く、個人差のある人間の本質的な性質を利用しているため、最も理想的な本人確認の根拠となるものです。上記のような比較的ユニークな生体的特徴に基づき、コンピュータ技術と組み合わせることで、DNA認識技術、指紋認識技術、虹彩認識技術、音声認識技術、顔認識技術など、人間の生体的特徴を利用した数多くの識別技術が開発されている。生体認証技術は前世紀に開発され、その中でも指紋認証技術は成熟しているが、顔認証技術の研究はまだ初期段階にある。指紋や虹彩、掌紋などの識別技術は、被識別者の協力が必要であり、また、識別技術によっては複雑で高価な機器の入手が必要である。顔認証は、特別な取得機器を必要とせず、既存の写真やカメラで遠距離から撮影することができ、システムコストも低く抑えることができます。そして、自動顔認証は、本人が意識することなく本人確認識別作業を完了することができ、対テロ活動において非常に重要な意義を持っています。このように顔認証技術は多くの利点があることから、最も応用範囲の広い有望なバイオメトリクス認証技術の一つとなっています。
4. 顔解析のためのmatlabメソッドの紹介
顔認識手法の一つ:画像から顔を探し、枠に丸を付ける
一般的な手順としては、RGB画像の取得 ->画像処理 ->顔認識となります。
function Rer=Re()
%Rer=0;%%%0 is the initial value, which will change to 1, 2, 3, 4 if the recognition is successful
I=imread('face.jpg');%%The path where the recognized image is stored, use the absolute path!
%%%%%%%%%%%%%%%%% algorithm encapsulation, can be seen as a black box %%%%%%%%%%%%%%%%
O=rgb2ntsc(I);
G=O(:,:, 2);
[m n]=size(G);
U=zeros(m,n);
for i=1:m
for j=1:n
if G(i,j)>0.03&&G(i,j)<0.16
U(i,j)=1;
end
end
end
Rer=1;
sr=strel('disk',6);%% create disk radius (create structure element)
C=imclose(U,sr);
L=bwlabel(C);
B=regionprops(L,'area');
Se=[B.Area];
Sm=max(Se);
if Sm>m*n/27 %%%%% Every program goes through this and ends at line 96, failing to recognize the face
B1=bwareaopen(C,Sm);
k_y1=m;k2=m;l2=n;
for i=1:m
if any(B1(i,:))==1
k_y1=i;
break
end
end
for i=k_y1:m
if B1(i,:)==0
k2=i;
break
end
end
for j=1:n
if any(B1(:,j))==1
l_y1=j;
break
end
end
for j=l_y1:n
if B1(:,j)==0
l2=j;
break
end
end
k_y=k2-k_y1;
l=l2-l_y1;
if k_y>.5*l&&k_y<3*l %%%%% second layer if, failed to recognize the face
I1=imcrop(B1,[l_y1 k_y1 l .4*k_y]);
[n1 m1]=size(I1);
L1=bwlabel(I1);
E=regionprops(L1,'area');
Si=[E.Area];
Sm=max(Si);
if Sm/(n1*m1)>.3
B2=bwareaopen(I1,floor(.5*Sm));
g_y1=m1;
g2=m1;
for j=1:m1
if any(B2(:,j))==1
g_y1=j;
break
end
end
for j=g_y1:m1
if B2(:,j)==0
g2=j;
break
end
end
g=g2-g_y1;
figure;
imshow(I,'border','height','InitialMagnification','fit');
hold on
h1=line([l_y1+g_y1,l_y1+g_y1+g],[k_y1,k_y1]);
h2=line([l_y1+g_y1+g,l_y1+g_y1+g],[k_y1,k_y1+1.1*g]);
h3=line([l_y1+g_y1+g,l_y1+g_y1],[k_y1+1.1*g,k_y1+1.1*g]);
h4=line([l_y1+g_y1,l_y1+g_y1],[k_y1+1.1*g,k_y1]);
h=[h1 h2 h3 h4];
set(h,'Color',[1 0 0],'LineWidth',3);
gfframe=getframe(gcf);
gffim=frame2im(gfframe);
imwrite(gffim,'recg_result.jpg','jpg'); %%%% store the picture named, in order to save the picture painted red frame
Rer=1;
%fid=fopen('re.txt','w');
%fprintf(fid,'%d',Rer);
%fclose(fid);
else%%%failed to meet the last if judgment, cannot recognize the face
figure;
imshow(I);
imwrite(I,'face_result.jpg','jpg'); %%%% store image naming
Rer=2;
%fid=fopen('re.txt','w');
%fprintf(fid,'%d',Rer);
%fclose(fid);
end
else
figure;
imshow(I);
imwrite(I,'face_result.jpg','jpg'); %%%% store image naming
Rer=3;
%fid=fopen('re.txt','w');
%fprintf(fid,'%d',Rer);
%fclose(fid);
end
else
figure;
imshow(I);
imwrite(I,'face_result.jpg','jpg'); %%%% store image naming
Rer=4;
%fid=fopen('re.txt','w');
%fprintf(fid,'%d',Rer);
%fclose(fid);
end
end
顔認識方法1効果
顔認識その2:入力された顔写真から写っている人物を特定する
おおよその手順は、RGB画像の取得 -> グレースケール画像への変換 -> 画像処理 -> 顔認識です。
clear all
clc
%Get the original image
i=imread('face.jpg');
I=rgb2gray(i);
BW=im2bw(I); %convert grayscale image to binary image using threshold value transformation method
figure(1);
imshow(BW);
%Minimize background
[n1 n2]=size(BW);
r=floor(n1/10);
c=floor(n2/10);
x1=1;x2=r;
s=r*c;
for i=1:10
y1=1;y2=c;
for j=1:10
if(y2<=c || y2>=9*c) || (x1==1 || x2==r*10)
loc=find(BW(x1:x2,y1:y2)==0);
[o p]=size(loc);
pr=o*100/s;
if pr<=100
BW(x1:x2,y1:y2)=0;
r1=x1;r2=x2;s1=y1;s2=y2;
pr1=0;
end
imshow(BW);
end
y1=y1+c;
y2=y2+c;
end
x1=x1+r;
x2=x2+c;
end
figure(2)
subplot(1,2,1);
imshow(BW)
title('Image processing');
% face recognition
L=bwlabel(BW,8);
BB=regionprops(L,'BoundingBox');
BB1=struct2cell(BB);
BB2=cell2mat(BB1);
[s1 s2]=size(BB2);
mx=0;
for k=3:4:s2-1
p=BB2(1,k)*BB2(1,k+1);
if p>mx && (BB2(1,k)/BB2(1,k+1))<1.8
mx=p;
j=k;
end
end
subplot(1,2,2);
title('Face Recognition');
imshow(I);
hold on;
rectangle('Position',[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j)],'EdgeColor','r')
顔認証方法2つの効果
関連
-
[解決済み】2つのベクトル間の角度 matlab
-
[解決済み] 第一差分フィルタ
-
[解決済み] セルコンテンツから非セル配列オブジェクトへの代入
-
[解決済み] 部分ピボッティングによるLU分解 Matlab
-
[解決済み] Matlabによる最急降下法の実装
-
[解決済み] 減衰比一定の直線と根元の軌跡との交点を求めるためのrlocfindの代替プログラム(Matlab
-
[解決済み] mnrfitを用いたmatlabでのロジスティック回帰
-
[解決済み] MATLABで関数のパラメータにデフォルト値を設定するにはどうすればよいですか?
-
[解決済み] MATLABによる平均二乗変位(msd)の算出
-
matlab はエラーを報告します Index exceeds the number of array elements (1).
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] MATLABで軸の制限をグローバルに設定し、プロットされたデータの最小値と最大値にする方法は?
-
[解決済み] Matlabのリスト理解
-
[解決済み] Matlabのstrcat関数が空白を含んでいる場合のトラブル
-
[解決済み] Matlabでcorr2関数を説明する
-
[解決済み] MATLABで分数を10進数に変換する【重複】。
-
[解決済み] MATLABのパスに影をつける」とはどういう意味ですか?ファイル内で行うにはどうしたらいいですか?
-
[解決済み] Matlab - 収束率を計算する
-
[解決済み] Matlabでforward inputnames?
-
[解決済み] ホールドオンでセミログプロット
-
[解決済み] ode45 が T 軸上で正確に 0.01 のステップを取るように強制するにはどうすればよいですか?