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

شناسایی لبه در روش Canny شامل شش مرحله ست.

مرحله‌ی اول فيلتر كردن تصوير اوليه و حذف نويز از تصويره. برای این منظور فيلتر گوسين با يه ماسك ساده قابل استفاده ست که به طور انحصاري در الگوريتم Canny استفاده می‌شه.

مرحله دوم یافتن لبه‌های قوی با استفاده از gradient magnitudeدر هر نقطه ست که برای این منظور معمولاً از ماسک سوبل استفاده میشه.

|G|=|Gx|+|Gy|

مرحله سوم بدست آوردن جهت لبه هاي تصوير، با استفاده از مقدار gradient در راستای x و y که در مرحله قبل محاسبه شده. فرمول زیر برای محاسبه جهت لبه‌ها استفاده میشه.

theta = invtan (Gy / Gx)

مرحله چهارم اختصاص دادن جهت‌های قابل قبول در تصوير به جهت‌های بدست آمده ست. براي هر پيكسل در تصوير فقط 4 جهت 0 و 45 و 90 و 135 درجه امکان‌پذیر می‌کنیم. بنابراين جهت‌های بدست آمده رو به يكي از اين 4 جهت Map می‌کنیم.

مرحله پنجم suppression nonmaximum است. اين مرحله جهت لبه‌ها را بررسي می‌کنه و از بین آن‌ها، لبه‌هایی را كه نمی‌شه به عنوان لبه در نظر گرفت رو حذف می‌کنه. اين مرحله يك خط باريك رو در تصوير نهايي می‌ده.

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

الگوریتم canny در مقایسه با الگوریتم های دیگه از دقت بالای برخورداره ولی پیچیدگی محاسباتی داره و یکمی کنده.