آموزش برنامه نویسی برای شناسایی و تفکیک اشیا با پردازش تصویر

در این مقاله می خواهیم نخود و لوبیاها را در تصویر زیر به کمک پردازش تصویر تفکیک نماییم. برای این کار از الگوریتم های (segmentaion) و مورفولوژی (morphology) تصویر استفاده می کنیم. در ادامه مقاله مروری بر مورفولوژی تصویر خواهیم داشت سپس پیاده سازی برنامه را در نرم افزار قدرتمند پردازش تصویر HALCON (ساخت یک شرکت تخصصی پردازش تصویر در آلمان) به صورت قدم به قدم تشریح خواهیم کرد. همچنین در ویدیو به ذکر جزییات بیشتری می پردازیم و استفاده از ابزارهای بی نظیر HALCON، بهترین نرم افزار پردازش تصویر را به شما آموزش خواهیم داد.

برای ثبت نام در “دوره آموزشی بینایی ماشین با نرم افزار هالکن ” اینجا کلیک کنید.

دانلود برنامه تفکیک نخود از لوبیا با پردازش تصویر در نرم افزار HALCON

برای دانلود برنامه تشخیص و تفکیک نخود و لوبیا با نرم افزار HALCON ایمیل خود را وارد نمایید تا لینک دانلود را دریافت نمایید. چنانچه نرم افزار هالکن را  دانلود و نصب کنید می توانید برنامه را اجرا نمایید.

  • این فیلد برای اعتبار سنجی است و باید بدون تغییر باقی بماند .

تکنیک های مورفولوژی در پردازش تصویر

به تکنیک های آنالیز و پردازش شکلهای هندسی مورفولوژی گفته می شود. چهار عدد از مهمترین عملیات مورفولوژی عبارت است از

openning یا بازکردن : موجب از بین رفتن شکل های کوچک و بیرون زدگی ها از تصویر می شود.

closing با بستن: موجب پر شدن حفره ها می گردد.

dialation  یا گسترش : ناحیه ها رو بزرگ میکند.

erosion  یا فرسایش: ناحیه ها رو فرسایش می دهد.

ما در تصویر زیر یک ناحیه نمونه کشیده ایم که روی آن با دایره نشان داده شده مورفولوژی انجام دهیم. نتیجه اجرای چهار عملیات مورفولوژی نشان داده شده است.

تکنیک های مورفولوژی در پردازش تصویر

مراحل کدنویسی در برنامه پردازش تصویر

برای حل مسئله تفکیک نخود از لوبیاها سه مرحله ی اساسی زیر وجود دارد. تک تک مراحل در ادامه مقاله تشریح شده است.

 

1- خواندن تصویر جهت پردازش 

خواند تصاویر محصول

2-بخش‌بندی تصویر (segmentation) به کمک مورفولوژی

بخش بندی (segmentaion) تصویر به کمک مورفولوژی

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 : ناحیه خروجی

حدف نویز با اعمال تکنیک باز شدن openning در مورفولوژی

مجزا کردن ناحیه های به هم چسبیده با تکنیک erosion (فرسایش)

برای جداسازی ناحیه های به هم چسبیده از کد erosion_circle استفاده میکنیم. این کد ناحیه بدست آمده از مرحله قبل (RegionOpening) را به عنوان ورودی میگیرد سپس آن را  با یک دایره به شعاع 21.5 فرسایش داده و در متغییر خروجی (RegionErosion) می گذارد.

erosion_circle (RegionOpening, RegionErosion, 21.5)

RegionOpening : ناحیه بدست آمده از قسمت قبل (ورودی کد )

RegionErosion : ناحیه فرسایش داده شده با یک دایره با شعاع 21.5

اعمال تکنیک فرسایش (erosion) با مورفولوژی

جداسازی (segmentaion) ناحیه ها

تا کنون ما توانسته ایم ناحیه مربوط به نخودها و لوبیاها را از پس زمینه تفکیک کنیم. حال نیاز داریم برای این که به ناحیه هر یک از لوبیاها و نخودها دسترسی داشته باشیم آنها را از هم تفکیک کنیم. به عبارت دیگر ناحیه بدست آمده در مرحله قبل در نرم افزار HALCON بایستی به ناحیه های تک تک نخود لوبیاها شکسته شود. این کار با استفاده از کد connection انجام می گردد. این کد ناحیه بدست آمده از مرحله قبل  (RegionErosion) را به عنوان ورودی می گیرد و ناحیه های نخود و لوبیاها را به صورت تفکیک شده (ConnectedRegions) در خروجی قرار می دهد.

connection (RegionErosion, ConnectedRegions)

RegionErosion: ناحیه بدست آمده از مرحله قبل (ورودی)

ConnectedRegions: ناحیه های مجزا شده ( خروجی)

جدا سازی (segmentaion) نخود و لوبیا با پردازش تصویر

استفاده از مورفولوژی برای گسترش (dialation) ناحیه ها

برای اینکه بتوانیم نخودها و لوبیاها را به درستی نمایش دهیم کافی است ناحیه بدست آمده در قسمت قبل را با استفاده از مورفولوژی گسترش دهیم بدین منظور از کد dilation_circle استفاده می کنیم این کد ناحیه های کوچک بدست آمده از مرحله قبل (ConnectedRegions) را به عنوان ورودی میگیرد و آنها را با یک دایره شعاع 21.5 گسترش می دهد و نتیجه را در RegionDilation قرار می دهد.

dilation_circle (ConnectedRegions, RegionDilation, 21.5)

ConnectedRegions : ناحیه های بدست آمده از مرحله قبل (ورودی کد)

RegionDilation: ناحیه های گسترش داده شده با دایره ای به شعاع 21.5 (خروجی کد)

استفاده از مورفولوژی با dialation برای گسترش ناحیه های نخود و لوبیا

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: ناحیه مربوط به لوبیاها

نمایش نخود و لوبیاهای شناسایی شده با پردازش تصویر

 

میتوانید برای انجام پروژه های خود از متخصصان ما مشاوره بگیرید.

 

مطالب مرتبط

2 دیدگاه برای “آموزش برنامه نویسی برای شناسایی و تفکیک اشیا با پردازش تصویر

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *