الرؤية الحاسوبية2004متوسط9 دقيقة قراءة
سمات صور مميّزة من نقاط مفتاحية ثابتة القياس
Distinctive Image Features from Scale-Invariant Keypoints
Lowe, D. G. — International Journal of Computer Vision (IJCV)
المشكلة
تخيّل أنك تريد أن يتعرّف الحاسوب على كرسي في صورة جديدة — لكن الكرسي هذه المرة مائل أو أبعد أو مُضاء بشكل مختلف أو نصفه مخفيّ خلف طاولة. قبل SIFT كانت كل الحلول المتاحة هشّة ومصمَّمة لمهمة بعينها: مدرّجات الألوان تنهار حين تتغيّر زاوية الكاميرا، والقوالب المبنية على الحواف تفشل مع أي دوران. ببساطة، لم يكن هناك أسلوب عام يستطيع أن يقول «هذه النقطة في الصورة الأولى هي نفسها في الصورة الثانية» بطريقة تصمد أمام تحوّلات العالم الحقيقي.
الإسهام
SIFT (تحويل السمات الثابتة القياس): منظومة من أربع مراحل تكتشف نقاطاً مفتاحية مستقرة لا تتأثّر بتغيُّر الحجم أو الدوران، ثم تبني لكل نقطة واصفاً من 128 بُعداً. المرحلة الأولى تُنشئ فضاء قياس غاوسياً وتحدّد النقاط المتطرّفة في (DoG). الثانية تُحسّن مواقع النقاط بتوسيع تايلور وتحذف النقاط الضعيفة أو الشبيهة بالحواف. الثالثة تُحدّد اتجاهاً مرجعياً من التدرُّجات المحلية. الرابعة تُرمّز رقعة 16×16 حول كل نقطة إلى 4×4 مدرّجات اتجاهية بثماني حاويات لكل منها — بصمة رقمية مُدمجة ومميّزة تصمد أمام تغيُّر الحجم والدوران وتقلُّبات الإضاءة المعتدلة.
الأثر
SIFT هي التي رسمت ملامح عصر كامل في الرؤية الحاسوبية. لعقد من الزمن، كل تطبيق تقريباً — من تجميع الصور البانورامية إلى إعادة البناء ثلاثي الأبعاد إلى التعرّف على الأجسام والواقع المعزّز — كان يعمل بـSIFT أو بأحد أحفادها المباشرين مثل SURF وORB وRootSIFT. والأهم أن مبادئها التصميمية — الكشف في ، والوصف بالتدرُّجات، واختبار النسبة في المطابقة — لا تزال حاضرة في خطوط المعالجة الحديثة، حتى تلك التي تعتمد على التعلّم العميق.
تخيّل نفسك محقّقاً يفحص صورة لمسرح جريمة بعدسة مكبّرة. تلاحظ خدشاً مميّزاً على مقبض الباب — علامة فريدة تبقى واضحة سواء اقتربتَ منها أو ابتعدتَ أو أملتَ الصورة.
تُسجّل في دفترك ثلاثة أشياء: أين الخدش بالضبط على الباب، وفي أي اتجاه يمتد، وماذا يحيط به — نسيج الخشب وبقايا الطلاء المجاورة.
بعد أيام يأتيك شخصٌ بصورة أخرى للباب نفسه، مأخوذة من الجهة المقابلة وبزاوية مختلفة. تفتح دفترك وتُقارن — وتجد أن ملاحظاتك لا تزال تنطبق تماماً. هذا بالضبط ما يفعله SIFT: يجد نقاطاً مميّزة في الصورة، ويصف محيطها، ثم يطابقها بين صور مختلفة.
المشكلة: الأجسام تبدو مختلفة من كل زاوية
قبل ظهور ، كان التعرّف على جسم في صور مختلفة أشبه بتجميع أدوات مؤقّتة لا يُعتمد عليها. قرّب الكاميرا والقالب يتمدّد، أبعِدها وينكمش. أدِرها وتتبدّل الحواف. غيّر الإضاءة وتتغيّر قيم السطوع بالكامل.
التحدّي الجوهري: كيف تجد النقطة الفيزيائية نفسها في صورتين مختلفتين، وتصفها بطريقة لا تتأثّر بتغيُّر الحجم أو الدوران أو الإضاءة — من دون أي عملية أو بيانات مُعلَّمة؟ والوصف يجب أن يكون محلياً — بمعنى أنه يعتمد على المنطقة المحيطة بالنقطة فقط، فلا يتأثّر إذا حُجب جزء آخر من الصورة — ومميّزاً بحيث لا تتشابه بصمة نقطة مع أخرى.
المرحلة الأولى: بناء فضاء القياس
الأجسام تظهر بأحجام مختلفة حسب بُعد الكاميرا: مكعّب سكّر على طاولة تراه بوضوح، لكن من طائرة يختفي تماماً. لكي يكتشف SIFT عند كل حجم محتمل، يبني ما يُعرف بـفضاء القياس — وهو ببساطة مجموعة نُسَخ من الصورة، كل نسخة أكثر ضبابية من سابقتها.
كل مستوى من يستخدم بانحراف معياري أكبر. تُنظَّم هذه النُّسَخ في طبقات ثُمانية (octaves): كل طبقة تُنصّف الصورة، وداخل الطبقة الواحدة يزداد الطمس بعامل ثابت . الفائدة من هذا الترتيب أن سمة تبدو صغيرة في طبقة قد تظهر كبيرة وواضحة في طبقة أخرى — وSIFT يفحصها كلها دون استثناء.
الخطوة التالية هي تقريب لابلاسيان الغاوسي (LoG) — وهو كاشف يُبرز المناطق «الكتلوية» البارزة في الصورة — بعملية أرخص بكثير: فرق الغاوسيّات (DoG). الفكرة بسيطة: اطرح مستوى طمس من المستوى الذي يليه. النتيجة تُظهر المناطق التي تتغيّر فيها الشدّة اللونية بشكل مفاجئ — وهذه بالضبط هي الأماكن التي تصنع نقاطاً مفتاحية جيّدة.
المرحلة الثانية: تنقيح مواقع النقاط المفتاحية
النقاط المتطرّفة التي حصلنا عليها من المرحلة الأولى تقريبية — لأنها محصورة على شبكة المنفصلة. ما يفعله SIFT هنا أشبه بضبط بؤرة مِجهر: شبكة البكسلات تُعطيك موقعاً ضبابياً، لكنك تحتاج دقة أعلى. لذلك يستخدم توسيع تايلور لدالة DoG — أي يُلائم سطحاً تربيعياً ثلاثي الأبعاد حول كل نقطة مرشّحة ليجد الموقع الحقيقي بدقة أقلّ من بكسل.
بعد ذلك يمرّ على النقاط بمرشِّحَين لحذف غير الصالح منها:
-
مرشِّح التباين المنخفض: إذا كانت قيمة DoG عند النقطة المُنقَّحة ضعيفة (|D| < 0.03)، فالنقطة باهتة لا يُعوَّل عليها — تُحذف.
-
مرشِّح الحواف: نقطة واقعة على حافة (كخط مستقيم في جدار مثلاً) يسهل تحديدها في اتجاه واحد لكنها غامضة في الاتجاه الآخر. يفحص SIFT نسبة الانحناءين الرئيسيين — وهما لمصفوفة . إذا كانت النسبة كبيرة (أكثر من 10 عادةً)، فالنقطة حافّية — تُحذف.
المرحلة الثالثة: تحديد الاتجاه المرجعي
لكي لا يتأثّر بدوران الصورة، يحتاج SIFT أن يعرف «أين الأعلى» بالنسبة لكل . الطريقة: يقيس اتجاه السائد في المنطقة المحيطة بالنقطة، فيبني مدرّجاً اتجاهياً من 36 حاوية (كل واحدة تغطّي 10°)، ويُثقّله بمقدار التدرُّج وبنافذة غاوسية مركزها النقطة.
الحاوية التي تحمل أعلى قمّة تُصبح الاتجاه المرجعي لتلك النقطة. وأي حاوية أخرى تصل قمّتها إلى 80% من القمة الأعلى تُولّد نقطة مفتاحية إضافية في الموقع نفسه لكن باتجاه مختلف — لأن زاوية حادة مثلاً قد تُعطي اتجاهين بارزين. المهم أن كل القياسات من هنا فصاعداً تُجرى نسبةً إلى هذا الاتجاه المرجعي — ولهذا السبب تحديداً لا يُغيّر تدوير الصورة شيئاً في الواصف النهائي.
المرحلة الرابعة: بناء الواصف ذي الـ128 بُعداً
وصلنا الآن إلى المرحلة التي تُعطي كل نقطة مفتاحية «هويتها» الرقمية. كل نقطة أصبح لديها موقع وحجم واتجاه مرجعي — والخطوة الأخيرة هي وصف شكل المنطقة المحيطة بها بطريقة مُدمجة ومميّزة وثابتة.
يأخذ SIFT رقعة 16×16 بكسل حول النقطة المفتاحية — مُحاذاة إلى الاتجاه المرجعي ومُقيَّسة وفق الحجم المناسب — ويقسّمها إلى شبكة 4×4 من المناطق الفرعية (كل منطقة 4×4 بكسلات). في كل منطقة فرعية يحسب مدرّجاً من 8 اتجاهات تدرُّج. تكديس 4×4×8 = 128 قيمة في واحد يُنتج واصف SIFT.
بعد ذلك تُطبَّق على الواصف ليصبح بطول وحدوي — وهذا يمنحه ثبات الإضاءة: لو تضاعف سطوع الصورة بأكملها لتضاعفت قيم التدرُّج، لكن بعد التسوية يبقى المتّجه كما هو. ثم تأتي خطوة قصّ إضافية (تُحدّ القيم عند 0.2 ويُعاد التسوية) للتقليل من أثر التدرُّجات الحادة الناتجة عن تغيّرات إضاءة غير خطية.
المطابقة: كيف نجد التوافقات
بعد استخراج النقاط المفتاحية من صورتين، تأتي خطوة المطابقة: البحث عن الواصف الأقرب لكل نقطة في فضاء الـ128 بُعداً. لكن الاعتماد على الجار الأقرب وحده يقع في فخّ متكرّر — الواصف سيطابق أقرب ما يجده حتى لو كانت المطابقة الحقيقية غائبة من الصورة الثانية أصلاً.
الحل الذي ابتكره Lowe أنيق وبسيط: اختبار النسبة. احسب المسافة إلى الجار الأقرب والجار الثاني في القرب. إذا كانت النسبة — أي أن الأقرب أقرب بفارق واضح — فالمطابقة موثوقة وتُقبل. أما إذا تقاربت المسافتان فمعنى ذلك وجود عدة مرشّحين متشابهين والمطابقة ملتبسة — الأسلم رفضها. هذا الاختبار الواحد يحذف نحو 90% من المطابقات الخاطئة ويحتفظ بنحو 95% من الصحيحة.
خط معالجة SIFT الكامل
لنجمع المراحل الأربع معاً. من صورة خام يُنتج SIFT مجموعة من النقاط المفتاحية — كل واحدة تحمل موقعاً (x, y)، وحجماً (σ)، واتجاهاً مرجعياً (θ)، وواصفاً من 128 . يمكنك أن تتخيّل كل نقطة وكأنها «بطاقة هوية» لبقعة معيّنة في الصورة. حين تأخذ صورتين لمشهد واحد قد تحصل على مئات بطاقات الهوية هذه — ومطابقتها تكشف لك أي النقاط في الصورتين تمثّل الموقع الفيزيائي نفسه.
الفكرة في شيفرة برمجية
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import numpy as np
def compute_gradients(patch):
"""حساب مقدار التدرُّج واتجاهه لرقعة 16×16."""
dy = patch[2:, 1:-1] - patch[:-2, 1:-1] # التدرُّج الرأسي
dx = patch[1:-1, 2:] - patch[1:-1, :-2] # التدرُّج الأفقي
magnitude = np.sqrt(dx**2 + dy**2)
orientation = np.arctan2(dy, dx) # بالراديان
return magnitude, orientation
def build_descriptor(magnitude, orientation, n_bins=8, grid=4):
"""بناء واصف SIFT ذي 128 بُعداً من رقعة تدرُّجات 16×16."""
h, w = magnitude.shape
cell_h, cell_w = h // grid, w // grid
descriptor = []
for i in range(grid):
for j in range(grid):
# استخراج المنطقة الفرعية 4×4
mag = magnitude[i*cell_h:(i+1)*cell_h, j*cell_w:(j+1)*cell_w]
ori = orientation[i*cell_h:(i+1)*cell_h, j*cell_w:(j+1)*cell_w]
# بناء مدرّج من 8 حاويات موزون بمقدار التدرُّج
hist, _ = np.histogram(ori, bins=n_bins,
range=(-np.pi, np.pi),
weights=mag)
descriptor.extend(hist)
descriptor = np.array(descriptor)
# تسوية ← قصّ ← إعادة تسوية (ثبات الإضاءة)
descriptor /= (np.linalg.norm(descriptor) + 1e-7)
descriptor = np.clip(descriptor, 0, 0.2)
descriptor /= (np.linalg.norm(descriptor) + 1e-7)
return descriptor # متّجه 128 بُعداً: بصمة النقطة المفتاحية
# كل نقطة مفتاحية في الصورة تحصل على واصف من 128 بُعداً.
# المطابقة = إيجاد أقرب واصف في الصورة الأخرى.لماذا غيّرت SIFT كل شيء
مبادئ تصميم SIFT — بناء فضاء قياس، واكتشاف نقاط متطرّفة مستقرة، والوصف بـالتدرُّجات المحلية، والمطابقة باختبار النسبة — صارت الوصفة التي اتّبعها جيل كامل من أساليب . وحتى السمات المُتعلَّمة عبر — مثل SuperPoint وSuperGlue — لا تزال تستخدم بروتوكولات التقييم التي وُضعت في عصر SIFT، وكثيراً ما تقيس أداءها مقارنةً بها كخط أساس.
1999
ورقة Lowe الأولى عن SIFT
التعرّف على الأجسام من سمات محلية ثابتة القياس، قُدِّمت في مؤتمر ICCV. عرضت فكرة البحث عن النقاط المتطرّفة في فضاء القياس والواصف الأوّلي.
2004
ورقة SIFT الكاملة (هذه الورقة)
نُشرت في IJCV وتضمّنت خط المعالجة الكامل بمراحله الأربع واختبار النسبة وتقييماً تجريبياً مستفيضاً. أصبحت المرجع المعياري لمطابقة السمات المحلية.
2006
SURF — السرعة على حساب الدقة
قرّب Bay وزملاؤه خوارزمية SIFT باستخدام مرشّحات صندوقية وصور تكاملية، مع التضحية بشيء من الدقة مقابل سرعة أعلى بـ3 إلى 5 أضعاف. هذا جعل المطابقة الآنية ممكنة عملياً لأول مرة.
2008
السياحة البصرية / Bundler
استخدم Snavely وزملاؤه SIFT لإعادة بناء مشاهد ثلاثية الأبعاد من آلاف الصور المنتشرة على الإنترنت، وأثبتوا أنها تعمل بكفاءة حتى مع مجموعات صور ضخمة وغير منظّمة.
2011
ORB — البديل المجاني لـSIFT
جمع Rublee وزملاؤه نقاط FAST المفتاحية مع واصفات BRIEF وأضافوا ثبات الدوران. النتيجة خوارزمية بلا براءة اختراع، تعمل آنياً، وبدقة قريبة من SIFT في كثير من المهام.
2020
SuperGlue — مطابقة بالتعلّم العميق
استبدل Sarlin وزملاؤه المطابقة اليدوية بشبكة عصبية بيانية تتعلّم مطابقة النقاط المفتاحية تلقائياً. واتّخذوا خط معالجة SIFT كخط أساس يسعون لتجاوزه.
2020
انتهاء براءة اختراع SIFT
انتهت صلاحية براءة اختراع Lowe الأمريكية، فأصبحت SIFT متاحة مجاناً للاستخدام التجاري. ونقلت مكتبة OpenCV الخوارزمية من الوحدة المقيّدة إلى المكتبة الرئيسية.
المرجعLowe, D. G.. Distinctive Image Features from Scale-Invariant Keypoints. International Journal of Computer Vision (IJCV), 2004.
مصطلحات هذه الورقة
- سمات SIFTSIFT
- فضاء القياسScale Space
- فرق الغاوسيّاتDifference of Gaussians
- نقطة مفتاحيةKeypoint
- تعيين الاتجاهOrientation Assignment
- واصفDescriptor
- مطابقة السماتFeature Matching
- الضبابية الغاوسيةGaussian Blur
- التدرج التفاضليGradient
- طبقة ثُمانيةOctave