OpenCV – باسمه تعالی Solved

$ 29.99
Category:

Description

دید کامپیوتری نیمسال دوم 9311-9318 تمرین سری دوم مدرس : دکتر محمدزاده

توجه : در انجام تمارین استفاده از اینترنت و مشورت مجاز میباشد اما کپی کردن تمرین حتی یک قسمت مجاز نمیباشد و در صورت مشاهده نمره کل تمرین صفردر نظر گرفته خواهد شد. برای همه تمارین نیاز است که گزارش کامل همراه کدها تحویل داده شود و گزارش نیز نمره قابل توجهی دارد. در کدها هم به میزان نیاز حتما کامنت گذاری انجام شود .در صورتی که سوالی در مورد تمرین داشتید ، ترجیحا آن را در قسمت “پرسش و پاسخ” تمرین مطرح نمایید تا سوال دانشجویان دیگر نیز برطرف شود. در صورت نیاز با ایمیل های aref.einizade@yahoo.com یا parsa.rahimi.n@gmail.com نیز می توانید مکاتبه نمایید.
الف( تمارین کامپیوتری:
در این تمرین قصد داریم با استفاده از ویژگی های استخراج شده از HOG و طبقه بند SVM یک سیستم برای مکان یابی چهره انسان در یک تصویر پیاده سازی کنیم. برای این کار از پکیج OpenCV برای استخراج ویژگی های HOG و از پکیج Scikit-Learn برای طبقهبند SVM استفاده میکنیم.
1( آرگومان های تابع cv2.HOGDescriptor را مشاهده کنید و بیان کنید هرکدام بیانگر چه مشخصاتی هستند و چه رابطه ای با تعداد ویژگی های استخراج شده توسط HOG دارند. همچنین بیان کنید در مقاله پیوست هرکدام چه مقداری دارند؟
2( کدی بنویسید که ویژگی های HOG یک تصویر را استخراج کرده و در فایلی ذخیره کند.
3( در این تمرین قصد داریم با استفاده از HOGDescriptor ویژگی های مؤثری برای مکان یابی چهره انسان در عکس استخراج کنیم )همچنین می توانید به جای HOGDescriptor از متد feature.hog از پکیج skimage هم استفاده کنید(. به این منظور برای Patchهای حاوی چهره انسان از دیتاست fetch_lfw_people از پکیج sklearn.datasets استفاده خواهیم کرد .ابتدا با استفاده از دستو رات زیر پکیج sklean و skimage خود را upgrade کنید:
pip install –upgrade sklearn pip install –upgrade skimage
نام کلاس حاوی Patchهای چهره انسان را Positive می گذاریم. می توانید با اجرای خطوط زیر در محیط برنامه نویسی پایتون این دیتاست را دانلود کنید )توجه کنید که اتصال اینترنت هنگام اجرای این خطوط باید برقرار باشد ،حجم تقریبی این دیتاست 222 مگابایت است:(
from sklearn.datasets import fetch_lfw_people
faces = fetch_lfw_people)(
positive_patches = faces.images

برای تشکیل Patchهای کلاس Patch( Negativeهای حاوی هر چیزی غیر از چهره انسان( از داده های بخش Data از پکیج Skimage استفاده می کنیم. با اجرای خطوط زیر نیز )مانند قسمت قبل( می توانید به این تصاویر دسترسی داشته باشید:
from skimage import data imgs_to_use = [‘camera’, ‘text’, ‘coins’, ‘moon’, ‘page’, ‘clock’, ‘immunohistochemistry’,
‘chelsea’, ‘coffee’, ‘hubble_deep_field’] images = [color.rgb2gray(getattr(data, name)()) for name in imgs_to_use]
مشاهده می کنید که از کلاس های مختلفی برای تشکیل کلاس غیر از چهره انسان) Negative( استفاده شده است .
برای اینکه عملکرد مدل شما بالاتر برود می توانید کلاس های بیشتری را نیز در اینجا فراخوانی کنید.
توجه کنید که در دیتاست بالا )داده های Data از پکیج Skimage( شما به طور مستقیم به Patchهای مفید دسترسی پیدا کرده اید، در حالی که در داده های کلاس Negative شما به تعدادی از عکس با سایزهای مختلف دسترسی دارید که برای طبقه بندی درست، نیاز است به میزان کافی از این تصاویر Patchهای معنادار )هم سایز با Patchهای کلاس Positive( استخراج کنید. به این منظور و برای استخراج این Patchهای معنادار می توانید از متد PatchExtractor از پکیج زیر استفاده کنید:
from sklearn.feature_extraction.image import PatchExtractor
با توجه به اینکه سایز این تصاویر متغیر است برای اینکه مطمئن باشید در Scale مناسبی از این تصاویر این Patchها را استخراج می کنید، پیشنهاد می شود از 3 مورد Scale=0.5, 1.0 , 2.0 استفاده کنید )می توانید Scaleهای متنوع تری را هم انتخاب کنید(. به منظور پیاده سازی این توضیحات می توانید از خطوط زیر استفاده نمایید:

بنابراین تا حالا 2 کلاس Positive و Negative حاوی Patchهای معنادار داریم. در ادامه باید با استفاده از HOGDescriptor از این Patchها ویژگی اسخراج کرده و به این ترتیب دسته ویژگی برای داده های کلاس Positive و
Negative ساخته می شود. در قسمت بعدی هدف آموزش طبقه بند SVM بر روی داده های این 2 کلاس می باشد.
4( طبقه بند SVM در اینجا یک طبقه بند باینری است که با استفاده از آن قصد داریم Patchهای چهره انسان با غیر ازچهره انسان را تشخیص دهیم. این طبقه بند بین نمونه های مثبت و منفی یک مرز بهینه به دست میآورد. نمونه هایمثبت در این مساله داده ها شامل ویژگی های استخراج شده از Patchهای چهره انسان و نمونه های منفی شامل Patchهای غیر از چهره انسان است. در حقیقت نیاز است که ما در این روش مرز بین دو ناحیه را به خوبی پیدا کنیم .
برای استفاده از طبقه بند نیاز است که هرکدام از داده های ما برچسب داشته باشند بنابراین برای هرکدام از داده های دارای چهره انسان برچسب 1 و در غیر اینصورت برچسب صفر ذخیره نمایید.
5( در این قسمت 02 درصد کل داده هارا به عنوان داده آموزشی در نظر گرفته و با استفاده از متد SVC در پکیج sklearn مدل را آموزش دهید .سپس مدل خود را بر روی داده های تست )22 درصد باقیمانده از داده ها( ارزیابی کنید و دقت را گزارش نمایید. برای بهتر شدن عملکرد مدل ابتدا با استفاده از متد GridSearchCV پارامترهای این طبقه بند را روی داده های آموزشی بهینه کنید و سپس مدل خود را بر روی داده های تست ارزیابی کنید.
6( در حال حاضر مدلی داریم که قادر است برای پنجره های با سایز 44*62 وجود یا عدم وجود چهره انسان را تشخیص دهد. برای تشخیص چهره انسان در تصویر در سایر سایزها )تصاویر با سایز دلخواه( لازم است ترتیبی اتخاذ کنیم که سایزشان به گونه ای تغییر کند که چهره ها در آن تصاویر نیز با سایز این پنجره ها همخوانی داشت باشد. سپس پنجره های اسکن شده موجود در تصویر را به مدل SVM آموزش دیده می دهیم. این مراحل را بر روی تصاویر موجود در پوشه Test_images انجام داده و کدها به هراه نتایج را به صورت زیر )تصویر نمونه( گزارش کنید. به این کار تشکیل Image Pyramid یا هرم عکس گفته میشود. با استفاده از این روش چهره انسان در داده های پوشه multiscale را شناسایی کنید و دور آنها را با مستطیل مشخص نمایید. ) برای تشکیل هرم تصویر میتوانید از متد pyramid_gaussian در پکیج skimage استفاده نمایید(
نکته مهم: هنگام اعمال طبقه بند SVM بر روی تصاویر با سایز دلخواه، ممکن است این طبقه بند چندین مستطیل را در تصویر اصلی حاوی چهره انسان تشخیص دهد. به مانند تصویر نمونه زیر:

در این حالت می بایست با استفاده از Score خروجی طبقه بند، با اعمال آستانه ای معقول، ابتدا Patchهایی که با احتمال کمی عضو کلاس Positive تشخیص داده شده اند را حذف کرد. سپس با استفاده از متد Non.Maximum.Suppression از پکیج Tensorflow، مستطیل های همپوشان به دست آمده را به یک مستطیل باسایز معقول تبدیل کرد. البته برای رسیدن به این منظور راه های دیگری نظیر استفاده از متد heat map و … نیز وجوددارد که استفاده از متدهایی علاوه بر Non.Maximum.Suppression دارای نمره امتیازی خواهد بود.
در نهایت تصویر نمونه بالا باید به صورت زیر در آید:

توجه مهم: با توجه به پارامترهای آزاد زیاد این مسئله، ممکن است به آوردن جواب ایده آل بر روی تصاویر تست سخت باشد. بنابراین تمرکز اصلی خود را بر روی اجرا کردن گام به گام مراحل بالا قرار دهید؛ زیرا نمره دهی اصلی بر اساس جواب ایده آل نهایی نخواهد بود بلکه قسمت عمده نمره را اجرای درست مراحل بالا تشکیل می دهد.

ب( تمارین پژوهشی/ تئوری:
1. با مراجعه به این مقاله توضیح دهیدکه Face Alignment چیست و چه کاربردی دارد. به طور کلی برای رسیدن به هدف Face Alignment چه روش هایی وجود دارد )دو تا سه مورد دیگر مانند مقاله اشاره شده را به طور خلاصه ذکر کنید(.
2. در مورد Edge Preserving Smoothing تحقیق کنید دو مورد از متد های این روش را به طور خلاصه شرح دهید) . این روش به طور کلی باعث می شود که تصویر در مکان هایی که لبه نیستند نرم شود(. عملکرد این روش را به طورکلی می توان در شکل های زیر دید:

3. ماتریس سمت راست از کانوالو کردن یک فیلتر 3*3 ) با مرکزیت وسط( با ماتریس سمت چپ حاصل شده است .
مقادیر پارامترهای فیلتر و همچنین نوع Border Handling را مشخص کنید. )راهنمایی: Border Handling استفاده شده یکی از BorderType های این لینک است(.

4. نشان دهید عملگر لاپلاسین که به صورت زیر تعریف میشود ایزوتروپیک است )تغییر ناپذیر با دوران(

5. دو تصویر f(x,y) و g(x,y) دارای هیستوگرام hf و hg هستند. شرایطی را تعیین کنید که بتوان هیستوگرام عبارات زیر را بر حسب hf و hg بدست آورد: الف(f(x,y) + g(x,y)
f(x,y) – g(x,y) )ب f(x,y) * g(x,y) )ج f(x,y) / g(x,y) )د
توضیح دهید در هر مورد هیستوگرام به چه صورت بدست میآید.

Reviews

There are no reviews yet.

Be the first to review “OpenCV – باسمه تعالی Solved”

Your email address will not be published. Required fields are marked *