Sobel Operator
مؤثر سوبل هو مرشح صور بحجم 3×3 يقيس تدرجات السطوع لاكتشاف الحواف واستخراج السمات وتقسيم الصور.
مؤثر سوبل هو مرشح صور ثابت يقدّر سرعة تغيّر السطوع عبر الصورة واتجاه هذا التغيّر. وينتج تدرجات للصورة: تشير الاستجابات الكبيرة إلى انتقالات حادة، بينما تدل الاستجابات الصغيرة على مناطق متجانسة نسبياً. ويُعرف أيضاً باسم مرشح سوبل أو مؤثر سوبل–فيلدمان، وهو أداة أساسية في اكتشاف الحواف واستخراج السمات في الرؤية الحاسوبية.
قدّمه إيروين سوبل وغاري فيلدمان في مشروع الذكاء الاصطناعي بجامعة ستانفورد عام 1968، في عرض بعنوان مؤثر تدرج متساوي الخواص بحجم 3x3 لمعالجة الصور، كما ورد في السرد التاريخي والاشتقاق لمؤثر سوبل.
آلية عمل نوى سوبل#
يطبّق ترشيح سوبل شبكتين صغيرتين من الأوزان، تُسمّيان نواتين، على وحدات البكسل المتجاورة. ويُوصف هذا الترشيح الموضعي عادةً بأنه التفاف؛ لكن OpenCV يطبّق الأوزان من دون قلبها، مستخدماً الارتباط. وتتألف صفوف نواتي 3 x 3 القياسيتين مما يلي:
| الصف | نواة اتجاه X | نواة اتجاه Y |
|---|---|---|
| علوي | -1, 0, 1 | -1, -2, -1 |
| أوسط | -2, 0, 2 | 0, 0, 0 |
| سفلي | -1, 0, 1 | 1, 2, 1 |
تقيس استجابة الاتجاه x، Gx، تغيرات الشدة من اليسار إلى اليمين وتبرز الحواف العمودية. أما Gy فتقيس التغيرات من الأعلى إلى الأسفل وتبرز الحواف الأفقية. وتجمع كل نواة بين مرشح فروق، بأوزان -1 و0 و1، على أحد المحورين، والتنعيم الموزون، بأوزان 1 و2 و1، على المحور الآخر. وتغطي مجال الاستقبال تسع وحدات بكسل.
يؤدي الجمع بين Gx وGy إلى حساب مقدار التدرج—أي الجذر التربيعي لمجموع مربعي Gx وGy—واتجاهه، المحسوب باستخدام atan2(Gy, Gx). ويشير التدرج إلى اتجاه يعبر الحافة عمودياً على حدودها المحلية. وهذه المخرجات الاتجاهية هي خرائط سمات: شبكات مكانية تصف الاستجابة في كل موضع.
تطبيق سوبل في Python#
تحسب OpenCV المشتقات ذات الإشارة باستخدام cv2.Sobel، كما هو موضح في دليل تنفيذ اكتشاف الحواف. وتحافظ مخرجات الفاصلة العائمة على الاستجابات السالبة، التي تظهر عندما ينخفض السطوع في الاتجاه المحدد؛ أما المخرجات غير الموقعة ذات 8 بت فتقصّها إلى الصفر، فتفقد انتقالات الحواف هذه.
ثبّت التبعيات باستخدام pip install opencv-python numpy. ينزّل هذا المثال صورة، ويحسب المشتقتين، ويحفظ مقدار التدرج المركّب:
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_GRAYSCALE)
# احتفِظ بالمشتقات ذات الإشارة قبل جمع مقاديرها.
gx = cv2.Sobel(image, cv2.CV_32F, 1, 0, ksize=3)
gy = cv2.Sobel(image, cv2.CV_32F, 0, 1, ksize=3)
magnitude = cv2.magnitude(gx, gy)
edge_image = cv2.normalize(magnitude, None, 0, 255, cv2.NORM_MINMAX)
cv2.imwrite("sobel_edges.png", edge_image.astype(np.uint8))تعرض الصورة المحفوظة انتقالات السطوع القوية على هيئة حدود ساطعة. وتعيد التطبيع تحجيم القيم للعرض؛ بينما تحوّل خطوة تحديد العتبة المنفصلة قوة التدرج إلى خريطة حواف ثنائية.
استخدامات تدرجات سوبل#
في تقسيم الصور، يمكن أن يوفّر مقدار سوبل معلومات عن الحدود لخوارزمية مستجمعات المياه، التي تنمّي المناطق انطلاقاً من علامات ابتدائية. وفي مثال تقسيم العملات في scikit-image، تشكّل التدرجات القوية حواجز بين العملات والخلفية. وتستخدم خوارزمية مستجمعات المياه هذه الحواجز لفصل المقدمة عن الخلفية قبل أن تحدد المكوّنات المتصلة العملات كلّاً على حدة.
توجّه تدرجات سوبل أيضاً اكتشاف الأجسام في YOLO26-RD، وهو نموذج مخصص يستند إلى YOLO26 من Ultralytics. وتستخدم وحدة EdgeSPD إشارة حواف سوبل ثابتة للتحكم في أخذ العينات المنخفضة، مع إبراز معلومات الحدود كلما انخفضت الدقة المكانية.
سوبل مقارنةً بمرشحات الحواف الأخرى#
يستخدم Prewitt أوزان تنعيم موحّدة؛ بينما يمنح سوبل الصف أو العمود الأوسط وزناً أكبر. ويحسّن Scharr الدقة الاتجاهية لتقديرات المشتقات بحجم 3 x 3. ويقيس مؤثر لابلاس التغيرات من الرتبة الثانية في الشدة. ويجمع Canny بين تقدير التدرج وترقيق الحواف وربطها باستخدام عتبتين، لينتج خريطة حدود أكثر انتقائية من مقدار سوبل الخام.
في تحليل الصور الطبية، قد تؤدي التدرجات الناجمة عن الضوضاء إلى تجزئة مناطق مستجمعات المياه: يوضّح تقسيم صور الرنين المغناطيسي باستخدام تدرجات سوبل التجزئة المفرطة، ويستخدم إزالة الضوضاء للحد منها. وعند حدود الصورة، يتطلب غياب البكسلات المجاورة تحديد قاعدة للتمديد: يعتمد تنفيذ Sobel في SciPy افتراضياً على عكس البكسلات عبر حافة آخر بكسل.










