به طور کلی می توان عمل ردیابی اشیا متحرک توسط دوربین را به عنوان تطابق اشیای تشخیص داده شده به وسیله مجموعه ای از نقاط فرموله بندی نمود. تطابق نقاط و تطابق شی به نحوه نمایش تصاویر توسط تعدادی از نقاط کلیدی پراکنده بستگی دارد. به طور کلی روش تطابق نقطه را می توان به دو طبقه اصلی به نام روش های قطعی[1] و روش های تصادفی[2] تقسیم بندی نمود.
روش های قطعی با به کارگیری یک روش جستجوی تکراری برای یافتن ماکزیمم محلی تابع هزینه شباهت بین تصویر الگو و تصویر جاری به شدت مورد استفاده قرار می گیرد. معیارهای اندازه گیری بهتر و بهینه تری همچون الگوریتم انتقال میانگین و الگوریتم ردیابی مبتنی بر مدل[3] به عنوان تابع هزینه مورد استفاده قرار می گیرد. روش های قطعی از روش های اکتشافی حرکت کیفی به منظور محدود کردن مشکل تطابق استفاده می کنند و شی ردیابی شده را در هر فریم به وسیله جستجوی تکراری برای یک ناحیه که بیشترین شباهت بین این ناحیه و پنجره شی وجود دارد را نمایش می دهد. این روش ها از نظر محاسباتی کارا هستند و به در هم ریختگی پس زمینه، نویز ، انسداد و حرکت سریع اشیا حساس هستند. از طریف دیگر روش های تصادفی به طور واضح و صریح اندازه گیری شی را انجام می دهند و از فضای حالت به منظور مدلسازی حرکات سیستم های ردیابی استفاده می نمایند. در مدل گوسین و خطی از فیلتر کالمن استفاده می شود که فیلتر کالمن میانگین و کوواریانس توزیعات را منتشر کرده و به روزرسانی می نمایند. برای مسائل غیر خطی و غیرگوسین این امکان وجود ندارد که توزیع ها را به صورت تحلیلی مورد ارزیابی قرار داد به همین دلیل الگوریتم های متعددی برای تخمین این توزیع ها به وجود آمده است. از جمله این الگوریتم ها و روش ها فیلتر ذره یا روش مونت کارلو ترتیبی است.
روش فیلتر ذره یک روش عددی است که اجازه می دهد یک راه حل تقریبی جهت تخمین پی در پی پیدا شود و برای مسائل غیرگوسین و غیرخطی می تواند بسیار موفق باشد. ایده اولیه فیلتر ذره در سال 1949 توسط آقای متروپلیس مطرح شد که بررسی جزییات مجموعه ای از ذره ها را به جای یک ذره را مورد مطالعه قرار داد[4]. اما در سال 1945 یکی از اولین ایده های اصلی تر و پایه و اساس فیلتر ذره با محاسبه و بکارگیری الگوریتم مونت کارلو توسط آقایان همرسلی و مورتون ارائه گردید. فیلتر ذره یک مبحث کاملا آماری می باشد و دلیل مطرح شدن آن این است که بتواند برای مسائلی به کار گرفته شود که تخمین آنها توسط فیلتر کالمن مشکل باشد.
[1] Deterministic method
[2] Scholastic method
[3] Model based tracking
[4] Metropolis, Nicholas, and Stanislaw Ulam. “The monte carlo method.” Journal of the American statistical association 44.247 (1949): 335-341.
لینک دانلود فیلم آموزشی کامل فیلتر ذره
در چند قسمت اول این فیلم آموزشی تئوری فیلتر ذره توضیح داده می شود. اسلایدهای استفاده شده در این آموزش از سیمنار پیاده سازی الگوریتم های مختلف توسط شرکت mathworks در ژاپن استخراج شده اند.
قسمت های پایانی اختصاص به برنامه نویسی متلب فیلتر ذره دارد و چندین مثال از ردیابی شی در ویدئو آورده می شود.
سرفصل مطالب :
حلقه بزرگ در پیاده سازی الگوریتم
فیلتر ذره چیست ؟
چگونه یک شی را در ویدئو ردیابی کنم ؟
چگونه کد فیلتر ذره particle filter را در متلب پیاده سازی کنیم ؟
چرا از معادلات دیفرانسیل برای پیش بینی مکان بعدی شی استفاده نکنیم و از فیلتر ذره استفاده می کنیم ؟
مدل فضای حالت فیلتر ذره
مدل سیستم system
مدل مشاهده observation
هدف از فیلتر ذره چیست؟
تعداد ذرات فیلتر کم یا زیاد خوب است ؟
الگوریتم فیلتر ذره
پیش بینی prediction
فیلتر filtering
میعار انتخاب ذرات چیست؟
شباهت فیلتر ذره و الگوریتم بهینه سازی تجمعی ذرات PSO
معرفی سمبل های مورد استفاده در تئوری فیلتر ذره
میعار likelihood
نحوه تغییر شش ذره در فیلتر ذره به صورت نموداری
رابطه محاسبه موقعیت و سرعت جدید ذرات
فرق بین متغییر state و متغییر observable
برنامه نویسی متلب فیلتر ذره
توضیح خط به خط کد
معرفی پارامترهای خروجی دستور خواندن ویدئو
فرمول update ذرات
تاثیر فاصله دوربین
تاثیر محو شدن هدف در تصویر
تاثیر تعداد ذرات در نتیجه فیلتر ذره
تاثیر انحراف معیار موقعیت و سرعت
پیش نمایش 1 :
لینک دانلود پیش نمایش 1 (کیفیت اصلی)
لینک یوتیوب youtube
پیش نمایش 2 :
لینک دانلود پیش نمایش 2 (کیفیت اصلی)
لینک یوتیوب youtube
در این فیلم آموزشی متاسفانه مفهوم دقیق معیار likelihood گفته نشده اگر امکانش هست می شه معیار likelihood رو توضیح بدید که دقیقا چی هست؟
سپاس فروان از پکیج های خوبتون.
من باید یک جسم متحرک رو در ویدِیو با فیلتر ذره ردیابی کنم. فیلم فیلتر ذره و تشخیص جسم رو دیدم. سوالی .که دارم اینه که چطوری یک جسم رو در ویدیو تشخیص بدم بعد به ورودی فیلتر ذره اعمال کنم.
ممنون میشم راهنمایی کنین. یا این که ویدیویی در این مورد در سایت قرار دهید که تهیه کنیم.
ممنون
سلام
اگر به نمونه کدها توجه بفرمایید شما باید ویژگی در جسم را مشخص کنید. مثلا اگر جسم قرمز رنگ است باید مقدار
[255 0 0]
را به عنوان مقدار هدف تعیین کنید
خلاصه اینکه ببینید چه ویژگی متمایزی جسم دارد می تواند رنگ باشد
می تواند مساحت بیشتر
در برخی اوقات لازم است تصویر را مورد پردازش قرار دهید تا جسم متمایز تر شود و سپس از فیلتر ذره استفاده کنید
با سلام
من باید یک جسم رو در فریم ویدئو تشخیص بدم بعد با فیلتر ذره ردیابی کنم. طبق ویدئو های تشخیص اجسام در این سایت تونستم جسم رو در فریم اول منطبق کنم. سوال من هم در مورد قسمت likelihood هست که چطوری تعریف شه و اینکه تشخیص جسم رو قبل از اعمال فیلتر انجام بدم یا اینکه در قسمت فیلتر.
ممنون میشم راهنمایی کنین یا اینکه فیلمی در این رابطه در سایت قرار دهید.
سلام
در تعریف فیلتر ذره شما باید پارامتری به نام MeasurementLikelihoodFcn را تعریف کنید که اشاره به یک تابع دارد. مثلا
pf.MeasurementLikelihoodFcn = @exampleHelperCarBotMeasurementLikelihood;
خوب این تابع exampleHelperCarBotMeasurementLikelihood تعریف likelihood می باشد. اگر داخل این تابع را مشاهده کنید :
function likelihood = exampleHelperCarBotMeasurementLikelihood(pf, predictParticles, measurement)
% The measurement contains all state variables
predictMeasurement = predictParticles;
% Calculate observed error between predicted and actual measurement
% NOTE in this example, we don’t have full state observation, but only
% the measurement of current pose, therefore the measurementErrorNorm
% is only based on the pose error.
measurementError = bsxfun(@minus, predictMeasurement(:,1:3), measurement);
در این خط خطای بین مقدار اندازه گیری و مقدار واقعی را حساب کرده
measurementErrorNorm = sqrt(sum(measurementError.^2, 2));
سپس مجموع گرفته و به توان 2 رسونده و جذر گرفته که میشه نرم خطا
% Normal-distributed noise of measurement
% Assuming measurements on all three pose components have the same error distribution
measurementNoise = eye(3);
سپس یک ماتریس 3 در 3 ساخته که همه عناصر قطر اصلی 1 است .
% Convert error norms into likelihood measure.
% Evaluate the PDF of the multivariate normal distribution
likelihood = 1/sqrt((2*pi).^3 * det(measurementNoise)) * exp(-0.5 * measurementErrorNorm);
این رابطه محاسبه likelihood می باشد . که نرم خطا و ماتریس واحد 3 در 3 را در آن گذاشته و مقدارش محاسبه کرده .
end
شما اگر دنبال هر معیاری برای فیلتر ذره هستید باید پارامتر measurement را که ورودی تابع هست تغییر بدهید.