استخراج ویژگی از تصویر با PCA و کلاس بندی تصاویر با SVM (قسمت دوم)

استخراج ویژگی از تصویر با PCA و کلاس بندی تصاویر با SVM (قسمت دوم)

در مطلب قبلی (کاهش بعد سیگنال و تصویر با PCA)، نحوه محاسبه مولفه های اساسی یک سری داده و همچنین کاهش بعد داده ها شرح داده شد. در این پست می خواهم نحوه استفاده از روش تجزیه به مولفه های اساسی برای استخراج ویژگی و برای کلاس بندی تصاویر با مثال در متلب توضیح دهم. در این مثال کلاس بندی برای دو کلاس صورت گرفته است.

 

استخراج ویژگی ها از تصاویر

استخراج ویژگی با روش PCA در واقع همان کاهش بعد تصویر می باشد. برای مثال اگر یک تصویر 50در50 داشته باشیم، این تصویر 2500 بعد منحصر به فرد دارد، در واقع هر پیکسل یک ویژگی محسوب می شود. در صورتی که بخواهیم بدون کاهش بعد، کلاس بندی را انجام دهیم لازم است تا تمام 2500 بعد هر تصویر با تصویر مرجع مقایسه شود، که کار بسیار پرمحاسبه و زمان گیری است و معمولا عملی نیست. بنابراین لازم است تا با تکنیک هایی این تعداد بعد (ویژگی) را کاهش دهیم، در واقع تنها ویژگی هایی را نگه داریم که تصاویر مربوط به دو کلاس در آن ویژگی تفاوت زیادی می کنند. بنابراین با توجه به توضیحاتی که در پست قبلی زده شد، می توان یک تصویر را به صورت یک سیگنال نوشت و از PCA برای کاهش بعد استفاده کرد. برای اینکار تمام پیکسل های تصویر را به ترتیب پشت سر هم قرار می دهیم تا یک بردار بدست آید. بنابراین برای هر تصویر یک بردار ویژگی به اندازه 2500 داریم. سپس با اعمال PCA و مشخص کردن تعداد دلخواه بعد نهایی، ویژگی های جدید را بدست می آوریم. اینکه تعداد بعد نهایی چه مقدار باشد دست خودمان هست و باید با آزمون و خطا به بهترین عدد رسید.در اینجا تعداد 10 را انتخاب کرده ایم، یعنی 2500 بعد را به 10 کاهش می دهد.  کدهای مربوط در انتهای مطلب اورده شده است.

ماشین بردار پشتیبان (SVM)

در نهایت لازم است تا با روش کلاس بندی عمل آموزش و کلاسبندی را انجام دهیم. در اینجا از کلاسبند SVM ( ماشین بردار پشتیبان) استفاده می کنیم. نحوه عملکرد SVM از حوصله این بحث خارج است؛ تنها اشاره ای به نحوه از استفاده از دستورات متلب این SVM خواهم کرد.

در این روش ابتدا لازم است تا آموزش صورت بگیرد. آموزش به این معنی است که تعداد ویژگی مربوط به کلاس یک و کلاس دو به تابع می دهیم، و الگوریتم براساس برچسب گذاری های صورت گرفته پارامترهای خود را اپدیت می کند. سپس برای کلاسبندی داده های بدون برچسب را به الگوریتم می دهیم و آن به صورت اتوماتیک کلاس مربوط را مشخص می کند.

برای آموزش svm در متلب از تابع زیر استفاده می کنیم:

SVMSTRUCT = svmtrain(TRAINING, Y)

به صورتی که TRAINING داده های ورودی برای آموزش است که هر سطر مربوط به یک داده (یک مشاهده ) و ستون ها بعد داده را نشان می دهد. Y که به صورت یک بردار عمودی است، شماره کلاس را مشخص می کند.

حال برای کلاسبندی داده های جدید، با استفاده از دستور زیر عمل کلاسبندی را انجام می دهیم:

GROUP = svmclassify(SVMSTRUCT, TEST)

در اینجا SVMSTRUCT درواقع پارامترهای آموزش دیده ای است که با دستور قبلی ایجاد شده است و TEST نشان دهنده داه های ورودی است. GROUP شماره کلاس هر داده را که با استفاده از SVM پیش بینی شده است نشان می دهد.

پس از اجرای کد میزان عملکرد صحیح کلاسبندی نشان داده می شود.

در مثال ما در مجموع 120 تصویر یعنی از هر گروه 60 تصویر فراخوانی می کنیم. 40 تصویر از هر گروه برای آموزش (مجموعا 80 تصویر) و 20 تصویر از هر گروه برای تست استفاده می شود. تصاویر همراه با کد در زیر آمده است.

>>  دانلود تصاویر مربوط به این پست

 

در صورت استفاده از مطالب این سایت لطفا به سایت ارجاع دهید
  1. سلام اون کد هایی که گفتید برای اس وی ام در کجا استفاده شدهSVMSTRUCT = svmtrain(TRAINING, Y
    GROUP = svmclassify(SVMSTRUCT, TEST)
    چرا توی کد اصلیتون نی

دیدگاه شما

( الزامي )

(الزامي)