بدست آوردن کانتور یا اجزای به هم چسبیده - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

بدست آوردن کانتور یا اجزای به هم چسبیده

+1 امتیاز
سلام و خسته نباشید.

برای بدست آوردت contour یا connected component توی OpenCV بایستی چطور عمل کنیم و اصولاً خود کتابخانه از چه روشی استفاده می کنه برای بدست آوردنش؟
سوال شده آذر 13, 1392  بوسیله ی farnoosh (امتیاز 8,362)   20 44 59
دوباره تگ گذاری شد بهمن 22, 1392 بوسیله ی BlueBlade

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

 

تو OpenCV از تابع findContour برای اینکار استفاده کنید.
روش های مختلفی وجود داره 2 روش وجود داره که بیشتر از موارد دیگه استفاده میشه.
روش اول flood fill هستش که در 2 حالت باینری و gray scale هستش تابع flood fill ویندوز از نوع باینری بوده و اعصای جادویی فتوشاپ از نوع grayscale . به صورت بازگشتی هستش که روش هایی هم وجود داره که از حالت بازگشتی درش بیارین یعنی خودتون شبیه سازی کنید که در این حالت می تونید از queue یا stack استفاده کنید که من queue رو پیشنهاد می دم چون زمان اجرای اون در تصاویر با پیچیدگی بالا کمتره. در این روش صفحه را پیمایش می کنند تا به اولین نقطه غیر صفر برسه سپس نقطه را ثبت می کنه و تمام همسایه ها شو در queue قرار میده سپس یه مقدار دیگه از صف بر میداره و همین کارو تا آخر انجام میده به طوریکه صف خالی شه. برای انتخاب همسایه ها هم می تونید یا چهار همسایه اصلی رو انتخاب کنید یا 8 همسایه هر پیکسل این گزینه ای هستش که همه روش ها دارند در برخی موارد پیش میاد که شما نمی خاید 2 تا Blob از طریق یه خط اریب به هم وصل شن که در این موارد بایستی از همسایگی 4 استفاده کنید.
 
روش دوم بدین صورت هستش که ابتدا polygon را از تصویر به صورت برداری استخراج کنید و سپس آنها را به صورت connected component تفسیر کنید مزیت این روش این هستش که شما فقط لبه ها را پیمایش می کنید یعنی بر خلاف روش بالا که massive بود این روش sparse هستش. برای استخراج لبه در این موارد می تونید از morphology gradient استفاده کنید و بعد هم با استفاده از روش vector quantization آن را به بردار تبدیل نماید. برای محاسبه مساحت blob از می تونید از قضیه green استفاده کنید.
پاسخ داده شده آذر 13, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
ویرایش شده آذر 13, 1392 بوسیله ی مصطفی ساتکی
...