# مهندسی نرم افزار > مباحث مرتبط با مهندسی نرم‌افزار > پردازش تصویر (Image Processing) >  تشخیص تعداد دایره های درون عکس (Matlab)

## کامروا

سلام

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



بوسیله کد زیر تونستم تعداد سکه ها رو بشمارم :
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 این کارو انجام بدم.

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

----------


## مصطفی ساتکی

از circle hough استفاده کنید.

----------


## کامروا

> از circle hough استفاده کنید.


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

سپاس

----------


## مصطفی ساتکی

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

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

موفق باشید.

----------


## کامروا

ممنون از راهنمایی تون.

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

سپاس

----------

