این توصیف کننده، از بسیاری جهات شبیه SIFT هست، با این تفاوت عمده که در SIFT ما در ابتدا یک سری نقاط به نام Interest Point (به کمک Haris) انتخاب میکنیم و سپس روی اونها گرادیان رو اعمال میکنیم و از این جهت هست که به SIFT ، توصیف کننده ی محلی (Local) هم میگن امــا در HOG گرادیان رو بر روی همه ی پیکسل ها محاسبه میکنند؛ و جهت و اندازه ی بردارهای گرادیان محاسبه شده رو به عنوان خروجی ثبت .. ایده ی کلی HOG به صورت خلاصه این هست .. کمی موشکافانه تر: تصویر ورودی رو به سلول هایی (Cell) تقسیم میکنند و بر روی پیکسل های این Cell ها گرادیان رو محاسبه میکنند و بر حسب اندازه ای (Vote) که محاسبه میشه ((sqrt(x^2 + y^2) و جهتی که گرادیان ها دارند، برای "هر" Cell یک هیستوگرام تشکیل میشه و در آخر این هیستوگرام ها رو در کنار هم Concatenate میکنند و نتیجه ی حاصل، توصیف کننده ای هست که تشکیل شده از هیستوگرام های جهات گرادیان ها .. به این دلیل که تمرکز این توصیف کننده، بر روی اطلاعات گرادیان یا به صورت دقیقتر، جهات لبه ها (Edge orientation) هست، خیلی مفید هست برای اطلاعات استخوان بندی تصویر؛ به این معنا که تصویر از چه ساختار فیزیکی صلبی (!) تشکیل شده (سعی کردم معنی خودم رو برسونم!) و به همین دلیل، بر روی کلاس های مختلف، نتایج تقریبا متفاوت و ملموسی رو داره .. شاید بهتر باشه که برای مثال، دو تصویر زیر رو باهم بررسی کنیم ..
Input_Images
HOG_Descriptor
نوع خروجی این توصیف کننده به گونه ای هست که تقریبا به اطلاعات ساختاری (شاکله ی) تصویر توجه میکنه و همونطور که در تصویر بالا هم مشخص شده، این موضوع به دلیل پرداختن به جزئیات گرادیان تصویر هست و نه رنگ یا چگالی پیکسل ها .. برای مشخص شدن بهتر این موضوع، شاید بهتر باشه که تصویر زوم شده ی زیر رو بر روی بخش هایی از تصویر بالا، باهم ببینیم ..
برای پیاده سازی این الگوریتم هم، کدهای آماده ای هست که برای استفاده میتونید به اونها اعتماد کنید .. یکی از بهترین اونها؛ یک تولباکس هست که یکResearch center فعال، برای برخی مسائل کاربردی Computer Vision ارائه کردن و میتونید این تولباکس رو در این آدرس دانلود کنید .. پس از دانلود تولباکس؛ برای استفاده از اون لازم هست که مراحل زیر رو پله به پله انجام بدید تا در انتها همه چیز خوب پیش بره .. در ابتدا فایل رو Extract کنید و اون رو در یک آدرس کپی کنید (برای مثال میتونید در دایرکتوری متلب این کار رو انجام بدید که همه ی فایل های مربوط به متلبی که در سیستمتون هستند، در یک بخش جمع بشن، در اینصورت تمرکز برای پیداکردن اونها در آینده بهتر میشه) .. پس از کپی این فایل، آدرسی رو که در اون این فایل کپی شده، لازم هست که با دستور زیر در متلب وارد کنید:
به جهت اسلش ها دقت کنید (به خصوص در ویندوز) .. پس از این مرحله لازم هست که تست کنید که آیا تولباکس صحیح و کامل نصب شده یا خیر .. برای این منظور میتونید از دستور زیر استفاده کنید .. اگر همه چیز خوب پیش رفته باشه، پیام زیر رو دریافت میکنید:
با گذشت از این مرحله؛ الان میتونیم به استفاده از کد HOG فکر کنیم .. برای این منظور میتونید از دستورات زیر استفاده کنید:
برای Visualize کردن خروجی توصیف کننده هم میتونید دستورات زیر رو در متلب وارد کنید:
در انتهای این پست، رفرنس کلاسیک و اصلی این توصیف کننده ضمیمه شده که میتونید اون رو دانلود کنید و ازش استفاده .. کد دیگری هم ضمیمه شده با نام P_HOG .. کاری که این کد انجام میده محاسبه ی توصیف کننده ی HOG هست؛ امــا به صورت Pyramid .. یعنی اول روی کل تصویر؛ بعد تصویر رو به چهار قسمت تقسیم کنید و بر روی هر قسمت، این توصیف کننده رو بار دیگه اجرا کنید؛ و بار دیگه هر چهار قسمت رو به چهار قسمت دیگه تقسیم کنید؛ و این توصیف کننده رو روی اونها اجرا کنید و در نهایت، هیستوگرام همه ی اینها رو Concatenate کنید و به عنوان بردار ویژگی نهایی ارائه بدید، چیزی شبیه به تصویر زیر:
در این آدرس هم میتونید فایلی رو دانلود کنید که یک Lecture کوتاه امــا بسیار مفید در زمینه ی HOG و کاربرد اون در Pedestrian Detection هست .. امیدوارم این فایل و توضیحات بالا بتونن براتون مفید باشن .. موفق و سلامت و شاد باشید ..
آموزش لینکی که دادید کافی نیست؟
میتونید از تولباکس SVM خود متلب هم استفاده کنید. برای طبقه بندی دوکلاسه خیلی راحته.
لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
لطفاً سوالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
با تمام وجود گناه کردیم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنیم چه می کند؟"دکتر شریعتی"
اگر جایی که ایستاده اید را نمی پسندید، عوضش کنید شما درخت نیستید!! "پاسکال"
یا به اندازه ی آرزوهایت تلاش کن یا به اندازه تلاشت آرزو کن. "شکسپیر"
در آدرسی که به اون اشاره کردید؛ مثالی هست که میتونه کمکتون کنه .. فرض کنید، به جای مقادیر X ها و Y ها (که در این مثال رندوم و تصادفی انتخاب شدند)؛ خروجی توصیف کننده ی HOG رو معادل Xi ها برای هر سمپل با لیبل 1+ و Yi ها برای هر سمپل با لیبل 1- در نطر بگیریم .. در این صورت (خیلی کلاسیک) یک سوپر ماتریس خواهیم داشت که هر سطر اون خروجی توصیف کننده ی HOG برای تصویر i ام هست و لیبل هر سطر هم معادل 1+ درنطر میگیریم، به این دلیل که اینها سمپل های کلاسی هستند که قصد داریم که SVM برای تشخیص اونها آموزش ببینه .. یک سوپر ماتریس دیگه هم تعریف میکنیم که هر سطر اون؛ خروجی توصیف کننده ی HOG هست؛ امــا بر روی سمپل های None_Objects و لیبل اونها هم معادل 1- در نظر میگیریم .. برای آموزش SVM هم نیاز هست که داده هامون رو به صورت برداری به الگوریتم بدیم به همراه لیبل هر سمپل .. در انتهای این پست، فایلی ضمیمه شده که میتونه کمکتون کنه .. نسخه ی اصلی اطلاعات مربوط به SVM رو هم میتونید در این آدرس بررسی کنید .. موفق و سلامت و شاد باشید ..
سلام
میشه اموزش libsvm رو بذارید ؟
راستش من تو سایت
http://www.csie.ntu.edu.tw/~cjlin
چیزی متوجه نشدم :cry: ،آچطور می تونم تصاویر رو درش اموزش بدم ؟
لطفا یک کد که بشه راحت تصاویر رو در libsvm آموزش داد بذارید :redface:.
با تشکر
:nerd:
در ابتدا ایـن فایل رو دانلود کنید، و پس از اون، به folder ای با نام matlab برید و در Workspace تایپ کنید: make .. پیش از اون البته، از mex -setup استفاده کنید تا کامپایلر مورد نظر، برای نرم افزار MATLAB شناخته بشه .. بعد از این مرحله قسمت بزرگ کار انجام شده .. کافیست بردارهای lable و داده های آموزش رو آماده کنید .. به عنوان مثال، میتونید از مثال heart استفاده کنید که در README هم به اون اشاره شده .. به دقت میتونید فرمت داده ها (--label و داده های آموزش--) رو مشاهده و اونها رو بررسی کنید، فرمتی که LibSVM با اون راحت هست .. به عنوان یک مثال بهتر، میتونید از ایـن صفحه هم استفاده کنید .. پیروز باشید ..
سلام من دارم با الگوریتم hog و svm کار میکنم
تا الان ویژگی های 600 تصویر را که ار 20 کلای مختلف در دیتابیس پاسکال هستند را با hog استخراج کردم و یک ماتریس هم دارم که در هر سطر شماره کلاس مربوط به ماتریس ویژگی را نگه میدارد .
میخواهم دقت hog را اندازه بگیرم و میدونم که باید از libsvm استفاده کنم ولی دیگه نمیدونم چطوری لطفا اگه کسی مثال یا توضیحی داره بگه ممنون
سلام.
برای درک چگونگی الگوریتم HOG و این که چطور این الگوریتم به ازای هر تصویر یک بردار مجزا میآدهد یک pdf در لینک زیر هست که بهترین توضیحی بود که توی اینترنت پیدا کردم:
https://www.cs.duke.edu/courses/fall15/compsci527/notes/hog.pdf
سلام خدمت همه دوستان و مهندسان گرامی
ببخشید شاید سوالم بی ربط باشه به موضوع تاپیک ولی من خیلی علاقه به پردازش تصویر و اینجور چیزا دارم اما تا حالا سراغش نرفتم
به نظر شما من میتونم با این که هیچ پیش زمینه ای ندارم ، به یاد گرفتن این مبحث بپردازم؟ینی میتونم خودم بدون هیچ کلاسی یاد بگیرم؟اخه احساس میکنم درک کردن این همه فرمول کار سخت و پیچیده ایهاونم به صورت خودآموز
پردازش تصویر جزو دانش "های تک" هستش یعنی بسیار پیشرفته و الگوریتم دادن در اون کار سختی هستش ولی با الگوریتم های موجود اکثر قریب به اتفاق نیاز ها برآورده میشن
سلام من دارم با الگوریتم hog و svm کار میکنم
تا الان ویژگی های 600 تصویر را که ار 20 کلای مختلف در دیتابیس پاسکال هستند را با hog استخراج کردم و یک ماتریس هم دارم که در هر سطر شماره کلاس مربوط به ماتریس ویژگی را نگه میدارد .
میخواهم دقت hog را اندازه بگیرم و میدونم که باید از libsvm استفاده کنم ولی دیگه نمیدونم چطوری لطفا اگه کسی مثال یا توضیحی داره بگه ممنون
سلام ببخشید من دارم درباره hog تحقیق میکنم. میتونم ازتون کمک بگیرم؟
دیدگاه