توضیحات
پروژه آموزشی شناسایی الگو برای کاهش ابعاد ویژگی ها و تشخیص چهره با متلب
در این تمرین هدف کاهش ابعاد ویژگی ها ودر نهایت تشخیص چهره با استفاده از دیتا بیس داده شده می باشد. این دیتا بیس شامل 20 تصویر از 18 فرد مختلف است که در حالات مختلف چهره گرفته شده است.
دراین پروژه از هر فرد 10 تصویر را به عنوان آموزش در نظر گرفته ایم. به منظور کاهش ابعاد ماتریس کواریانس داده های ستونی شده هر تصویر را بدست می آوریم وپس از تعیین بردارها و مقادیر ویژه ، 10 بردار ویژه با مقادیر ویژه بزرگتر را به عنوان بردارهای ویژه بهتر انتخاب کرده و در یک ماتریس کنار هم می گذاریم.
ماتریس تشکیل شده را ماتریس انتقال می نامیم. که با ضرب این ماتریس درهر بردار ستونی تصویر ورودی، برداری با ابعاد 10 ایجاد خواهد شد که در مقایسه با ابعاد بزرگ بردار اول که 4096 می باشد، این بردار ابعاد کوچکتری دارد.
در ادامه به توضیح کدها و نتایج می پردازیم؛ توضیح هر قسمت از کد، دقیقا بعد از هر کد آورده شده است.
name{1}=[‘and’;’ant’;’chr’;’dah’;’dav’;’den’;’ian’;’lib’;’pat’;’sar’;’ste’;’stu’;’jer’;’tom’];
name{2}=[‘glen’;’john’;’mike’;’will’];
data=cell(1,18);
دراین قسمت نام های افراد را در دو گروه ذخیره می کنیم تا بتوانیم تصاویر مربوط به هر شخص را بخوانیم. افراد به دوگروه اسامس 3 حرفی و 4 حرفی تقسیم میشوند( برای راحتی نوشتن کد)
cnt=0;
for k=1:2
for i=1:size(name{k},1)
cnt=cnt+1;
for j=1:20
data{cnt}{j}=imread([‘grimace’,num2str(name{k}(i,:)),”,num2str(name{k}(i,:)),’_exp.’,num2str(j),’.jpg’]);
end
end
end
دراین قسمت هر 20 تصویر مربوط به هر شخص را از پوشه مخصوص به خود خوانده و در متغیر سلولی data ذخیره می کنیم.
for i=1:18
for j=1:20
x=rgb2gray(data{i}{j});
data{i}{j}=imresize(x,[64,64]);
end
end
دراین قسمت تصاویر ابتدا به حالت خاکستری تبدیل شده و سپس سایز آنها را به 64*64 تغییر می دهیم.
cnt=1;
mat=zeros(4096,180);
for i=1:18
for j=1:10
mat(:,cnt)=reshape(data{i}{j},64*64,1);
cnt=cnt+1;
end
end
تشکیل ماتریس حاوی داده های آموزشی mat که سایز آن 180*4096 است.
cov_mat=zeros(4096,4096);
mean_mat=(mean(mat’))’;
for i=1:180
cov_mat=cov_mat+(mat(:,i)-mean_mat)*(mat(:,i)-mean_mat)’;
end
تشکیل ماتریس کواریانس cov_mat
[e_vec,e_val]=eig(cov_mat/180);
e_val=diag(e_val);
[v,idx]=sort(abs(e_val),’descend’);
تعیین بردارها و مقادیر ویژه و مرتب سازی مقادیر و بردارها بر اساس انداره مقادیر ویژه از بزرگ به کوچک
eig_number=10;
e=zeros(4096,eig_number);
for i=1:eig_number
e(:,i)=e_vec(:,idx(i));
end
تعیین تعداد بردارهای ویژه کافی برای کاهش ابعاد و تشکیل ماتریس انتقال e
a=e’*(mat);
ضرب کردن ماتریس انتقال
مرحله آزمایش:
cnt=1;
for i=1:18
for j=11:20
x=double(data{i}{j});
x=reshape(x,64*64,1);
y=e’*x;
p=repmat(y,1,180);
dist=sqrt(sum(((p-a).^2)));
[mn,id]=min(dist);
cl=ceil(id/10);
class(cnt)=cl;
cnt=cnt+1;
end
end
تعیین هر تصویر از تصاویر باقی مانده هر فرد به عنوان داده ورودی و کاهش بعد آن و سپس دسته بندی آن و تعیین تعلق این تصویر به یکی از 18 نفر
for i=1:18
cc((i-1)*10+1:i*10,1)=i*ones(10,1);
end
precision(g)=100*sum(class==cc)/180;
تصاویر پروژه آموزشی شناسایی الگو برای کاهش ابعاد ویژگی ها و تشخیص چهره با متلب:
نتایج 10 بردار ویژه اول
منحنی دقت بر حسب تعدادبردارهای ویژه یا تعداد ابعاد کاهش یافته که برحسب درصد است.
مشخص است که هر چه ابعاد بردارهای کاهش یافته با بردارهای ویژه بیشتری تخمین زده شود ، دقت نیز افزایش می یابد.
نکات قابل ذکر:
- پروژه آموزشی شناسایی الگو برای کاهش ابعاد ویژگی ها و تشخیص چهره با متلب توسط کارشناسان گروه ۱.۲.۳ پروژه پیاده سازی گردیده و به تعداد محدودی قابل فروش می باشد.
- فایلهای پروژه + راهنما به صورت کامل پس از خرید فایل بلافاصله در اختیار شما قرار خواهد گرفت.
نقد و بررسیها
هنوز بررسیای ثبت نشده است.