نمايش پست تنها
قديمي ۰۳-۱۵-۱۳۹۱, ۱۲:۲۹ بعد از ظهر   #10 (لینک دائم)
mahdiii
Active users
 
آواتار mahdiii
 
تاريخ عضويت: اسفند ۱۳۸۸
محل سكونت: مشهد
پست ها: 355
تشكرها: 27
167 تشكر در 131 پست
My Mood: Khoshhal
پيش فرض

اگه تصویرتون سیاه و سفید باشه که شکلهاتون سفید و پس زمینه سیاهه می تونید از تابع های bwlabel,bwlabeln,bwconncomp استفاده کنید. این توابع یک تصویر دودویی را به عنوان ورودی می گیرند و پیکسلهایی که مربوط به یک شی هستند را جداگانه برمی گردانند. تاکید می کنم که باید اشکال دارای مقدار سفید یعنی 1یا255 باید باشند و پس زمینه سیاه یعنی صفر. اگر تصویر ورودیتان دودویی نبود باید با یک مقدار آستانه آن را دودویی کنید که بسته به تصویر انتخاب می شود. بنابراین پیکسلها با مقدار بیشتر از T به رنگ سفید و کمتر از آن به رنگ سیاه تبدیل می شود.
پس باید از این تابع به این شکل استفاده کنید:
CC=bwconncomp(image)
CC همان چیزی که تابع برمی گرداند از نوع ساختار است که دارای فیلدهایی است.
CC.PixelIdxList خود از چندین نوع داده cell تشکیل شده که هر کدام از این cell ها دارای شماره پیکسلهای یکی از نواحی متصل است. بنابراین شما می توانید با استفاده از
CC.PixelIdxList{1} به اولین ناحیه متصلتان دسترسی پیدا کنید و همین طور برای شماره های 2و3و الی آخر. اگر جایی نیاز به کمک بود می تونید از help متلب کمک بگیرید خیلی کامله فقط باید اسم تابع رو جستجو کنید. در ضمن باید بگم شماره های پیکسلها داخل این cell ها شماره پیکسلهای تصویرتون هست به طوریکه تصویرتون به یک بردار ستونی تبدیل شده.
برای یافتن مساحت و محیط و خیلی چیزای دیگه می تونید از تابع regionprops استفاده کنید.
regionprops(CC,'Area')
regionprops(CC,'Premiter')
که CC همان ساختاری است که تابع bwconncomp برگردانده بود.
موفق باشی
mahdiii آفلاين است   پاسخ با نقل قول