Hough Transform
تحويل هوف هو أسلوب في الرؤية الحاسوبية يعتمد على التصويت، ويكشف الخطوط والدوائر والأشكال حتى عند وجود فجوات أو ضوضاء في حواف الصور.
تحويل هوف أسلوب هندسي لاستخراج السمات، يكشف الخطوط والدوائر والأشكال الأخرى المحددة بالمعلمات، إذ يجعل نقاط الصورة تصوّت للأشكال المحتملة. وتعزز النقاط التي تنتمي إلى البنية نفسها بعضها بعضًا، فتنتج قمة بارزة في جدول التصويت. وفي الرؤية الحاسوبية، يساعد ذلك على استعادة الأشكال ذات الفجوات أو الحدود المشوشة.
قدّم بول ف. س. هوف هذا الأسلوب عام 1959 في تحليل آلي لصور حجرة الفقاعات، لمعالجة مسارات الجسيمات في الصور الفوتوغرافية الفيزيائية. وقدّم ريتشارد دودا وبيتر هارت التمثيل الشائع للزاوية والمسافة في ورقتهما المنشورة عام 1972 عن كشف الخطوط والمنحنيات.
آلية عمل التصويت في تحويل هوف#
يبدأ سير العمل المعتاد بـالمعالجة المسبقة للبيانات وكشف الحواف. يكشف كاشف الحواف التغيرات المحلية في السطوع، بينما يجمع تحويل هوف وحدات بكسل الحواف في بنى هندسية. وتقدّر مُشغّلة سوبل تدرجات السطوع، في حين ينتج كاني خريطة حواف رفيعة ملائمة للتصويت على الخطوط.
يُمثَّل كل خط مرشح بـ rho، وهي المسافة العمودية الموقعة من أصل الصورة، وtheta، وهي زاوية هذا العمود بالنسبة إلى المحور x. ويتيح ذلك التعامل مع الخطوط الرأسية دون ميل لا نهائي. تصوّت كل وحدة بكسل على الحافة للأزواج المتوافقة من rho وtheta في مُراكم، وهو جدول يقسم فضاء المعلمات إلى خانات منفصلة. وتسهم وحدات البكسل الواقعة على خط واحد في الخانة نفسها، حتى إن فصلت بينها مسافات في الصورة. وتحدد القمم الخطوط المدعومة.
تحدد الهندسة وقواعد التصويت المخرجات. يتعلم كاشف التعلم العميق الأنماط البصرية من بيانات التدريب؛ ويستخدم كشف هوف نموذجًا هندسيًا مختارًا وعتبات عددية بدلًا من أوزان النموذج المتعلَّمة.
تحويلات الخطوط والخطوط الاحتمالية والدوائر#
تختلف ثلاثة تطبيقات شائعة في أسلوب البحث والمخرجات:
- تحويل الخطوط القياسي: يعيد
cv2.HoughLines()أزواج rho وtheta التي تصف خطوطًا لانهائية. وتتطلب نهايات المقاطع معالجة إضافية. - تحويل الخطوط الاحتمالي: يقلل
cv2.HoughLinesP()عمليات التصويت من خلال أخذ عينات من النقاط، ويعيد نهايات المقاطع مباشرة. ويرفضminLineLengthالمقاطع القصيرة؛ بينما يتحكمmaxLineGapفي أقصى مسافة بين الأجزاء المتراصفة التي يمكن وصلها. - تحويل الدوائر: تتطلب الدوائر المرشحة مركزًا ونصف قطر. ويستخدم
cv2.HoughCircles()أسلوبًا قائمًا على التدرج، فيما تضيق حدود نصف القطر نطاق البحث. ومدخله صورة بتدرج الرمادي، بينما تتطلب دوال الخطوط صورة ثنائية.
كشف مقاطع الخطوط في 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)
image = cv2.imdecode(encoded, cv2.IMREAD_COLOR)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# استخراج الحواف للتصويت.
edges = cv2.Canny(gray, 50, 150)
# كشف المقاطع المحدودة التي تدعمها أصوات المُراكم.
lines = cv2.HoughLinesP(
edges,
1,
np.pi / 180,
threshold=80,
minLineLength=80,
maxLineGap=10,
)
if lines is not None:
for x1, y1, x2, y2 in lines[:, 0]:
cv2.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
cv2.imwrite("hough_segments.jpg", image)تُظهر الصورة المحفوظة المقاطع المُعادة باللون الأحمر. يبلغ عرض خانات rho بكسلًا واحدًا، وتمتد خانات theta درجة واحدة، ويحدد threshold=80 عتبة التصويت في المُراكم. وتُقاس إعدادات طول المقطع والفجوة بالبكسل.
التطبيقات والقيود العملية#
في معالجة المستندات، يدعم استخراج خطوط الشبكة التحليل البنيوي؛ إذ يوضح OpenCV كشف هوف على صورة سودوكو. ويحدد التصويت الدائري مراكز العملات وأنصاف أقطارها في أمثلة الدوائر والقطع الناقص ضمن scikit-image. وتصف هذه المخرجات الهندسة؛ أما كشف الكائنات فيضيف فئات دلالية، وتجزئة الكائنات تسند وحدات البكسل إلى كائنات منفردة.
يجمع نموذج أولي لقياس العوارض الفولاذية بين أقنعة YOLOv8 وحواف كاني وخطوط هوف الاحتمالية لدعم استخراج الزوايا. وتوفر تجزئة Ultralytics YOLO26 أقنعةً لـعزل الكائنات، ما يتيح استخدام النهج نفسه للمدخلات المقنّعة قبل المعالجة الهندسية المنفصلة.
تزيد خانات المُراكم الأدق استهلاك الذاكرة؛ أما الخانات الخشنة فتدمج المرشحين المتقاربين. وفي استخراج حدود الجداول، تقلل الحدود غير المكتملة عدد الحدود القابلة للكشف، بينما قد تؤدي الخطوط غير المرتبطة إلى تصحيحات غير صحيحة للحدود. وتؤدي زيادة maxLineGap إلى وصل فجوات أكبر بين الأجزاء المتراصفة؛ بينما تؤدي زيادة minLineLength إلى إزالة المقاطع الأقصر.










