الگوریتم flood fill برای تشخیص چهره
سلام دوستای گلم !!
در مورد الگوریتم flood fill می دونین ؟ یه مقاله اینجا هست که واسه تشخیص چهره از این الگوریتم استفاده کرده :
در این مقاله ما تکنیک جدیدی واسه استخراج ویژگی ارائه کردیم ، این روش ویژگی ها رو از نواحی مختلف چهره به همراه قطعه بندی رنگ پوست ، آستانه گیری و تکنیک مبتنی بر دانش واسه شناسایی چهره بدست می یاره .
استخراج ویژگی :
واسه استخراج ویژگی ها از نواحی مختلف ، ما منحنی هایی در این نواحی رسم کردیم ، که پیکسلهایشان به عنوان پیکسلهای پوست به حساب نمی یومدن.بعد از تشخیص پیکسلهای غیر پوست ما الگوریتم Flood Fill رو واسه پیدا کردن منحنی هایی از پیکسلهای غیر پوست به کار بردیم. این الگوریتم سه تا پارامتر میگیره، یکی شاخه ی شروع کننده یا starting node ، یه رنگ (target) ، و یه رنگ جایگزین .الگوریتم به دنبال تمام شاخه هایی در آرایه (صفحه) میگرده که با رنگ target به نود وصل شدن و اونا رو با رنگ جایگزین عوض میکنه . البته راههای بسیار زیادی برای ساختار این الگوریتم هست، ولی همشون به دو حالت stack یا queue کار میکنن.
الگوریتم Flood Fill :
این الگوریتم یه پیکسل ورودی و یه پیکسل خروجی و یه رنگ میگیره. تو ماتریس بیت مپ اطراف پیکسل ورودی اش رو میگرده اگه هم رنگ خودش بود اون رو رنگ میکنه و برای اون خانه دوباره خودش رو صدا میزنه.
1. قرار دادن Q برای صف خالی
2. اگه رنگ نود با نود هدف یکی نیست ، برگرد
3. اضافه کردن نود به Q
4. واسه هر n عنصر از Q :
5. اگه رنگ n با رنگ هدف یکی هست :
6. W و e رو مساوی با n قرار بده .
7. تا زمانیکه رنگ این نود با w از west با رنگ هدف مطابقت نداشته باشه ، w رو به west انتقال بده.
8. تا زمانیکه رنگ این نود با e از e east با رنگ هدف مطابقت نداشته باشه ، e به east حرکت بده.
9. قرار دادن رنگ برای این نودها بین w و e به عنوان رنگ جایگزین
10. واسه هر نود n بین w و e :
11. اگه رنگ این نود برای n از north ،vرنگ هدف هستش ، این نود رو Q اضافه کن .
12. اگه رنگ این نود برای n از south ، رنگ هدف هستش ، این نود رو به Q اضافه کن .
13. ادامه ی حلقه تا زمانیکه Q ، exhaust بشه.
14. بازگشت
سپس منحنی هایی واسه چشم چپ ، چشم راست و نواحی لب بدست می یاریم، ما نقاط بینهایتی از این منحنی ها و دو ویژگی اول و ویژگی های دیگه که توسط مماس بر منحنی از این سه ناحیه مشخص میشن رو دنظر گرفتیم. الگوریتم پیشنهادی بهترین نتایج رو واسه ROI ها و بدست آوردن ویژگی ها تعیین میکنه.

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

که P(x,y) بیانگر پیکسل فعلی با مختصات X و Y است و R ، G و B هم مقادیر قرمز ، سبز و آبی ، مربوط به پیکسل فعلی P(x,y) و T مقدار آستانه برای پیکسل های رنگ پوست خواهد بود.
گام دوم : حداکثر عرض و حداکثر ارتفاع پیکسلهای پوست به عنوان عرض و ارتفاع چهره در نظر گرفته میشه.
گام سوم : برای بررسی امکان وجود یه چهره تو تصویر ورودی ، عرض و ارتفاع ناحیه ی چهره باید از معیار های زیر تبعیت کنه :

گام چهارم : پس از شناسایی چهره ، تصویر چهره به یه تصویر باینری تبدیل میشه
گام پنجم : حالا cut چهره از تصویر باینری با توجه به پیکسل های پوست در تصویر به کمک عرض و ارتفاع
گام ششم : یافتن ناحیه ی مورد نظر ( ROI ) از چهره به صورت : چشم چپ ، چشم راست و لب با توجه به روش مبتنی بر دانش برای شناسایی چهره
گام هفتم : به کار بردن الگوریتم Flood Fill بر روی چشم چپ ، چشم راست و لب واسه بدست آوردن منحنی هاشون
گام هشتم : در نظر گرفتن دو نقطه ی بینهایت از منحنی به عنوان دو ویژگی اول از هر ناحیه
گام نهم : حالا با رسم مماس بر منحنی ها ما 4 ویژگی بر روی هر ناحیه ی مورد نظر ( ROI ) رو خواهیم داشت

----------------------------------------------------------------------------------------------------------------
اکثر ما موفقیت را قله ای دور از دسترس می بینیم و این گاهی باعث می شود هیچ تمایلی به سعی و تلاش از خود نشان ندهیم. چرا سختی بکشیم وقتی به هر حال این راه طی می شود و به پایان می رسد؟ این تصور از پیروزی اشتباه و مهلک است. اینشتین روز و شب تلاش کرد و بر کاستی ها و مسائل علم فیزیک غلبه کرد اما نه یک شبه! هدفی غایی در ذهن داشت و می دانست با هر گامی که به جلو بر می دارد یک قدم به آن چه در ذهنش دارد نزدیکتر می شود. کار کوچکی که در یک زمان محدود انجام می دهی شاید به نظر بزرگ و مهم نرسد اما بدان که در مقیاس بزرگتر حرکتی است کوچک در مسیری طولانی به سوی هدفی بزرگ !