خانه / مقالات / داده کاوی و هوش مصنوعی / بـیـنـایی مـاشـیـن – بخش سوم

بـیـنـایی مـاشـیـن – بخش سوم

در این بخش از مجموعه آموختار بینایی ماشین به الگوریتم های بینایی ماشین در حرکت خواهیم پرداخت.

Motion Detection (Bulk Motion)
Motion detection براساس تفاوت در فریم ها کار می کند – یعنی با مقایسه نحوه تغییر موقعیت پیکسل ها (معمولا بلاب ها (لکه ها)) پس از هر فریم. به دور روش می توانید Motion detection را انجام دهید.
اولین روش تنها به دنبال توده ای از تغییرات در تصویر می گردد:
– میانگین رنگ های انتخابی در فریم ۱ را محاسبه کن
– به اندازه X ثانیه صبر کن
– میانگین یک رنگ انتخابی در فریم ۲ را محاسبه کن
– if (abs(avg_frame_1 – avg_frame_2) > threshold)
– سپس حرکت شناسایی می شود
روش دیگر به حرکت middle mass نگاه می کند:
– middle mass در فریم ۱ را محاسبه کن
– به اندازه X ثانیه صبر کن
– middle mass در فریم ۲ را محاسبه کن
– if (mm_frame_1 – mm_frame_2) > threshold)
– سپس حرکت شناسایی می شود
مشکل این روش های شناسایی حرکت این است که هیچ یک از اشیائی که حرکت بسیار کند دارند را شناسایی نمی کنند مگر اینکه آستانه، بسیار حساس تنظیم شود؛ ولی اگر آُستانه بیش از حد حساسیت داشته باشد سایه ها و تغییرات در نور خورشید را نیز شناسایی می کند!
به علاوه این الگوریتم نمی تواند یک شیء چرخنده را نیز شناسایی کند – یعنی شیئی که حرکت می کند ولی middle mass ای دارد که تغییر مکان نمی دهد.

Tracking
با انجام motion detection بوسیله محاسبه حرکت middle mass، می توانید الگوریتم های پیشرفته تری مانند tracking را نیز اجرا کنید. با محاسبات ریاضی برداری و دانستن نسبت پیکسل به مسافت، شخص می تواند جابجایی، سرعت و شتاب یک لکه یا بلاب در حال حرکت را اندازه گیری نماید.
در اینجا مثالی از نحوه اندازه گیری سرعت یک ماشین آورده شده است:
– middle mass را در فریم ۱ محاسبه کن
– به اندازه X ثانیه صبر کن
– middle mass را در فریم ۲ محاسبه کن
speed = (mm_frame_1 – mm_frame_2) * distance / per_pixel

مشکلات tracking
بزرگترین مشکل این الگوریتم محاسبه نسبت مسافت به پیکسل است. اگر دوربین شما در زاویه ای رو به افق است (یعنی مستقیما رو به بالا یا پایین نمی باشد)، یا دوربین شما lens effect را تجربه می کند (همه دوربین ها تا حدی اینطور هستند) آنگاه باید الگوریتم جداگانه ای بنویسید که برای پیکسل مشخصی که در موقیعت X و Y قرار دارد  این نسبت را بنگارد.
تصویر زیر اثر لنز یا lens effect  اغراق آمیز دارد بدین ترتیب که پیکسل هایی که از دوربین دورتر هستند فاصله خیلی بیشتری نسبت به پیکسل های نزدیک تر به دوربین پیدا کرده اند.
این تصویر دوربین Mars Rover (مریخ نورد) مثال خوبی برای lens effect است:
اعوجاج شعاعی لنز را می توان با معادله زیر مدل کرد:
x_actual = xd * (1 + distortion_constant * (xd^2 + yd^2))
y_actual = yd * (1 + distortion_constant * (xd^2 + yd^2))
متغیرهای xd  و yd  مختصات های تصویر ناهموار هستند. distortion_constant  ثابتی است که به اعوجاج لنز بستگی دارد. این ثابت را یا می توان بصورت تجربی تعیین کرد و یا از روی برگه های راهنمای دوربین یا لنز.
Cross over   یک مشکل عمده دیگر است. زمانی که چندین شیء روی هم قرار می گیرند ( مثلا لکه ای از پشت لکه دیگر عبور کند) و الگوریتم به اشتباه افتد که کدام لکه کدام است، Cross over  یا همگذری رخ داده است. برای مثال در هنگامی که در فیلمی شخصی که مورد ردیابی دوربین است از پشت یک درخت یا یک شیء مورد ردیابی دیگر عبور می کند، الگوریتم باید تعداد معقولی از مشخصه ها یا ویژگی های هر یک از اشیاء مورد ردیابی را به خاطر بسپارد تا هنگام همگذری دچار مشکل نشود.

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

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

اندازه گیری سرعت (در ارتفاع ثابت)
برای روباتی که در یک ارتفاع مشخص حرکت می کند، با اندازه گیری سرعت پیکسل، می توان سرعت روبات را به دست آورد. این روش مخالف با روش اندازه گیری ارتفاع است. امکان جمع آوری داده های ارتفاع و سرعت، به طور همزمان تنها با استفاده از جریان نوری ممکن نیست پس یک سنسور دیگر (مانند یک GPS یا یک ارتفاع سنج) باید مورد استفاده قرار گیرد. اگر روبات شما یک ماشین RC باشد، ارتفاع آن شناخته شده است ( احتمالا یک اینچ بالای زمین). بدین ترتیب می توان سرعت را با استفاده از جریان نوری و بدون نیاز به هیچ سنسور دیگری محاسبه کرد. از جریان نوری می توان برای محاسبه مستقیم زمان اصابت موشک استفاده کرد. به علاوه جریان نوری تکنیکی است که اغلب توسط حشرات برای سنجش میزان سرعت و جهت پرواز مورد استفاده قرار می گیرد.
ردیابی
روش tracking که قبلا به آن اشاره شد و روش background subtraction  که در ادامه مطرح می شود را ملاحظه نمایید. روش جریان نوری در ردیابی، هر دوی این روش ها را با هم در بر می گیرد. با حذف background یا پس زمینه تنها کاری که باید انجام شود آنالیز حرکت پیکسل های متحرک است.
تجزیه و تحلیل صحنه ۳ بعدی
با تجزیه و تحلیل حرکت همه پیکسل ها، امکان ایجاد اندازه های تقریبی از صحنه مشاهده شده وجود دارد.
برای مثال در تصویر قطار زیر: پیکسل های سمت چپ بسیار سریع حرکت می کنند و با همگرایی به سمت مرکز تصویر سرعت آنها کم می شود. با این اطلاعات، می توان اطلاعات سه بعدی قطار (مانند سرعت قطار و زاویه ردیابی) را محاسبه کرد.
به طور کلی، جریان نوری مرتبط با زمینه حرکت است اما نه همیشه. به عنوان مثال، زمینه حرکت و جریان نوری شکل زیر متفاوت است:
اگرچه این شکل فقط حول محور z می چرخد، جریان نوری می گوید که میله های قرمز حول محورz به سمت بالا حرکت می کنند.
محاسبه چندین شیء بسیار پیچیده می شود … مخصوصا اگر همگذر باشند…
و در نهایت این معادلات، زمانی که تنها حرکت خطی پیکسل ها را نمی خواهید اندازه گیری نمایید بلکه حرکت دوار را نیز می خواهید، پیچیده تر نیز می شوند. با جریان نوری در شکل زیر چگونه خواهید گفت که آیا نقطه مرکزی این چرخ و فلک به نیمه بیرونی متصل است یا خیر؟
Background Subtraction  (تفریق پس زمینه)
تفریق پس زمینه روش حذف پیسکل هایی است که حرکت نمی کنند و تنها بر روی اشیاء متحرک تمرکز دارد. این روش به این صورت عمل می کند:
دو فریم بگیر
رنگ پیکسل ها را روی هر دو فریم مقایسه کن
اگر رنگ ها مشابه بودند آنها را با رنگ سفید جایگزین کن
در غیر اینصورت پیکسل جدید را نگه دار
در اینجا مثالی از شخص در حال حرکتی را مشاهده می کنید با پس زمینه ثابت. برخی پیکسل ها زمانی که وی حرکت می کند به نظر می رسد که تغییری ندارند که منجر به خطا می شود:
مشکل این روش مانند فوق این است که  اگر شیء دیگر حرکت نکند، ناپدید می شود.
اگر دست وی حرکت کند ولی بدنش ثابت باشد، آنچه مشاهده خواهید نمود تنها یک دست متحرک است. این احتمال نیز وجود دارد که اگرچه شیئی در حال حرکت است، همه پیکسل های منحصر به فرد تغییر رنگ نمی دهند زیرا شیء رنگ یکنواختی دارد. برای اصلاح این مورد، این الگوریتم باید با الگوریتم های دیگری مانند الگوریتم های لبه یاب و تشخیص لکه ادغام شود تا تضمین کند که همه پیسکل های درون یک مرز متحرک  دور انداخته نشوند.
نوع دیگری از تفریق پس زمینه نیز وجود دارد که به آن blue-screening (یا green-screening و یا chroma-key (کلید رنگی) ) می گویند.  کاری که می کنید این است که پس زمینه را بصورت فیزیکی با یک رنگ ثابت جایگزین می نمایید – یک پرده بزرگ سبز (که به آن chroma-key می گویند) اغلب بهترین تاثیر را دارد. سپس کامپیوتر تمام پیکسل های این رنگ را با پیکسل های یک صحنه دیگر جایگزین می کند. این روش به طور متداول برای گزارشگران وضعیت آب وهوا در اخبار مورد استفاده قرار می گیرد.
روش blue-screening بیشتر یک تکنیک بینایی ماشین است زیرا در موقعیت های روزمره پاسخگو نیست بلکه تنها در استودیوها با نورپردازی های حرفه ای قابل بهره برداری می باشد.
Feature Tracking
ردیابی ویژگی
ویژگی یا خصیصه یک نقطه شناسایی خاص در تصویر است که الگوریتم ردیابی می تواند روی آن قفل شده و در فریم های متعدد آن را دنبال کند. ویژگی ها اغلب به این دلیل انتخاب می شوند که نقاط، لبه ها یا گوشه های تیره/روشنی (بسته به الگوریتم ردیابی) هستند. Template matching یا تطبیق الگو نیز بسیار متداول است. آنچه مهم است این است که هر مشخصه یا ویژگی نمایانگر یک نقطه خاص روی سطح یک شیء واقعی است. با ردگیری یک ویژگی، آن ویژگی تبدیل به مجموعه ای از مختصات های دو بعدی می شود که نشان دهنده مکان ویژگی در طول مجموعه ای از فریم ها هستند. به این مجموعه track (رد/مسیر) می گویند. به محض اینکه track ها ساخته شدند می توان بلافاصله از آنها برای ردیابی حرکت دو بعدی یا برای محاسبه اطلاعات سه بعدی استفاده نمود.

Visual Servoing  یا VS
VS روشی است که در آن از داده های ویدئویی برای تعیین اطلاعات موقعیت روبات استفاده می شود. برای مثال روبات شما دری را مشاهده کرده و میخواهد از آن عبور کند. VS جلوی روبات شما را قادر می سازد خود را با در هم تراز کرده و از آن عبور کند. اگر روبات شما بخواهد چیزی از روی زمین بردارد، باید از VS برای حرکت بازوی خود به سمت آن مکان استفاده کند. برای رانندگی در یک جاده، VS جاده را با توجه به مسیر روبات ردیابی می کند.
برای انجام VS ابتدا باید از روش های پردازش تصویر برای تعیین مکان شیء استفاده نمایید. سپس روبات شما باید تصمیم بگیرد که چگونه جهت خود را برای رسیدن به آن مکان با استفاده از برخی انواع PID loop (خطای فاصله بین مکانی که روبات می خواهد برود و آنچه که از موقعیت آن مکان می بیند) تنظیم کند.

————————–

هدی ابیضی

دیدگاهتان را ثبت کنید

آدرس ایمیل شما منتشر نخواهد شدعلامتدارها لازمند *

*

x

شاید بپسندید

داده کاوی و الگوریتم خوشه بندی kmeans

داده کاوی و الگوریتم خوشه بندی kmeans در این مقاله قصد داریم ...