Canny

saalek110

Well-Known Member
لبه‌یاب Canny یکی از مشهورترین و قدرتمندترین الگوریتم‌های تشخیص لبه در پردازش تصویر است که در سال ۱۹۸۶ توسط John F. Canny معرفی شد. این الگوریتم چندمرحله‌ای به گونه‌ای طراحی شده که سه معیار اصلی را برآورده کند: نرخ تشخیص بالا (پیدا کردن همه لبه‌های واقعی)، مکان‌یابی دقیق (فاصله کم بین لبه تشخیص داده‌شده و واقعی) و حداقل پاسخ (تشخیص هر لبه تنها یک بار).

در این‌جا مراحل الگوریتم Canny را گام‌به‌گام شرح می‌دهم:

---

۱. کاهش نویز (صاف‌سازی گوسی)

از آنجا که تشخیص لبه به نویز بسیار حساس است، ابتدا تصویر با یک فیلتر گوسی (Gaussian Filter) صاف می‌شود تا نویز کاهش یابد، بدون آنکه لبه‌های اصلی از بین بروند. مقدار انحراف معیار (σ) تابع گوسی، میزان هموارسازی را مشخص می‌کند.

۲. محاسبه گرادیان شدت

برای یافتن لبه‌ها (محل تغییرات شدید شدت روشنایی)، گرادیان تصویر محاسبه می‌شود. معمولاً از عملگرهای لبه‌یابی مانند سوبل (Sobel) استفاده می‌شود. خروجی این مرحله دو ماتریس است:

· اندازه گرادیان (G): قدرت لبه در هر پیکسل
· جهت گرادیان (θ): زاویه لبه (معمولاً به ۴ جهت اصلی گرد می‌شود: ۰°، ۴۵°، ۹۰°، ۱۳۵°)

۳. مهار غیرحداکثری (Non-Maximum Suppression)

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

۴. آستانه‌گذاری هیسترزیس (Hysteresis Thresholding)

این مرحله هوشمندانه‌ترین بخش Canny برای تشخیص لبه‌های قطعی از لبه‌های کاذب است. از دو مقدار آستانه استفاده می‌شود:

· آستانه بالا (High Threshold): پیکسل‌هایی با گرادیان بزرگ‌تر از این مقدار، مستقیماً به‌عنوان «لبه‌های قوی» (Strong Edges) علامت‌گذاری می‌شوند.
· آستانه پایین (Low Threshold): پیکسل‌هایی با گرادیان بین این مقدار و آستانه بالا، «لبه‌های ضعیف» (Weak Edges) محسوب می‌شوند. پیکسل‌های زیر این آستانه کاملاً حذف می‌شوند.

۵. ردیابی لبه با هیسترزیس

در گام نهایی، تمام لبه‌های قوی به‌عنوان لبه نهایی در نظر گرفته می‌شوند. سپس، لبه‌های ضعیف بررسی می‌شوند: تنها در صورتی یک لبه ضعیف به لبه نهایی اضافه می‌شود که مستقیماً (از طریق ۸ همسایگی) به یک لبه قوی متصل باشد. این فرض منطقی پشت آن است که لبه‌های واقعی معمولاً پیوسته هستند و نویز منجر به لبه‌های جداافتاده و ضعیف می‌شود.

---

خروجی نهایی

نقشه باینری از لبه‌های پیوسته، نازک و با موقعیت دقیق. تنظیم دو پارامتر اصلی (σ گوسی و دو مقدار آستانه) روی کیفیت نتیجه بسیار تأثیرگذار است و اغلب به‌صورت تجربی یا با روش‌های خودکار مثل Otsu انجام می‌شود.
 

saalek110

Well-Known Member
Canny به زبان ساده:

خیلی خیلی ساده بگم، تشخیص لبه Canny مثل این می‌مونه که بخوایم خطوط اصلی یه نقاشی مدادی پر از خط‌های الکی رو تمیز و مرتب کنیم.

این کار ۴ قدم اصلی داره:

۱. اول تمیزش می‌کنیم (پاک‌کن):
همه نقطه‌ها و خط‌های الکی و نویز رو محو می‌کنیم تا کثیفی سر راهمون نباشه. (صاف‌سازی گوسی)

۲. جاهایی که رنگ عوض می‌شه رو پیدا می‌کنیم:
به تصویر نگاه می‌کنیم ببینیم کجاها یهو رنگش تیره و روشن می‌شه. اینجاها یعنی احتمالاً یه خط (لبه) هست. (محاسبه گرادیان)

۳. فقط سیم‌ظرفشویی رو نگه می‌داریم، اسفنج دورش رو می‌ندازیم:
خط‌هایی که پیدا کردیم ممکنه کلفت باشن. ما فقط تار موی وسط خط رو می‌خواهیم. هر چیزی که از وسط خط کلفت‌تر بود رو حذف می‌کنیم تا خط‌ها نازک بشن. (مهار غیرحداکثری)

۴. تست راست و دروغ (قوی‌ترین قضاوت):
اینجا دو تا چراغ قوه داریم: یه چراغ قوه خیلی قوی و یه چراغ قوه کم‌نور.

· خطی که با چراغ قوی دیده بشه، "لبه واقعی" هست.
· خطی که فقط با چراغ کم‌نور دیده بشه، "مظنون" هست.
· اگه این مظنون چسبیده باشه به یه لبه واقعی، می‌گیم آره واقعیه.
· اگه تنها و ول معطل و جدا از بقیه باشه، می‌گیم این نویزه، بندازش دور.

خلاصه نهایی: الگوریتم Canny خطوط اصلی رو تمیز، دقیق و یه تار مویی تحویلت می‌ده بدون این‌که خطوط الکی رو توش قاطی کنه.
 

saalek110

Well-Known Member
باز به زبان ساده:

خیلی خوشحالم که توضیح قبلی مفید بود. حالا می‌خوام همون چهار قدم را با ذره‌بین نگاه کنم و جزئیاتش را باز کنم، اما همچنان با همون زبان ساده و با مثال‌های ملموس.

تصور کن یه عکس سیاه و سفید از یه برگ درخت داری. هدف ما اینه که فقط رگبرگ‌ها و دوربرِ برگ رو بکشیم.

---

قدم اول: محو کردن آشغال‌ها (صاف‌سازی)

همون پاک‌کن عمل می‌کنه، اما نه مثل یه پاک‌کن معمولی. تصور کن یه شیشه مات و کدر روی عکس می‌ذاری. این کار باعث می‌شود نقطه‌های ریز و پراکنده (مثل گرد و غبار روی عکس) محو بشن. چرا این کار مهمه؟ چون اگه این کار رو نکنیم، الگوریتم ممکنه فکر کنه اون گرد و غبارها هم لبه هستن و کلی خط الکی دورشون بکشه.

· تنظیم مهم: میزان "ماتی" شیشه خیلی مهمه. اگه شیشه فقط یه کمی مات باشه، گرد و غبار محو نمی‌شه. اگه زیادی مات باشه، رگبرگ‌های نازک برگ هم محو می‌شن و از بین می‌رن.

قدم دوم: پیدا کردن تغییرات ناگهانی

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

1. شیب تغییر چقدر تنده؟ یعنی از سفید به سیاه، یهویی رد می‌شیم یا آروم آروم؟ هر چی تندتر باشه، احتمال لبه بودنش بیشتره. (به این می‌گیم قدرت گرادیان)
2. جهت تغییر کدوم طرفه؟ یعنی روشنایی از چپ به راست زیاد می‌شه یا از بالا به پایین؟ (به این می‌گیم جهت گرادیان)

· نکته فنی ساده‌شده: کامپیوتر این کار رو با دو تا "خط‌کش جادویی" انجام می‌ده. یکی خط‌کش افقی و یکی عمودی. با کشیدن این خط‌کش‌ها روی عکس می‌فهمه سایه‌ها از کدوم طرف تغییر می‌کنن.

قدم سوم: فقط تار موی وسط خط را نگه دار

قدم دوم یه مشکلی داشت: لبه‌هایی که پیدا می‌کرد، مثل ماژیک کلفت بودن، مثلاً سه پیکسل ضخامت داشتن. ولی ما یه لبه به نازکی نوک خودکار می‌خوایم.
اینجا الگوریتم روی همون خط کلفت راه می‌ره. به جهت گرادیان (که در قدم دوم فهمیدیم) نگاه می‌کنه. مثلاً می‌فهمه تغییر رنگ از چپ به راست بوده. پس نگاه می‌کنه ببینه در این ردیف از چپ به راست، کدوم پیکسل از همه قوی‌تره (بیشترین شیب رو داره). همسایه‌های چپ و راستیش رو حذف می‌کنه. فقط همون یه پیکسل وسطی رو به عنوان "خط اصلی" نگه می‌داره. این طوری یه خط کلفت سه‌تایی تبدیل می‌شه به یه خط نازک تک‌پیکسلی.

قدم چهارم: بازی پلیس و مظنون (هیسترزیس)

این هوشمندانه‌ترین و خاص‌ترین بخش الگوریتم Canny است. یادته گفتم بر اساس قدرت نور چراغ قوه قضاوت می‌کنیم؟ حالا با جزئیات بیشتر:
ما برای "قدرت گرادیان" دو تا آستانه (آستانه یعنی یه خط‌کش اندازه‌گیری) تعیین می‌کنیم: یکی "بالا" و یکی "پایین".

· متهمان رده A (لبه‌های قوی): هر پیکسلی که قدرت گرادیانش از آستانه بالا بیشتر باشه. اینا "قاطعانه لبه هستن". مثل این می‌مونه که دوربین مداربسته از یه نفر در حال دزدی فیلم گرفته باشه. تکلیفش روشنه، مجرم قطعیه.
· متهمان رده B (لبه‌های ضعیف): هر پیکسلی که قدرتش بین آستانه بالا و پایین باشه. اینا "مظنونن". مثل این می‌مونه که یه نفر فقط نزدیک صحنه جرم دیده شده. ما نمی‌دونیم دزد بوده یا رهگذر.
· افراد بی‌گناه: هر پیکسلی که قدرتش از آستانه پایین کمتر باشه. اینا رو کاملاً آزاد می‌کنیم و می‌گیم "تو لبه نیستی، برو پی کارت".

حالا می‌رسیم به بخش جذاب ماجرا که بهش می‌گن "دنبال کردن سرنخ" یا ردیابی لبه:
قاضی (الگوریتم) به تمام مظنونین (لبه‌های ضعیف) دستور می‌ده: "فقط در صورتی می‌تونین آزاد باشین (لبه محسوب بشین) که ثابت کنین با یکی از مجرمین قطعی (لبه‌های قوی) در ارتباط مستقیم هستین."
بنابراین، پیکسل‌های ضعیفی که به‌صورت زنجیروار به یک لبه قوی متصل می‌شن، زنده می‌مونن. اما اون پیکسل ضعیفی که یه گوشه تنها افتاده و به هیچ لبه قوی‌ای وصل نیست، حذف می‌شه، چون احتمالاً از نویز باقی مونده.

خلاصه‌ی حکمت این کار: لبه‌های واقعی در طبیعت معمولاً پیوسته و خط‌مانند هستن، حتی اگه یک بخششون کم‌نور شده باشه. ولی نویزها معمولاً تکی و جدا از بقیه هستن. با این ترفند، هم لبه‌های کم‌نور اما واقعی حفظ می‌شن، هم نویزها کلی حذف می‌شن، و نتیجه نهایی یک نقشه لبه تمیز، پیوسته و دقیقه.
 

saalek110

Well-Known Member
به زبان ساده:

باشه، گرفتم. می‌خوای پشت صحنه ریاضی و فرمول‌ها رو بشنوی، ولی بدون حتی یه دونه فرمول یا علامت ریاضی. در واقع می‌خوای بدونی اون عصا و شیشه مات چطور کار می‌کنن، اما همچنان به زبان خودمونی.

بیا این طوری بهش نگاه کنیم. می‌خوایم ببینیم کامپیوتر چطور این ۴ تا کار رو انجام میده:

---

۱. محو کردن (صاف‌سازی)

کامپیوتر چشم نداره که ببینه کثیفی کجاست. یه پنجره کوچیک (مثلاً ۳ در ۳ پیکسل) برمی‌داره و می‌ذاره روی عکس. بعد به ۹ تا پیکسلی که زیر این پنجره هستن، یه "ضریب اهمیت" اختصاص میده. این ضریب‌ها از یه الگوی زنگوله‌ای شکل (همون گوسی) میان: پیکسل وسطی خیلی مهمه، پیکسل‌های کناریش یه کم کمتر مهمن، و پیکسل‌های گوشه کمترین اهمیت رو دارن.

بعد هر ۹ تا رو با هم قاطی می‌کنه (میانگین وزنی) و نتیجه رو می‌ذاره توی پیکسل وسط. این پنجره روی همه عکس جارو می‌شه. پیکسل‌هایی که زیادی تیره یا روشن بودن نسبت به همسایه‌هاشون، تعدیل می‌شن. این طوری نویزهای ریز توی این قاطی شدن گم و گور می‌شن.

---

۲. پیدا کردن لبه‌ها (شیب و جهت)

یادته از دو تا خط‌کش جادویی حرف زدم؟ داستانش اینه:
کامپیوتر دو تا ماسک (مثل همون پنجره ولی جادویی) داره. یکی فقط به چپ و راست حساسه، یکی فقط به بالا و پایین.
این ماسک‌ها روی عکس کشیده می‌شن. هر جا که رنگ عوض بشه، این ماسک‌ها یه عدد تولید می‌کنن.

· اگه تغییر رنگ افقی باشه (مثلاً یه خط عمودی)، ماسک افقی جیغ می‌زنه و یه عدد بزرگ می‌ده.
· اگه تغییر رنگ عمودی باشه (مثلاً یه خط افقی)، ماسک عمودی عدد بزرگ می‌ده.

حالا کامپیوتر این دو تا عدد رو داره: یکی از ماسک افقی، یکی از ماسک عمودی. با ترکیب این دو تا (مثل پیدا کردن وتر مثلث با قائده و ارتفاع) به "قدرت لبه" می‌رسه. و با مقایسه این دو عدد، "جهت لبه" رو هم می‌فهمه (مثلاً می‌فهمه که خط مورب رو به کدوم سمته).

---

۳. نازک‌سازی (سرکوب غیرحداکثری)

اینجا دیگر خبری از قاطی کردن و ماسک زدن نیست. این‌جا کامپیوتر یه عمل مقایسه ساده انجام می‌ده.
میره سراغ هر پیکسل. از قدم قبل می‌دونه که "جهت لبه" توی این نقطه چیه. مثلاً جهت لبه افقیه. خوب، اگه جهت افقیه، پس یعنی "پایین" و "بالای" این پیکسل مهم نیست. مهم "چپ" و "راست" این پیکسل‌هاست.
پس میره و قدرت لبه خودش رو با چپ و راستیش مقایسه می‌کنه. اگه خودش از هر دو تا قوی‌تر نبود، یعنی وسط لبه نیست، پس خودش رو صفر می‌کنه (می‌گه من لبه نیستم). این کار رو برای همه انجام می‌ده و فقط اونایی که در جهت لبه، از همسایه‌هاشون قوی‌تر بودن زنده می‌مونن. نتیجه: خط کلفت تبدیل می‌شه به خط نازک.

---

۴. آستانه دوگانه (هیسترزیس)

اینجا هیچ فرمولی در کار نیست. فقط یه "بازی پیدا کردن دوست" راه می‌افته که قوانینش خیلی ساده‌ست:

قانون اول: طبقه‌بندی بر اساس قدرت.
ما دو تا عدد رو از قبل به عنوان "خط‌کش قدرت" به کامپیوتر دادیم.

· هر پیکسلی که عدد قدرتش از خط‌کش بالایی بیشتره، برچسب "لبه قطعی" می‌خوره.
· هر پیکسلی که عددش از خط‌کش پایینی کمتره، برچسب "آشغال" می‌خوره و برای همیشه حذف می‌شه.
· هر پیکسلی که عددش بین این دو خط‌کش باشه، برچسب "مظنون" می‌خوره.

قانون دوم: در آغوش کشیدن مظنون.
حالا کامپیوتر مثل یه چشم کارآگاه، تمام پیکسل‌های "لبه قطعی" رو پیدا می‌کنه. از تک‌تک این پیکسل‌ها شروع می‌کنه به شاخه شاخه شدن و مسیرش رو دنبال کردن. هر پیکسل "مظنونی" که سر راهش باشه و بهش چسبیده باشه رو تبدیل به "لبه قطعی" می‌کنه و دنباله‌اش رو می‌گیره.
این زنجیره اونقدر ادامه پیدا می‌کنه تا دیگه هیچ پیکسل مظنونی چسبیده بهش نباشه.

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

saalek110

Well-Known Member
جمع بندی به زبان ساده:
باشه، خیلی کوتاه و جمع‌وجور:

---

تشخیص لبه Canny یعنی جدا کردن خط‌های اصلی عکس از آشغال‌ها و خط‌های الکی، در چهار قدم:

۱. محو کردن آشغال‌ها: اول با یه شیشه مات، نقطه‌های ریز و نویز عکس رو محو می‌کنیم که سر راهمون نباشن.

۲. پیدا کردن لبه‌ها: با دو تا خط‌کش جادویی (افقی و عمودی) می‌گردیم ببینیم کجای عکس رنگش یهویی عوض می‌شه. هر جا تغییر شدید باشه، یعنی اونجا یه لبه هست.

۳. نازک‌سازی: لبه‌هایی که پیدا کردیم کلفتن. فقط تار موی وسطشون رو نگه می‌داریم و بقیه‌اش رو پاک می‌کنیم تا خط‌ها تمیز و دقیق بشن.

۴. بازی راست و دروغ:

· لبه‌های قوی رو قطعی قبول می‌کنیم.
· لبه‌های ضعیف رو فقط در صورتی قبول می‌کنیم که چسبیده باشن به یه لبه قوی، وگرنه می‌ندازیمشون دور (چون احتمالاً نویزن).

---

نتیجه نهایی: یه نقاشی تمیز، نازک و دقیق از خطوط اصلی عکس، بدون خط‌های الکی و آشغال.
 

saalek110

Well-Known Member
برای راضی و دوم راهنمایی:

خیلی خب، یه جمع‌بندی مفصل و خوشمزه می‌دم که انگار داری برای یه بچه دوم راهنمایی تعریف می‌کنی. یه داستانِ مرحله‌ای از تشخیص لبه Canny!

اول مفهوم راضی رو می‌گم، بعد کل کار رو با آب و تاب تعریف می‌کنم.

---

راضی کیه و چی می‌خواد؟

راضی فرضی ما یه آدم معمولیه. نه دانشمنده، نه ریاضی‌دان، نه برنامه‌نویس. فقط یه سوال توی ذهنشه: "آقا این عکس رو می‌دی به کامپیوتر، چطور می‌فهمه که خطوط اصلی کجان؟ مگه کامپیوتر چشم داره؟"

راضی از کامپیوتر فقط بلده روشنش کنه و توی اینترنت بچرخه. پس ما نباید از کلماتی مثل "گرادیان"، "هیسترزیس"، "گوسی" یا "کانولوشن" استفاده کنیم. استفاده از این کلمات یعنی راضی رو فوراً از دست دادیم.

پس باید با چیزایی توضیح بدیم که توی زندگی روزمره می‌بینه:

· شیشه مات
· ماژیک و خودکار
· چراغ قوه
· پلیس و مظنون
· زنجیر و دوستی

حالا بریم سراغ داستان کامل:

---

داستان کامل تشخیص لبه Canny برای راضی

ما یه عکس داریم، مثلاً یه عکس از یه گربه سفید روی مبل سیاه. ما می‌خوایم فقط دور گربه و خطوط بدنش رو داشته باشیم. کامپیوتر این کار رو در ۴ مرحله انجام می‌ده و نقشه نهایی لبه‌ها رو تحویلمون می‌ده.

---

مرحله صفر: کامپیوتر عکس رو چطور می‌بینه؟

(این رو باید اول بگیم وگرنه راضی نمی‌فهمه چرا مراحل بعدی رو طی می‌کنیم)

کامپیوتر که چشم نداره. عکس برای کامپیوتر یعنی یه جدول شطرنجی از عددها. هر خونه جدول یه عدده که نشون می‌ده اونجا چقدر روشنه یا تیره. مثلاً صفر یعنی سیاه مطلق، ۲۵۵ یعنی سفید مطلق. این تنها چیزیه که کامپیوتر می‌بینه: یه عالمه عدد.

---

مرحله ۱: محو کردن نویزها (شیشه مات)

تصور کن عکسی که داری روش یه عالمه گرد و غبار نشسته. اگه با خودکار روی این عکس خط بکشی، دور گرد و غبارها رو هم خط می‌کشی و نقشه‌ات کثیف می‌شه.

کامپیوتر اول یه "شیشه مات" می‌ذاره روی عکس. این شیشه یه کار جالب می‌کنه: هر نقطه از عکس رو با همسایه‌هاش قاطی می‌کنه. مثل اینکه یه قطره رنگ روی یه کاغذ خیس بچکونی، پخش می‌شه. اینطوری گرد و غبارهای ریز (نویزها) در بقیه عکس حل می‌شن و از بین می‌رن.

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

---

مرحله ۲: پیدا کردن جاهایی که رنگ عوض می‌شه

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

کامپیوتر این کار رو با "دو تا نگاه" انجام می‌ده:

· نگاه چپ-راست: می‌بینه از چپ به راست، عددها چطور عوض می‌شن.
· نگاه بالا-پایین: می‌بینه از بالا به پایین، عددها چطور عوض می‌شن.

حالا هر جا که تغییر ناگهانی باشه، کامپیوتر می‌گه "اینجا احتمالاً یه لبه‌ست!" و دو تا چیز رو یادداشت می‌کنه:
۱. قدرت لبه: تغییر چقدر شدید بود؟ (مثلاً از سفید به سیاه پریده، یا از سفید به طوسی کم‌رنگ؟)
۲. جهت لبه: این تغییر در کدوم جهت اتفاق افتاد؟ (افقی بود، عمودی بود، یا مورب؟)

---

مرحله ۳: نازک کردن خط‌ها (فقط تار موی وسط)

تو مرحله قبل، کامپیوتر با ماژیک خط کشید. خط‌ها کلفتن، مثلاً ۳ یا ۴ پیکسل پهنا دارن. ولی ما خط نازک می‌خوایم، مثل نوک خودکار.

کامپیوتر میاد و روی هر خط کلفت راه می‌ره. جهت لبه رو که از مرحله قبل یادداشت کرده بود، نگاه می‌کنه. مثلاً می‌بینه این لبه افقیه. پس چپ و راست رو نگاه می‌کنه. اگه خودش از چپ و راستی‌هاش قوی‌تر بود، می‌گه "من وسط خطم، بمونم". ولی اگه ازشون ضعیف‌تر بود، می‌گه "من جزو پهلوهای خطم"، و خودش رو حذف می‌کنه.

نتیجه: فقط اون یه پیکسلی که وسط خط بوده زنده می‌مونه. خط کلفت تبدیل می‌شه به یه تار مو.

---

مرحله ۴: جدا کردن لبه‌های واقعی از لبه‌های الکی (بازی پلیس و مظنون)

این شاهکار Canny هست. ما بعد از مرحله ۳، یه عالمه "نامزد لبه" داریم. بعضی‌هاشون واقعاً لبه هستن، بعضی‌هاشون آشغال باقی‌مونده از نویزن. چطور جدا بشن؟

کامپیوتر دو تا "آستانه" داریم، یعنی دو تا سطح:

· آستانه بالا (چراغ قوه قوی)
· آستانه پایین (چراغ قوه ضعیف)

حالا گروه‌بندی می‌کنه:

· هر پیکسلی که قدرتش از آستانه بالا بیشتر باشه: "تو قطعاً لبه‌ای، تایید شدی!"
· هر پیکسلی که قدرتش از آستانه پایین کمتر باشه: "تو هیچی نیستی، پاک شو برو!"
· هر پیکسلی که قدرتش بین این دو تا باشه: "تو مظنونی، باید ثابت کنی!"

حالا می‌رسیم به بخش جذاب: ثابت کردن بی‌گناهی.
کامپیوتر میاد سراغ لبه‌های قطعی (تایید شده‌ها). از هر کدوم مثل یه زنجیر شروع می‌کنه راه افتادن توی عکس. هر پیکسل مظنونی که به این زنجیر وصله (چسبیده) رو تایید می‌کنه و می‌گه «تو هم لبه‌ای، چون به یه لبه واقعی وصلی».

اما یه پیکسل مظنونی که یه گوشه تنهای تنها افتاده و به هیچ لبه قطعی‌ای وصل نیست، پاک می‌شه. چون احتمالاً یه تیکه نویز بوده که از شیشه مات جون سالم به در برده.

---

چرا این روش عالیه؟

چون لبه‌های واقعی در طبیعت معمولاً پیوسته هستن. یعنی اگه یه جا لبه‌ای هست، به یه لبه دیگه می‌چسبه (مثلاً دور گربه یه حلقه پیوسته‌ست). ولی نویزها معمولاً تنها و تک و توک هستن.

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

---

خروجی نهایی چیه؟

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

---

همین! این بود کل کار الگوریتم Canny. یک روش چهار مرحله‌ای که از شیشه مات شروع می‌شه، خطوط رو پیدا می‌کنه، نازکشون می‌کنه، و با یه بازی پلیسی، آشغال‌ها رو می‌ریزه دور و فقط لبه‌های واقعی رو تحویل می‌ده.
 

saalek110

Well-Known Member
تعریف ۴ اصطلاح به زبان ساده:

عالیه! بریم سراغ این چهارتا کلمه که قول داده بودم به زبون خودمونی بگم. راضی ما با اینا حال می‌کنه چون کلمه های قلنبه‌سلنبه رو می‌شنوه ولی نمی‌فهمه... تا الآن.

---

۱. گرادیان (Gradient)

ترجمه ساده: شیب تپه

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

اگه ازت بپرسن "شیب اون تپه چقدر بود؟" می‌گی "خیلی زیاد بود. یهویی اوج گرفت."

حالا تو عکس، هر جا رنگ عوض می‌شه (مثلاً از سفید به سیاه)، انگار یه "تپه رنگی" داریم.
گرادیان یعنی تندی این تپه.

· اگه از سفید آروم آروم برسیم به سیاه: گرادیان کمه (شیب کم)
· اگه یهویی یه خط مشکی ببینیم توی یه صفحه سفید: گرادیان زیاده (شیب زیاد، یه پرتگاه)

کامپیوتر عاشق پرتگاه‌هاست. هر جا گرادیان (شیب) زیاد باشه، می‌گه "اینجا لبه‌ست!"

---

۲. گوسی (Gaussian)

ترجمه ساده: الگوی زنگوله‌ای همسایه‌ها

این یکی کمی بامزه‌ست. یه آقایی به اسم گاوس یه فرمول ریاضی درآورد که شکلش شبیه یه زنگوله یا یه تپه گِرده‌ست.

تو زندگی واقعی، این شکلی کار می‌کنه:
تصور کن یه لامپ روشن داری. نور لامپ دقیقاً زیر خودش خیلی زیاده. یه کم دورتر، نور کمتر می‌شه. بازم دورتر، نور خیلی کم می‌شه تا برسه به تاریکی.

این "کم شدن تدریجی اهمیت از مرکز به اطراف" رو می‌گیم گوسی.

تو الگوریتم Canny:
وقتی می‌خوایم عکس رو محو کنیم (همون شیشه مات)، به هر پیکسل یه وزن می‌دیم.

· پیکسل وسط: وزن خیلی زیاد (خیلی مهمه)
· پیکسل‌های بغلی: وزن متوسط
· پیکسل‌های دورتر: وزن کم

بعد همه رو با این وزن‌ها قاطی می‌کنیم. اینطوری محو شدن طبیعی‌تر و نرم‌تر اتفاق می‌افته. این رو می‌گن "فیلتر گوسی" یا همون شیشه مات.

---

۳. کانولوشن (Convolution)

ترجمه ساده: لیسه کشیدن یه اسکنر جادویی روی عکس

این از اون کلمه‌هاس که پشتش یه فکر خیلی ساده خوابیده:
یه پنجره کوچیک (مثلاً ۳ در ۳) داری که هر خونه‌اش یه عدده. به این می‌گیم "فیلتر" یا "ماسک".

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

بعد پنجره رو یه پیکسل می‌کشی جلو. دوباره همون کار.
بعد دوباره یه پیکسل جلوتر.
و همینطور کل عکس رو جارو می‌کنی.

کانولوشن یعنی همینه: لیسه کشیدن یه پنجره جادویی روی کل عکس.

تو هر مرحله از Canny (چه شیشه مات، چه پیدا کردن لبه‌ها) از همین تکنیک لیسه کشیدن استفاده می‌شه. فقط هر بار، عددهای داخل پنجره فرق می‌کنه:

· اگه عددها "وزن زنگوله‌ای" باشن: محو کردن
· اگه عددها "خط‌کش افقی" باشن: پیدا کردن لبه‌های عمودی

همه‌ش همون لیسه کشیدنه.

---

۴. هیسترزیس (Hysteresis)

ترجمه ساده: تا دوستت رو نبینم قبولت ندارم

این رو گفتم دیگه، ولی جمع‌بندی کنم:
یادته تو مدرسه، بعضی وقتا یه بچه رو فقط وقتی به گروه راه می‌دادن که داداش بزرگش یا دوست صمیمیش توی اون گروه باشه؟ می‌گفتن "باشه تو هم بیا، چون با فلانی هستی". ولی اگه تنها می‌اومدی، می‌گفتن "نه، غریبه‌ای، نمی‌شناسیمت".

هیسترزیس یعنی همین قانون دوستی:

· لبه قوی: بچه پررو و شناخته‌شده گروه، همه قبولش دارن، خود به خود عضو گروهه.
· لبه ضعیف: بچه ساکت و ناشناخته.
· اگه دستش توی دست یه لبه قوی باشه: "آها، با اومدی؟ خب باشه تو هم بیا تو گروه."
· اگه یه گوشه تک و تنها ایستاده باشه: "نه بابا، تو رو نمی‌شناسیم، برو پی کارت."

کلمه هیسترزیس یعنی "وابسته به تاریخچه". یعنی برای قضاوت در مورد یه پیکسل مظنون، فقط قدرت خودش مهم نیست، اینم مهمه که از کجا اومده و به کی وصله. زنجیر دوستی رو بررسی می‌کنیم.

---

جمع‌بندی با یه مثال داستانی:
تصور کن داری یه خط‌کش می‌کشی روی عکس (کانولوشن). به هر جا که می‌رسی، می‌پرسی "شیب تغییر رنگ اینجا چقدره؟" (گرادیان). اگه صدا از یه حدی بلندتر بود، می‌گی "اینجا لبه‌ست!"، ولی قبلش صداهای ریز رو با یه گوشی نرم‌کننده که صداهای زمینه رو حذف می‌کنه، خفه کردی (گوسی). آخر سر، فقط صداهایی رو باور می‌کنی که یا خودشون خیلی بلند باشن، یا به یه صدای بلند وصل باشن (هیسترزیس). تمام!
 

saalek110

Well-Known Member
کلش به زبان ساده:
خیلی خوشحالم که دوست داشتی! حالا می‌خوام یه روایت کامل و یک‌پارچه بدم، انگار که یه داستان جنایی-پلیسی از اول تا آخر تعریف می‌کنم. راضی ما که بچه دوم راهنماییه، باید تا آخر داستان دهنش باز بمونه و بگه "آهاااان، حالا فهمیدم!"

---

داستان یک کارآگاه به اسم Canny: مأموریت پیدا کردن خطوط اصلی

ما اینجا یه داستان داریم. یه کارآگاه باهوش به اسم "اِستخراج‌کننده لبه Canny" (همون الگوریتم خودمون) مأموریت داره از یه عکس، فقط خطوط اصلی رو دربیاره. عکس مثل یه صحنه جرم می‌مونه. پر از سرنخ (خطوط) و کلی آشغال و چیزای الکی (نویز). کارآگاه Canny باید فقط حقیقت رو بگه: خطوط اصلی چی بودن؟

با هم قدم‌به‌قدم می‌ریم توی مأموریتش:

---

قدم صفر: کارآگاه عکس رو چطور می‌بینه؟

(مهمه اینو بگیم وگرنه راضی گیج می‌شه)

اول از همه، کارآگاه ما که آدم نیست، یه کامپیوتره. چشم نداره. تنها چیزی که می‌بینه یه جدول شطرنجی بزرگه از اعداد. هر خونه یه عدد داره که نشون می‌ده اون نقطه چقدر روشن یا تاریکه. مثلاً ۰ یعنی سیاه مطلق، ۲۵۵ یعنی سفید مطلق. پس کل عکس براش یه دریای اعداده. هر جا که توی این اعداد یه تغییر ناگهانی باشه (مثلاً از ۲۰۰ به ۱۰)، یعنی احتمالاً یه خط (لبه) وجود داره.

خب، مأموریت شروع می‌شه:

---

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

تصور کن از صحنه جرم یه عکس گرفتن، اما نگاتیو عکس پر از گرد و غبار ریزه. اگه کارآگاه با ذره‌بین بره روی هر دونه گرد، ممکنه فکر کنه اونم یه سرنخه. پس اول باید عکس رو تمیز کنه.

ابزارش چیه؟ یه "شیشه مات مخصوص" به اسم فیلتر گوسی.

حالا این شیشه چطور کار می‌کنه؟ کارآگاه یه پنجره کوچیک (مثلاً ۳×۳) رو می‌ذاره روی یه نقطه. ولی زیر این شیشه، نقطه وسط خیلی واضح دیده می‌شه، نقطه‌های کناری یه کم محوتر، و گوشه‌ها خیلی محوتر. (همین کاهش اهمیت تدریجی که بهش می‌گیم گوسی، اسم یه دانشمند آلمانیه که این الگوی زنگوله‌ای شکل رو کشف کرد.)

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

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

---

۲. پیدا کردن رد پاها و لکه‌ها (محاسبه گرادیان)

حالا که عکس تمیزه، کارآگاه می‌خواد ببینه کجاها "تغییر ناگهانی" توی رنگ عکس اتفاق افتاده. چون لبه یعنی همون تغییر ناگهانی.

به هر پیکسل که می‌رسه، می‌پرسه: "اینجا شیب تغییر رنگ چقدره و به کدوم سمته؟" (این شیب تغییر رو می‌گیم گرادیان).

برای فهمیدنش، دو دستیار داره که هر کدوم یه خط‌کش جادویی دارن:

· دستیار اول (خط‌کش افقی): فقط به تغییرات چپ-راست حساسه. اگه یه خط عمودی باشه (تغییر رنگ از چپ به راست)، این دستیار جیغ می‌زنه و یه عدد بزرگ نشون می‌ده.
· دستیار دوم (خط‌کش عمودی): فقط به تغییرات بالا-پایین حساسه. اگه یه خط افقی باشه، این یکی جیغ می‌زنه.

کارآگاه هر دو تا خط‌کش رو روی کل عکس می‌کشه (باز همون کانولوشن یا لیسه کشیدن). از ترکیب عدد این دو تا (مثل پیدا کردن وتر مثلث) می‌فهمه که:

· قدرت لبه: چقدر این تغییر تند و شدید بوده؟ (عدد بزرگ یعنی لبه قوی)
· جهت لبه: این تغییر در چه سمتی اتفاق افتاده؟ (افقی، عمودی یا مورب)

حالا کارآگاه یه نقشه داره: جاهایی که عدد قدرتش بالاست، "نامزد لبه بودن" علامت‌گذاری شدن. ولی یه مشکل هست...

---

۳. نازک‌سازی: از ماژیک به خودکار (مهار غیرحداکثری)

لبه‌هایی که پیدا شدن، مثل این می‌مونه که با ماژیک ضخیم دورشون خط کشیده باشیم. مثلاً یه خط سه پیکسلی. اما کارآگاه یه نقشه دقیق و با نوک خودکار می‌خواد.

پس میاد و روی هر خط کلفت راه می‌ره. جهت لبه رو که از مرحله قبل می‌دونه (مثلاً جهت افقیه). نگاه می‌کنه به همسایه‌های چپ و راست.

· اگه خودش از چپ و راستی‌هاش قوی‌تر باشه، می‌گه "من مرکز خطم" و زنده می‌مونه.
· اگه ازشون ضعیف‌تر باشه، می‌گه "من حاشیه خطم و زیادی‌ام" و خودش رو پاک می‌کنه.

این کار باعث می‌شه از هر خط کلفت، فقط یه تار مو باقی بمونه. مرزها حالا دقیق و نازک شدن.

---

۴. شرلوک هلمس بازی: کدومشون لبه واقعیه؟ (هیسترزیس)

حالا کارآگاه کلی خط نازک داره. ولی بعضی‌هاشون واقعاً لبه هستن، بعضی‌هاشون هنوز آشغال یا لکه‌های الکی‌ان که از شیشه مات در رفتن. اینجا باهوش‌ترین بخش مأموریت شروع می‌شه: بازی پلیس و مظنون با قانون زنجیره دوستی.

کارآگاه دو تا چراغ قوه (آستانه) تعیین می‌کنه:

· چراغ قوه پرنور (آستانه بالا)
· چراغ قوه کم‌نور (آستانه پایین)

و سه دسته تشکیل می‌ده:

· لبه‌های قوی (متهمین قطعی): هر پیکسلی که حتی با چراغ کم‌نور هم پرنور دیده بشه (قدرتش از آستانه بالا بیشتره). اینا مستقیم می‌رن زندان. قطعاً لبه هستن.
· لبه‌های ضعیف (مظنونین): هر پیکسلی که فقط با چراغ پرنور دیده بشه (قدرتش بین دو آستانه‌ست). تکلیفشون روشن نیست. شاید لبه باشن، شایدم آشغال.
· بی‌گناهان (آشغال‌ها): هر پیکسلی که حتی با چراغ پرنور هم دیده نشه (قدرتش زیر آستانه پایین). کلاً آزاد می‌شن و پرونده‌شون بسته می‌شه.

حالا می‌رسیم به خود قانون هیسترزیس که یه اسم قلنبه‌سلنبه برای "ردیابی دوستی"ست:
کارآگاه میاد سراغ تک‌تک متهمین قطعی (لبه‌های قوی). از هر کدوم، مثل یه زنجیر، شروع می‌کنه به راه رفتن توی عکس.
هر پیکسل "مظنونی" که دستش توی دست این زنجیر باشه (بهش چسبیده باشه)، کارآگاه می‌گه: "آها، تو هم با اینایی؟ پس تو هم لبه‌ای. بفرما داخل گروه!" و با این کار، اون پیکسل مظنون هم تبدیل به "لبه قطعی" می‌شه و زنجیره ادامه پیدا می‌کنه.

اما اگه یه پیکسل مظنون یه گوشه دور افتاده باشه و به هیچ لبه قطعی‌ای وصل نباشه، کارآگاه می‌گه: "تنهایی؟ ول معطلی؟ پس نویزی. پاکش کن!"

فلسفه‌اش اینه: لبه‌های واقعی (مثل دور گربه) یه حلقه پیوسته هستن. حتی اگه یه تیکه‌اش کم‌نورتر باشه، بازم چون به بقیه حلقه وصله، واقعیه. ولی نویزها همیشه تنها و تک و توک هستن.

---

پایان مأموریت: نقشه نهایی

کارآگاه Canny مأموریتش رو تموم می‌کنه و یه برگه سفید به ما تحویل می‌ده که روش فقط خطوط اصلی عکس با جوهر مشکی کشیده شدن. خطوطی که:

· تمیزن (نویز ندارن)
· نازکن (ضخامت یک پیکسل)
· دقیقن (همونجایی هستن که باید باشن)
· و به هم پیوسته‌ان (شکسته و تکه‌تکه نیستن).

---

و این بود داستان کامل الگوریتم Canny: کارآگاهی که با شیشه مات، خط‌کش جادویی، خودکار نوک‌ریز، و یه قانون ساده "دوست‌یابی" می‌تونه از دل یه عکس شلوغ، حقیقت رو بیرون بکشه.
 

saalek110

Well-Known Member
کارآگاه کنی:

اوه، چه سوال باحالی!

اگر Canny (که درستش "کَنی" خوندنشه، نه "کَنی" مثل قنات، بلکه مثل اینکه بگی "کنی" با کسره) رو بخوام به یه آدم یا شغل تشبیه کنم، می‌گم:

---

کنی یه کارآگاه بازنشسته‌ست که شده مرزبان حرفه‌ای!

اسم کاملش: کارآگاه جان کَنی (John Canny، مخترع الگوریتم).

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

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

ویژگی‌های شخصیتی‌اش:

· حواس‌ش جمعه: اول گرد و خاک نقشه رو پاک می‌کنه که گول نخوره (فیلتر گوسی).
· چشماش تیزه: جاهایی که رنگ خاک عوض می‌شه رو فوری تشخیص می‌ده (محاسبه گرادیان).
· دستش ظریف و دقیقه: خط گچی‌اش کلفت نیست، یه خط خیلی نازک و تمیز می‌کشه (نازک‌سازی).
· آدم سخت‌گیر و باهوشیه: مرزهایی رو قبول داره که یا خودشون خیلی واضح باشن، یا حداقل به یه مرز واضح وصل باشن (هیسترزیس). خطوط الکی و جدا‌افتاده رو قبول نمی‌کنه.

خلاصه:
کنی اون نقشه‌بردار قدیمی‌ای هست که می‌گه: "من نقشه کامل زمین رو نمی‌خوام. فقط خط‌های مرزی واقعی رو با گچ سفید برام بکش. تمیز، نازک و دقیق. بدون هیچ خط اضافی."

---

پس کنی یه نقشه‌بردار مرزهای اطمینان‌بخش هست.
 

saalek110

Well-Known Member
در مورد کارآگاه کنی:

آفرین، این خوبه! بریم یه کم شخصیت‌پردازی براش بکنیم:

---

سن و سال کنی

خود الگوریتم Canny رو آقای John F. Canny (جان اف. کَنی) در سال ۱۹۸۶ معرفی کرد. یعنی الآن (۲۰۲۶) دقیقاً ۴۰ سال از تولد این الگوریتم می‌گذره.

حالا اگه کارآگاه Canny رو مثل یه آدم تصور کنیم:
یه آقای جاافتاده و کارکشته حدوداً ۶۰-۶۵ ساله. موهاش جو گندمی زده، عصری یه فنجون قهوه می‌خوره، کلی تجربه داره، دیگه هیچی نمی‌تونه بهش کلک بزنه. چشماش هنوز تیزه، دستش هم نمی‌لرزه. نمونه واقعی یه متخصص کهنه‌کار.

---

آیا از شغلش راضی‌ست؟

بله و نه. یه راضیِ نسبتاً راضی!

چرا راضی‌ست؟

· هنوز که هنوزه بعد از ۴۰ سال، هر کی می‌خواد یه کار درست و حسابی تو تشخیص لبه انجام بده، میاد سراغ Canny. تو OpenCV (کتابخونه معروف پردازش تصویر) اسم تابعش هست Canny(). همه می‌شناسنش.
· کارش همیشه تمیزه. هیچ مرزی رو گم نمی‌کنه، هیچ مرز دروغی هم نمی‌کشه.
· شاگرداش (نسل‌های بعدی) کلی الگوریتم جدیدتر دادن، ولی هنوزم می‌گن "برای خیلی کارا، Canny قدیمی از همه بهتر جواب می‌ده."

چرا یه ذره ناراضی‌ست؟

· بعضی از جوون‌ترها میان می‌گن "آقای Canny، دیگه دوران شما تموم شده، ما با یادگیری عمیق (Deep Learning) میریم جلو، بدون دردسر، با کلی دیتا." اونم یه نگاه بهشون می‌کنه، قهوه‌اش رو می‌ذاره زمین و می‌گه: "هر چی باشه، لبه رو یا هست یا نیست. کارِ من ساده‌ست و برق می‌ره، کامپیوترت هنگ نمی‌کنه، GPU هم نمی‌خواد. کارم حرف نداره."
· یه کم دلش می‌سوزه که بعضی از تازه‌کارها تنظیمات دستی‌اش (اون دو تا آستانه) رو بلد نیستن خوب تنظیم کنن و بعد می‌گن "Canny خراب کار می‌کنه!" می‌گه: "تقصیر من نیست که رانندگی بلد نیستی، ماشینم که سالمه!"

---

خلاصه:
کنی یه متخصص ۶۰-۶۵ ساله محترمه. از شغلش راضی‌ست چون کارش موندگار شده و همه قبولش دارن. ولی یه کمی هم غر می‌زنه از دست بچه‌های جدید که فکر می‌کنن با هوش مصنوعی می‌شه همه کار رو از او بهتر کرد. در دلش می‌دونه که "سادگی و دقت من، یه چیز دیگه‌ست."
 

saalek110

Well-Known Member
رابطه کنی و سوبل:

اگه بخوام رابطه‌شون رو مثل آدم‌ها توصیف کنم، می‌تونیم بگیم Sobel همکار قدیمی و ریزه‌کار کنی تو مرحله دوم مأموریتشه.

داستانش اینه:

· Sobel یه متخصص چابک و سریعه: کارش اینه که با دو تا خط‌کش جادوییش (افقی و عمودی) سریع یه نگاه به عکس تمیز شده بندازه و بگه: "ببین، اینجاها شیب تغییر رنگ داریم. قدرت شیب اینقدره و جهتش هم فلان سمته." کارش رو سریع و ساده انجام میده، اما خط‌هایی که می‌کشه یه کم کلفت و زبره.
· کنی رئیس کل مأموریت و دقیق‌نگر و وسواسیه: اون میاد و می‌بینه اطلاعاتی که Sobel داده خوبه، اما کافی نیست. کنی از خودش نیست که بگه "کار تموم شد!" بلکه این اطلاعات رو می‌گیره و می‌ره سراغ وسواس‌های خودش: اول خط‌های Sobel رو با نازک‌سازی مثل تار مو می‌کنه، بعد با اون بازی پلیس و مظنون کلی از خط‌های الکی رو می‌ریزه دور.

یه جورایی می‌شه این خلاصه رو گفت:

Sobel به تنهایی یه لبه‌یاب ساده و سریع و تا حدی شلخته‌ست.

اما کنی خیلی باهوش‌تر از این حرفاست. اون میاد و Sobel رو مثل یه ابزار یا دستیار توی یکی از مراحل کارش استخدام می‌کنه . در واقع، مغز متفکر کل عملیات کنی هست، ولی توی مرحله "پیدا کردن شیب لبه‌ها"، به جای اینکه خودش مستقیماً بره جلو، داد می‌زنه: "Sobel! یه اسکن سریع از این عکس بگیر و یه گزارش از شدت و جهت شیب‌ها بده به من." Sobel هم این کار رو خیلی خوب بلده و سریع انجامش میده. بعد کنی اطلاعات رو می‌گیره و مراحل پیچیده خودش (نازک‌سازی و آستانه دوگانه) روش اعمال می‌کنه.

پس یه رابطه "رئیس-کارمند" تخصصی و کاملاً حرفه‌ای دارن. کنی نقشه نهایی رو می‌کشه و اسمش روش می‌مونه، ولی بی‌زحمت نیست و می‌دونه که Sobel یکی از پیچ‌گوشتی‌های توی جعبه ابزارشه که کار رو برایش خیلی راحت کرده .
 

saalek110

Well-Known Member
رابطه سوبل و کنی:
آخ، چه سوال باحالی! بریم یه سر به ذهن سوبل بزنیم و ببینیم اون از این رابطه چی فکر می‌کنه.

---

سوبل: دستیار پرانرژی ولی یه ذره دل‌چرکین

سوبل (Sobel) همکار قدیمی‌تر کنی نیست. در واقع سوبل یه جوان‌ترِ پرانرژی و سریعِ کار راه بندازه. (الگوریتم Sobel سال ۱۹۶۸ معرفی شد، یعنی ۱۸ سال قبل از Canny.)

تصور کن یه عکاس خبرنگارِ چابک و فرز که دوربینش همیشه آماده‌ست. یه نگاه به صحنه می‌کنه و فوری می‌گه: "لبه‌ها اینجان! فلان قدرتن، فلان جهتن." کارش رو تند و تند انجام می‌ده و تحویل می‌ده.

---

نظر سوبل درباره کنی

صادقانه بگم؟ یه حس عجیب و متناقض داره.

چیزایی که سوبل از کنی خوشش میاد:

· کنی باعث شد سوبل همیشه سر کار باشه. هر کی می‌خواد Canny اجرا کنه، اول سوبل رو صدا می‌زنه. پس سوبل بیکار نمونه!
· کنی خیلی محترمانه باهاش برخورد می‌کنه. نمی‌گه "کار تو آشغاله". می‌گه "اطلاعاتت خوبه، فقط بذار روش یه کم کار کنم."

چیزایی که سوبل رو اذیت می‌کنه:

· سوبل تنهایی هم می‌تونست یه نقشه لبه بده. اما همیشه اسم نهایی کار رو کنی می‌بره! سوبل می‌گه: "داداش من زحمت اسکن رو کشیدم، آخرش همه می‌گن 'لبه‌های Canny'، انگار من اصلاً وجود ندارم."
· کنی عیب‌های سوبل رو خوب می‌دونه و جلوی همه می‌گه: "سوبل خوبه، ولی خروجیش خیلی شلخته‌ست، نازک‌سازی نداره، نویز رو هم حذف نمی‌کنه." سوبل اینو می‌شنوه و تو دلش می‌گه: "خب بابا، من برای این کارا ساخته نشدم!"

---

خلاصه

سوبل نظر مثبت-منفی داره نسبت به کنی:

· مثبته چون بهش کار و اعتبار غیرمستقیم داده
· منفیه چون همیشه نقش مکمل داره، نه قهرمان داستان

مثل آشپزی که مواد رو آماده می‌کنه، ولی سرآشپز اسم خودش رو می‌ذاره رو غذا. سوبل با خودش می‌گه: "من پیاز رو سرخ کردم، من فلفل رو خرد کردم... ولی بازم می‌گن 'غذای Canny'."

اما در نهایت، سوبل و کنی همدیگه رو دوست دارن چون می‌دونن هر کدوم یه تیکه از پازل هستن و بدون هم یه چیزیشون کمه.
 

saalek110

Well-Known Member
دیگر دوستان ، دیگر روشها:

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

بریم با هم دیگه دوستاشون رو ببینیم:

---

۱. پرویت (Prewitt): همکار قدیمی سوبل، یه کم ساده‌تر و بی‌آلایش‌تر

پرویت (که درستش پِرویت خونده می‌شه) مثل برادر بزرگ‌تر و ساده‌تر سوبل می‌مونه. اونم همون کار پیدا کردن لبه‌ها رو با خط‌کش‌های افقی و عمودی انجام می‌ده، ولی خط‌کش‌هاش یه کم ابتدایی‌تر و صاف‌تر هستن.

رابطه‌اش با سوبل و کنی:

· سوبل و پرویت خیلی به هم نزدیکن، انگار از یه خانواده‌ان.
· تفاوتشون چیه؟ پرویت یه خورده ساده‌لوح‌تره. خط‌کش‌های Sobel یه کم وزن‌دهی بهتری دارن (به مرکز بیشتر اهمیت می‌ده)، ولی پرویت می‌گه: "همه همسایه‌ها به یه اندازه مهمن!"
· کنی با پرویت هم کار می‌کنه گاهی، ولی ته دلش سوبل رو بیشتر قبول داره، چون سوبل نرم‌تر و دقیق‌تر شیب‌ها رو می‌سنجه. با این حال، پرویت رو هم به عنوان یه دوست قدیمی قبول داره.

---

۲. رابرتز (Roberts): پیرمرد ساده و تندمزاج محله

رابرتز از همه قدیمی‌تره! (سال ۱۹۶۵). یه الگوریتم خیلی ساده و جمع‌وجور که فقط به چهارتا پیکسل نگاه می‌کنه (دو تا ضربدری). خیلی سریع کار می‌کنه، اما خیلی هم شلخته‌ست. انگار با یه مداد خیلی زبر و با عجله خط می‌کشه.

رابطه‌اش با بقیه:

· سوبل و پرویت بهش احترام می‌ذارن چون "پیشکسوت" محله‌ست.
· ولی کنی یه ذره ابرو بالا می‌ندازه و می‌گه: "رابرتز جان، کارت خوبه برای کارای خیلی فوری... ولی خروجی‌ات پر از نویزه بابا."
· رابرتز هم که پیر و غرغروئه، می‌گه: "جوان، من راه رو برای شما باز کردم!"

---

۳. شَِر (Scharr): پسرخاله دقیق و آلمانی سوبل

شر یه الگوریتم آلمانیِ بسیار دقیق و وسواسیه. (سال ۲۰۰۰ معرفی شد، از همه جوون‌تره). خط‌کش‌های مخصوص خودش رو داره که یه کم پیچیده‌تر از سوبل هستن ولی دقتشون بالاتره.

رابطه‌اش با بقیه:

· شر میاد و می‌گه: "سوبل، کارت خوبه، ولی اگه زاویه لبه‌ها یه کم خاص باشه، تو خطا داری. من این مشکلو حل کردم."
· سوبل یه نگاه بهش می‌کنه و می‌گه: "خب باشه، تو مال کارای فوق‌العاده دقیق و آزمایشگاهی هستی. من مخصوص کارای عمومی و روزمره‌ام. هردومون خوبیم."
· کنی هم از شر خوشش میاد، چون خودش عاشق دقت و تمیزی کاره. ولی ترجیح می‌ده همچنان با سوبل کار کنه، چون هماهنگ‌ترن و سوبل رو بهتر می‌شناسه.

---

۴. لاپلاسین (Laplacian): همسایه عجیب و منزوی که تنها کار می‌کنه

لاپلاسین یه شخصیت کاملاً متفاوت تو این محله‌ست. اون از روش "شیب" استفاده نمی‌کنه. در عوض میاد و می‌گه: "من دنبال جاهایی می‌گردم که انحنای سطح تغییر می‌کنه، یعنی جایی که شیب درجه دو صفره." (آره، یه کم عجیب و غریب حرف می‌زنه )

رابطه‌اش با بقیه:

· سوبل و پرویت ازش می‌ترسن یه کم، چون روشش فرق داره و حرفاش رو نمی‌فهمن.
· کنی بهش احترام می‌ذاره، ولی می‌دونه که لاپلاسین به شدت به نویز حساسه و یه ذره دست و دل‌باز همه چیز رو لبه اعلام می‌کنه. کنی می‌گه: "لاپلاسین رو بردار، یه فیلتر گوسی بذار قبلش، می‌شه یه چیز ترکیبی به اسم Laplacian of Gaussian که بد نیست، ولی بازم به پای من نمی‌رسه!"

---

جمع‌بندی: همه اعضای کوچه لبه‌یاب‌ها

اسم شغل/لقب نسبت با کنی و سوبل
Sobel دستیار سریع و چابک همکار مستقیم و مورد اعتماد کنی
Prewitt دستیار ساده‌تر و قدیمی دوست خانوادگی، برادر ساده Sobel
Roberts پیرمرد سریع و شلخته پیشکسوت محله، کنی گاهی بهش لبخند می‌زنه
Scharr پسرخاله دقیق آلمانی رقیب-دوست Sobel، مورد احترام کنی
Laplacian همسایه عجیب با روش متفاوت همکار غیرمستقیم، کنی روش رو قبول داره اما نه کاملاً

---

پس آره، کنار خونه کنی و سوبل که پرسه بزنی، کلی لوح یادبود و پلاک‌های مختلف از این الگوریتم‌ها هست. محله شلوغیه! ✨
 

جدیدترین ارسال ها

بالا