در این مقاله می خواهیم نخود و لوبیاها را در تصویر زیر به کمک پردازش تصویر تفکیک نماییم. برای این کار از الگوریتم های (segmentaion) و مورفولوژی (morphology) تصویر استفاده می کنیم. در ادامه مقاله مروری بر مورفولوژی تصویر خواهیم داشت سپس پیاده سازی برنامه را در نرم افزار قدرتمند پردازش تصویر HALCON (ساخت یک شرکت تخصصی پردازش تصویر در آلمان) به صورت قدم به قدم تشریح خواهیم کرد. همچنین در ویدیو به ذکر جزییات بیشتری می پردازیم و استفاده از ابزارهای بی نظیر HALCON، بهترین نرم افزار پردازش تصویر را به شما آموزش خواهیم داد.
دانلود برنامه تفکیک نخود از لوبیا با پردازش تصویر در نرم افزار HALCON
برای دانلود برنامه تشخیص و تفکیک نخود و لوبیا با نرم افزار HALCON ایمیل خود را وارد نمایید تا لینک دانلود را دریافت نمایید. چنانچه نرم افزار هالکن را دانلود و نصب کنید می توانید برنامه را اجرا نمایید.
تکنیک های مورفولوژی در پردازش تصویر
به تکنیک های آنالیز و پردازش شکلهای هندسی مورفولوژی گفته می شود. چهار عدد از مهمترین عملیات مورفولوژی عبارت است از
openning یا بازکردن : موجب از بین رفتن شکل های کوچک و بیرون زدگی ها از تصویر می شود.
closing با بستن: موجب پر شدن حفره ها می گردد.
dialation یا گسترش : ناحیه ها رو بزرگ میکند.
erosion یا فرسایش: ناحیه ها رو فرسایش می دهد.
ما در تصویر زیر یک ناحیه نمونه کشیده ایم که روی آن با دایره نشان داده شده مورفولوژی انجام دهیم. نتیجه اجرای چهار عملیات مورفولوژی نشان داده شده است.
مراحل کدنویسی در برنامه پردازش تصویر
برای حل مسئله تفکیک نخود از لوبیاها سه مرحله ی اساسی زیر وجود دارد. تک تک مراحل در ادامه مقاله تشریح شده است.
1- خواندن تصویر جهت پردازش
2-بخشبندی تصویر (segmentation) به کمک مورفولوژی
3- تشخیص و شناسایی لوبیا و نخود به کمک ویژگی ها
1- خواندن تصویر جهت پردازش
برای خواندن تصاویر در نرم افزار HALCON از کد read_image استفاده می گردد. این کد نام عکسی که در کنار برنامه قرار داده شده است را به عنوان ورودی ( ‘peas_and_beans’) میگیرد. نتیجه اجرای این کد این است که عکس با نام InputImage وارد برنامه هالکن می گردد.
read_image (InputImage, ‘peas_and_beans’)
InputImage: عکس ورودی
2-بخشبندی تصویر (segmentation) به کمک مورفولوژی
منظور از بخش بندی تصویر تفکیک تک تک ناحیه های لوبیاها و نخودهاست. بدین منظور نیاز است که پنج مرحله زیر را انجام دهیم:
- مرحله ی اول: حذف پس زمینه با آستانه گذاری تصویر
- مرحله ی دوم: حذف نویز با تکنیک openning (باز شدن)
- مرحله ی سوم: مجزا کردن ناحیه های به هم چسبیده با erosion (فرسایش)
- مرحله ی چهارم: جداسازی (segmentaion) ناحیه ها
- مرحله ی پنجم: استفاده از مورفولوژی برای گسترش (dialation) ناحیه ها
در ادامه تک تک مراحل تشریح خواهند شد.
حذف پس زمینه با آستانه گذاری تصویر
پس از خواندن تصویر باید نخود و لوبیا ها را از تصویر جدا کنیم. به این منظور از آستانه گذاری روی تصویر استفاده می کنیم.
threshold (InputImage, Region, 34, 255)
InputImage : عکس ورودی
Region: ناحیه نخودها و لوبیا ها
حذف نویز با تکنیک مورفولوژی openning (باز شدن)
با استفاده از opening_circle میتوان ناحیه های ریز در تصویر را حذف کرد. به عبارت دیگر این کد ناحیه بدست آمده از قسمت قبل (Region) را به عنوان ورودی می گیرید. سپس قسمت های ریز در ناحیه را حذف کرده و آن را در خروجی (RegionOpening) قرار می دهد. 3.5 پیکسل شعاع مربوط به این کد است در واقع با اجرای این کد ناحیه هایی با شعاع کمتر از 3.5 پیکسل حذف می گردند.
opening_circle (Region, RegionOpening, 3.5)
Region : ناحیه ورودی
RegionOpening : ناحیه خروجی
مجزا کردن ناحیه های به هم چسبیده با تکنیک erosion (فرسایش)
برای جداسازی ناحیه های به هم چسبیده از کد erosion_circle استفاده میکنیم. این کد ناحیه بدست آمده از مرحله قبل (RegionOpening) را به عنوان ورودی میگیرد سپس آن را با یک دایره به شعاع 21.5 فرسایش داده و در متغییر خروجی (RegionErosion) می گذارد.
erosion_circle (RegionOpening, RegionErosion, 21.5)
RegionOpening : ناحیه بدست آمده از قسمت قبل (ورودی کد )
RegionErosion : ناحیه فرسایش داده شده با یک دایره با شعاع 21.5
جداسازی (segmentaion) ناحیه ها
تا کنون ما توانسته ایم ناحیه مربوط به نخودها و لوبیاها را از پس زمینه تفکیک کنیم. حال نیاز داریم برای این که به ناحیه هر یک از لوبیاها و نخودها دسترسی داشته باشیم آنها را از هم تفکیک کنیم. به عبارت دیگر ناحیه بدست آمده در مرحله قبل در نرم افزار HALCON بایستی به ناحیه های تک تک نخود لوبیاها شکسته شود. این کار با استفاده از کد connection انجام می گردد. این کد ناحیه بدست آمده از مرحله قبل (RegionErosion) را به عنوان ورودی می گیرد و ناحیه های نخود و لوبیاها را به صورت تفکیک شده (ConnectedRegions) در خروجی قرار می دهد.
connection (RegionErosion, ConnectedRegions)
RegionErosion: ناحیه بدست آمده از مرحله قبل (ورودی)
ConnectedRegions: ناحیه های مجزا شده ( خروجی)
استفاده از مورفولوژی برای گسترش (dialation) ناحیه ها
برای اینکه بتوانیم نخودها و لوبیاها را به درستی نمایش دهیم کافی است ناحیه بدست آمده در قسمت قبل را با استفاده از مورفولوژی گسترش دهیم بدین منظور از کد dilation_circle استفاده می کنیم این کد ناحیه های کوچک بدست آمده از مرحله قبل (ConnectedRegions) را به عنوان ورودی میگیرد و آنها را با یک دایره شعاع 21.5 گسترش می دهد و نتیجه را در RegionDilation قرار می دهد.
dilation_circle (ConnectedRegions, RegionDilation, 21.5)
ConnectedRegions : ناحیه های بدست آمده از مرحله قبل (ورودی کد)
RegionDilation: ناحیه های گسترش داده شده با دایره ای به شعاع 21.5 (خروجی کد)
3- تشخیص و تفکیک لوبیا و نخود به کمک ویژگی ها
تشخیص نخودها
برای تشخیص نخودها از لوبیاها باید به دنبال ویژگی هایی بگردیم که آنها را از هم تفکیک می کند. بدین منظور از ویژگی دایره بودن استفاده میکنیم. این کار را با استفاده از کد select_shape انجام می دهیم. این کد ناحیه های نخود و لوبیا ها به عنوان ورودی می گیرد و آنهایی را که میزان دایره بودن آنها (circularity) بین 0.75 و 1 (که همان ناحیه ی مربوط به نخودها است) در خروجی (Peas) قرار می دهد.
در ویدیو توضیح دادیم که چطور پارامترهای 0.7 و 1 را با استفاده از ابزارهای نرم افزار HALCON انتخاب می کنیم.
select_shape (RegionDilation, Peas, ‘circularity’, ‘and’, 0.75, 1)
RegionDilation : ناحیه نخودها و لوبیا ها (ورودی کد)
Peas: ناحیه نخودها (خروجی کد)
تشخیص لوبیاها
حالا که نخودها رو تشخیص دادیم می تونیم به سادگی لوبیاها رو بدست بیاریم. برای این کار کافی کل ناحیه ها را (مجموع نخودها و لوبیاها) را از نخودها کم کنیم در این صورت لوبیاها باقی می ماند. این کار با استفاده از کد difference انجام می گیرید.
difference (RegionDilation, Peas, Beans)
RegionDilation : کل ناحیه (مجموع نخودها و لوبیاها)
Peas : ناحیه مربوط به نخودها
Beans : ناحیه مربوط به لوبیاها
نمایش نتایج برنامه ی پردازش تصویر
برای نمایش لوبیا و نخود از یک تابع visualize_peas_and_beans استفاده می گردد. این تابع ناحیه ی مربوط به لوبیا نخود را به همراه عکس به عنوان ورودی دریافت می کند. و سپس آن ها را روی تصویر نمایش می دهد. همانطوری که در تصویر می بینید لوبیاها و نخودها به درستی از یکدیگر تفکیک شده اند.
visualize_peas_and_beans (InputImage, Peas, Beans)
InputImage: عکس ورودی
Peas: ناحیه مربوط به نخودها
Beans: ناحیه مربوط به لوبیاها
میتوانید برای انجام پروژه های خود از متخصصان ما مشاوره بگیرید.
حقیقتا عالی و پر محتوا
خسته نباشید به تیم پرقدرت ویژن سیستمز
ممنون از توجهتون