PDA

View Full Version : تشخیص تعداد دایره های درون عکس (Matlab)



کامروا
پنج شنبه 28 دی 1391, 23:17 عصر
سلام

از طریق نرم افزار متلب میخوام که تعداد سکه های درون عکس زیر رو پیدا کنم :

http://uploadimage.co.uk/images/coins-1358453594.png

بوسیله کد زیر تونستم تعداد سکه ها رو بشمارم :
function p = CountCoins(i)
subplot(2,2,1);
imshow(i);
subplot(2,2,2);
t=im2bw(i);
imshow(t);
subplot(2,2,3);
imhist(i);
subplot(2,2,4);
x=zeros(size(i));
x(i>100)=1;
imshow(x);
c=bwconncomp(x);
p=c.NumObjects;
end

اما من میخوام بدون استفاده از تابع bwconnconp این کارو انجام بدم.

ممنون میشم راهنمایی کنید

مصطفی ساتکی
جمعه 29 دی 1391, 11:07 صبح
از circle hough استفاده کنید.

کامروا
جمعه 29 دی 1391, 13:42 عصر
از circle hough استفاده کنید.

در مورد Circle Hough جستجو کردم و باهاش خیلی کارها کرده بودند و من یکم گیج شدم.
میشه یه مثال ساده بزنید؟

سپاس

مصطفی ساتکی
جمعه 29 دی 1391, 14:26 عصر
عملکردش ساده هستش.
مثلاً به شما گفته میشه که دایره های با شعاع 10 را در تصویر ورودی پیدا کنید.
معادله دایره
x= a + r* cos(theta);
y= b+ r* sin(theta);

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

موفق باشید.

کامروا
جمعه 29 دی 1391, 14:48 عصر
ممنون از راهنمایی تون.

میشه در مورد روش bwLabel هم توضیح بدید ؟
numberOfCoins = round(sum(image1(:)) / averageNumberOfPixelsInACoin));

سپاس