Canny Edge Detection
كشف الحواف بطريقة Canny خوارزمية متعددة المراحل تقلل الضوضاء، وتكتشف التغيرات الحادة في السطوع، وتنشئ خرائط حواف رفيعة للرؤية الحاسوبية.
كشف الحواف بطريقة Canny خوارزمية متعددة المراحل لمعالجة الصور، تحدد التغيرات الحادة في السطوع وتحولها إلى خريطة حواف ثنائية رفيعة. وهي تقلل الضوضاء، وتحدد انتقالات الشدة، وتصل بين وحدات البكسل الموثوقة للحواف لتكوين حدود. وفي الرؤية الحاسوبية، تصف هذه الحدود بنية الصورة لأغراض تحليل الأشكال وقياسها.
طوّر John Canny هذه الطريقة في عام 1983 ووصفها في ورقته البحثية لعام 1986، مقاربة حسابية لكشف الحواف. ويوازن تصميمها بين ثلاثة أهداف: اكتشاف الحواف الحقيقية، وتحديد مواقعها بدقة، وإنتاج استجابة واحدة لكل حافة. و«كاشف الحواف Canny» مرادف للخوارزمية.
كيف يعمل كشف الحواف بطريقة Canny#
تجمع الخوارزمية بين المعالجة المسبقة للبيانات والترشيح وتحليل الترابط. وتؤدي مراحلها الخمس مهام مختلفة:
- تقليل الضوضاء: ينعّم التمويه الغاوسي الصورة عبر حساب متوسط وحدات البكسل القريبة بأوزان تعتمد على المسافة، فيثبط التذبذبات التي قد تنشئ حواف غير مرغوب فيها.
- تقدير التدرج: تقيس المشتقات الأفقية والرأسية سرعة تغير السطوع. ويحدد الجمع بينها قوة الحافة واتجاهًا عموديًا على الحد. يستخدم OpenCV مشتقات Sobel في هذه المرحلة.
- ترقيق الحواف: يحتفظ تثبيط القيم غير القصوى بقمم التدرج المحلية على امتداد اتجاه التدرج، منتجًا حواف ضيقة بدلًا من نطاقات عريضة.
- العتبة المزدوجة: تحدد العتبة العالية الحواف القوية، وتزيل العتبة المنخفضة الاستجابات الضعيفة. وتُعد وحدات البكسل الواقعة بين العتبتين مرشحة.
- الربط بالتباطؤ: تبقى وحدات البكسل المرشحة إذا اتصلت بحافة قوية عبر وحدات بكسل مرشحة أخرى. وتُحذف المرشحات المعزولة.
العتبات والتنعيم وأنماط الإخفاق#
تُطبَّق العتبات على قوة التدرج، لا على السطوع الخام أو ثقة النموذج. يؤدي خفضها إلى الاحتفاظ بمزيد من التفاصيل والضوضاء؛ أما رفعها فيزيل الحدود الضعيفة. كما أن رفع العتبة العالية يقلل البذور ذات الحواف القوية المتاحة للربط بالاستتباع.
يتحكم المقياس الغاوسي في مفاضلة منفصلة. فزيادة التنعيم تكبح الضوضاء، لكنها تزيل البنى الدقيقة. في مثال المربّع المشوّش في scikit-image، يؤدي تغيير الانحراف المعياري الغاوسي إلى تغيير مقدار الضوضاء التي تبقى حول المربّع.
في فحص الشقوق، تنتج الأسطح الخرسانية الخشنة حوافًا نسيجية غير مرغوب فيها ومحيطات غير مكتملة للشقوق. تؤدي زيادة العتبات إلى إزالة بعض الحواف الزائفة، لكنها تتسبب أيضًا في فقدان أجزاء حقيقية من الشقوق.
تقدّر Sobel مشتقات الشدة؛ أما Canny فتجمع بين تقدير التدرج والتنعيم والترقيق والاختيار القائم على الترابط. تقارن مرحلة الترقيق في Canny بين وحدات البكسل المتجاورة، بينما تقارن NMS لاكتشاف الكائنات بين الصناديق المتوقعة المتداخلة.
اكتشاف الحواف بخوارزمية Canny في Python#
ثبّت التبعيات باستخدام pip install opencv-python numpy. يستخدم هذا المثال OpenCV لحفظ خريطة حواف لعينة الحافلة:
from urllib.request import urlopen
import cv2
import numpy as np
with urlopen("https://ultralytics.com/images/bus.jpg") as response:
encoded = np.frombuffer(response.read(), dtype=np.uint8)
gray = cv2.imdecode(encoded, cv2.IMREAD_GRAYSCALE)
# نعّم الصورة قبل حساب تدرجات الشدة.
smoothed = cv2.GaussianBlur(gray, (5, 5), 1.4)
edges = cv2.Canny(smoothed, 50, 150, L2gradient=True)
cv2.imwrite("canny_edges.png", edges)تُظهر صورة PNG المحفوظة الحواف المحتفَظ بها باللون الأبيض على خلفية سوداء. في سير عمل اكتشاف الحواف في OpenCV، تحدد الوسيطتان الثانية والثالثة في Canny العتبتين المنخفضة والعالية. يستخدم L2gradient=True مقدار التدرج الإقليدي؛ أما الإعداد الافتراضي فيستخدم مجموع المشتقات الأفقية والرأسية المطلقة. وتغيّر هذه الخيارات قيم التدرج، وبالتالي سلوك العتبات.
التطبيقات ومهام الرؤية ذات الصلة#
تدعم Canny استخراج السمات الهندسية: إذ يطبّق مثال اكتشاف الخطوط في scikit-image الخوارزمية على صورة فوتوغرافية لمصوّر قبل أن يستخرج تحويل هوف الاحتمالي مقاطع مستقيمة. توفّر Canny وحدات بكسل الحواف؛ ويجمعها تصويت هوف في خطوط. يعيّن اكتشاف الكائنات الفئات والصناديق، بينما يعيّن تقسيم النماذج وحدات البكسل إلى كائنات منفردة.
يعيد تقسيم النماذج في Ultralytics YOLO26 أقنعةً لـعزل الكائنات، ما يتيح تحديد مناطق من الصورة لمعالجتها باستخدام Canny على نحو منفصل. ويجمع هذا بين اختيار الكائنات المتعلَّم واستخراج الحدود التقليدي.
في الذكاء الاصطناعي التوليدي، يستخدم ControlNet خرائط Canny بوصفها شروطًا مكانية لـنماذج الانتشار. وتوجّه تطبيقاته المشروطة بـCanny عملية التوليد باستخدام Stable Diffusion 1.5، بالاستعانة بالخطوط الخارجية المستخرجة إلى جانب مطالبة نصية.










