لبه یابی تصویر با canny


فیلتر canny یک روش آشکارساز لبه در پردازش تصویر است که از یک الگوریتم 5 مرحله ای برای آشکارسازی رنج گسترده ای از لبه های تصویر استفاده می‌کند. فیلتر canny برای اولین بار توسط John F.,canny  در سال 1986  مطرح شد. در این مقاله میخواهیم نحوه آشکارسازی لبه‌های تصویر توسط فیلتر canny را توضیح دهیم.

فیلتر canny یکی از معروف ترین روشهای آشکارساز لبه در پردازش تصویر است. ساختار فیلتر canny طوری طراحی شده که به نویز حساسیت کمتری داشته باشد.  فیلتر canny برای آشکارسازی لبه های تصویر، از یک الگوریتم 5 مرحله اساسی استفاده می‌کند:

  • کاهش نویز تصویر(noise reduction)
  • محاسبه گرادیان تصویر
  • سرکوب/حذف نقاط غیربیشینه(non-maxima suppression)
  • آستانه گذاری دوگانه(double thresholding )
  • دنبال کردن لبه‌های تصویر با روش hysteresis

آشکارسازی لبه با فیلتر canny

نکته: تصویر ورودی فیلتر canny یک تصویر سطح خاکستری هست، اگر تصویر رنگی باشد، باید در ابتدا به سطح خاکستری تبدیل کنیم.

مرحله اول: حذف نویز تصویر (noise reduction)

تصویر ورودی ممکن است حاوی نویز باشد، و اگر نویز تصویر کاهش نیابد، بسیاری از نقاط تصویر به اشتباه لبه شناسایی می‌شوند. همچنین ممکن است تصویر شامل یک سری آبجکتهای خیلی کوچک باشد که مرتبط با object اصلی تصویر نباشند و بهتر است آنها نیز حذف شوند تا لبه های مناسب برای تصویر استخراج شود. برای همین در مرحله اول فیلتر canny یک فیلتر متوسط گیری از نوع گوسین روی تصویر اعمال می شود تا نویز تصویر را کاهش دهد. یکی از خاصیتهای فیلتر متوسط گیری محو کردن objectهای کوچک تصویر است. در مرحله اول علاوه بر کاهش نویز تصویر، objectهای کوچک و غیرضروری نیز از تصویر محو می شوند.

نکته: معمولا اندازه فیلتر گوسین را ([5×5],[7×7],[9×9]) و  سیگما را 1 در نظر میگیرند.

در زیر تصویر ورودی و خروجی مرحله اول نشان داده شده است(اندازه فیلتر گوسین 5×5 و سیگما 1 است.)

مرحله اول فیلتر canny: کاهش نویز تصویر

مرحله دوم: محاسبه گردیان تصویر

در مرحله دوم الگوریتم canny ، مقدار(intensity) و جهت(direction) گردایان محاسبه می شود. برای اینکار لازم است در ابتدا از فیلترهای sharpening استفاده میشود تا لبه های تصویر برجسته شوند. بهتر است فیلترهایی استفاده شوند که لبه های افقی و عمودی را برجسته کنند.  برای اینکار میتوانیم از maskهای فیلتر سوبل استفاده کنیم.

بعد از اعمال maskهای سوبل، دو تصویر ساخته میشود که در یکی از آنها لبه های افقی و در یکی از آنها لبه های عمودی تصویر برجسته شده اند.

فیلتر sobel

در ادامه طبق روابط زیر intensity و direction گردایان محاسبه می شود:

رابطه گردیان تصویر

Intensity: شدت تغییرات شدت روشنایی را مشخص می کند(مقادیر مساوی و یا بزرگتر از صفر حاصل میشود. اگر تغییرات شدت روشنایی بین پیکسلها وجود نداشته باشد مقداری برابر با صفر و یا نزدیک صفر خواهد بود. و اگر پرش شدت روشنایی بین پیکسلها وجود داشته باشد عددی بزرگتر از صفر خواهد بود ).

Direction: جهت تغییرات شدت روشنایی را مشخص میکند( که عددی بین -180:180 است).

همانطور که در شکل زیر مشاهده می‌کنید در intensity گرادیان لبه‌های تصویر بهبود پیدا کرده اند. از این مرحله به بعد، پردازش ها روی تصویر intensity گرادیان انجام می شود تا لبه ها تصویر استخراج شوند.

intensity و direction گرادیان تصویر

مرحله سوم: حذف/سرکوب نقاط غیربیشینه

هدف الگوریتم canny پیدا کردن مرکز لبه‌های تصویر است. در تصویر intensity گرادیان جاهایی که لبه وجود دارد، ضخامت بالا هست. و اگر از همین تصویر به طور مستقیم در مرحله 4 و 5 استفاده شود، لبه‌های بدست آمده در تصویر نهایی ضخامت بالایی خواهند داشت که مطلوب نیست. برای حل این مشکل، در مرحله سوم، نقاط غیر بیشینه تصویر سرکوب می‌شوند تا در نتیجه آن ضخامت لبه‌های تصویر intensity کاهش پیدا کنند و مناسب مراحل بعدی باشند.

مرحله سوم فیلتر canny: سرکوب نقاط غیربیشینه

مشخصات نقطه غیربیشنیه: یک پیکسلی نقطه غیربیشینه هست که مقدار آن از یکی از دو پیکسل کناری خود(که در یک جهت قرار دارند) کمتر باشد.

برای اینکه متوجه شویم کدام نقاط غیر پیشینه هستند لازم است که تک تک پیکسلهای تصویر intensity را پیمایش کنیم، با کمک direction گرادیان دو پیکسل کناری را در یک جهت را پیدا کنیم، سپس مقدار آنها را با مقدار intensity پیکسل مورد نظر مقایسه کنیم. اگر مقدار یکی از دو پیکسل همسایه کمتر باشد، در اینصورت پیکسل مورد نظر یک نقطه غیربیشینه هست و باید حذف شود(به صفر تبدیل شود). در غیر اینصورت پیکسل یک نقطه بیشینه هست و باید حفظ شود(مقدار خودش باقی بماند).

برای پیدا کردن دو همسایه کناری به direction هر پیکسل در تصویر direction گرادیان نگاه میکنیم. به ازای هر پیکسل یک عددی بین -180 تا 180 بدست آماده هست.

در تصویر زیر نشان میدهیم که چطور میتوان دو پیکسل کناری را برای پیکسل مورد نظر را پیدا کرد. کار خیلی ساده هست، به جهت هر پیکسل نگاه میکنیم. و در آن راستا دو پیکسل کناری را انتخاب میکنیم.

مرحله سوم فیلتر canny: سرکوب نقاط غیربیشینه

مرحله سوم فیلتر canny: سرکوب نقاط غیربیشینه

مرحله چهارم: آستانه گذاری دوگانه

آستانه گذاری دو گانه، خیلی شبیه به همان آستانه گذاری سراسری است که در فصل اول دوره پردازش تصویر آموزش دادیم. ما در آستانه گذاری سراسری یک حد آستانه برای تصویر در نظر میگرفتیم و سپس پیکسلهای تصویر را با آن مقایسه میکردیم، اگر مقدار پیکسلی بزرگتر از حد آستانه بود، به مقدار یک، و اگر کمتر از آن بود به مقدار صفر تبدیل میکردیم تا به یک تصویر باینری برسیم.

در آستانه گذاری دوگانه ما به جای تعیین یک حد آستانه، دو حد آستانه (حد آستانه بالا و حد آستانه پایین) برای تصویر گرادیان(تصویر خروجی مرحله سوم) انتخاب میکنیم. سپس مقادیر پیسکلهای  تصویر گرادیان را با دو مقدار حد آستانه مقایسه کرده و پیکسلهای تصویر را به سه گروه تقسیم میکنیم:

پیکسلهای قوی(strong pixels): پیکسلهایی که مقدار آنها بزرگتر از حد آستانه بالا است. این پیکسلها روی لبه و قرار گرفته اند و مقدار intensity آنها بالا است.

پیکسلهای غیرمرتبط(non relevant pixels): پیکسلهایی که مقدار آنها کمتر از حد آستانه پایین است. این پیکسلها در یک جایی که لبه وجود ندارد قرار گرفته اند و مقدار intensity آنها پایین است.

پیکسهای ضعیف(weak pixels): پیکسلهایی که مقدار آنها کمتر از حد آستانه بالا و بیشتر از حد آستانه پایین هست. مقدار intensity این پیکسلها نه به قدری بزرگ هست که به عنوان لبه شناسایی شوند و نه به قدری پایین هست که به عنوان غیرلبه شناسایی شوند.

مرحله چهارم فیلتر canny: آستانه گذاری دوگانه

تکیلیف پیکسلهای قوی و غیرمرتبط در این مرحله مشخص می شوند. به پیسکلهای قوی مقدار 1(لبه) اختصاص داده می شود و به پیکسلهای غیرمتربط مقدار صفر (غیرلبه) اختصاص داده میشود. ولی تکلیف پیکسلهای ضعیف در مرحله پنجم مشخص می شود.

مرحله پنجم: دنبال کردن لبه های تصویر با روش hysteresis(پسماند)

در این مرحله تکلیف پیکسلهای ضعیف مشخص میشود. هدف این است که در نهایت به یک تصویر باینری برسیم. تکلیف پیکسلهای قوی(لبه شناسایی شده اند و مقدار 1 به آنها اختصاص داده شده است)و غیرمرتبط (غیرلبه شناسایی شده اند و مقدار 0 به آنها اختصاص داده شده است) در مرحله قبل مشخص شده است و فقط پیکسلهای ضعیف باقی مونده که در این مرحله تکلیف آنها نیز مشخص میشود.  در این مرحله باید برای پیکسلهای ضعیف یک تصیمم نهایی گرفته شود، یا باید به لبه تبدیل شوند(پیکسلهای قوی) و یا حذف شوند(پیکسلهای غیرمرتبط).

برای اینکه تصیمیم بگیریم یک پیکسل ضعیف، پیسکل قوی هست یا غیرمرتبط، به همسایگی آن نگاه می‌کنیم تا ببنیم که این پیکسل آیا در کنار یک لبه قوی قرار گرفته است یا نه.

اگر در همسایگی 3×3 یک پیکسل ضعیف، حداقل یک پیکسل قوی باشد، در اینصورت این پیکسل در کنار یک لبه قوی قرار گرفته است و باید به مقدار یک (لبه) تبدیل شود و اگر در همسایگی آن هیچ پیکسل قوی وجود نداشته باشد به مقدار صفر(حذف میکنیم) تبدیل میکنیم.

مرحله پنجم فیلتر canny: دنبال کردن لبه با روش hysteresis



 

 



در فصل سوم دوره پردازش تصویر، فیلتر canny را آموزش داده ایم. در ابتدا تئوری این الگوریتم(جزئیات مراحل) توضیح داده و سپس به صورت مرحله به مرحله پیاده سازی کرده ایم و از سپس آن برای آشکارسازی لبه های تصاویر مختلف استفاده کرده ایم. اگر هدفتان یادگیری تخصصی این الگوریتم هست، پیشنهاد میکنیم به فصل سوم دوره پردازش تصویر مراجعه کنید.

موفق باشید…


دیدگاه ها

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

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

code

2 دیدگاه

  1. سارا

    با سلام ممنون از مطالب مفیدتون.
    ممنون میشم تفاوت فاحش و تخصصی فیلتر Canny را نسبت به سایر فیلترها توضیح دهید؟

    • سلام
      فیلتر CANNY یک روشی هست که به صورت سازگار میخواهد لبه های یک تصویر را استخراج کند. خروجی این فیلتر یک تصویر صفر و یک هست. جاهایی که لبه هست یک و بقیه صفر هستند. فیلترهای دیگه بالاگذر لزوما خروجی صفر و یک ندارند. در آنها اطلاعات لبه استخراج میشه. خروجی سطح خاکستری دارند. فیلتر CANNY در الگوریتمی که داره در مرحله اول از فیلترهای بالاگذر برای استخراج این اطلاعات فرکانس بالا استفاده میکند سپس در ادامه با آستانه گذاری و یه سری کارهای دیگه میاد اطلاعاتی که مرتبط به لبه ها نیست و یا لبه های ضعیف هست رو حذف میکند و فقط لبه های اصلی رو نگه میدارد در حالی که در سایر فیلترهای مکانی بالاگذر این اطلاعات حذف نمیشوند. فقط اطلاعات فرکانس بالا باقی می موند. حالا این اطلاعات میتونه مربوط به لبه باشه یا نویز و یا نقاط ضعیف لبه در تصویر