الرؤية الحاسوبية مبتدئ · Beginner 15 دقيقة

معالجة الصور الرقمية

Digital Image Processing

البكسلات والقنوات والفضاءات اللونية، والمرشحات والحواف والعتبات والتحويلات الهندسية.

تقدّمك في المسار0%

تمثيل الصورة

  • رمادية: مصفوفة ثنائية الأبعاد، قيمها عادة من 0 (أسود) إلى 255 (أبيض) بنوع uint8.
  • ملونة: مصفوفة ثلاثية الأبعاد (ارتفاع، عرض، 3).
  • الصور الطبية: قد تكون بعمق 12 أو 16 بت، أو ثلاثية الأبعاد (أحجام CT وMRI).
import cv2
import numpy as np
img = cv2.imread("photo.jpg")             # BGR, uint8
print(img.shape, img.dtype)
rgb  = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
hsv  = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

المرشحات الخطية (الالتفاف)

المرشح نافذة صغيرة تنزلق على الصورة؛ القيمة الجديدة لكل بكسل مجموع موزون لجيرانه:

blur   = cv2.GaussianBlur(gray, (5, 5), sigmaX=1.0)   # تنعيم
median = cv2.medianBlur(gray, 5)                      # فعال ضد ضوضاء الملح والفلفل (غير خطي)
sharpen_kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]])
sharp  = cv2.filter2D(gray, -1, sharpen_kernel)

هذه هي العملية نفسها التي تتعلم الشبكات الالتفافية مرشحاتها تلقائياً.

الحواف

تدرج الصورة يقيس التغير في الشدة:

$$G = \sqrt{G_x^2 + G_y^2}$$

gx = cv2.Sobel(blur, cv2.CV_64F, 1, 0, ksize=3)
gy = cv2.Sobel(blur, cv2.CV_64F, 0, 1, ksize=3)
mag = np.hypot(gx, gy)
edges = cv2.Canny(blur, 50, 150)    # كاشف Canny متعدد المراحل

العتبات والعمليات الشكلية

_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
kernel = np.ones((3, 3), np.uint8)
opened = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel)    # إزالة نقاط صغيرة
closed = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel)   # سد فجوات صغيرة

طريقة Otsu تختار العتبة تلقائياً من مدرج الشدة.

التحويلات الهندسية

small   = cv2.resize(img, (224, 224), interpolation=cv2.INTER_AREA)
h, w = img.shape[:2]
M = cv2.getRotationMatrix2D((w / 2, h / 2), 15, 1.0)
rotated = cv2.warpAffine(img, M, (w, h))
flipped = cv2.flip(img, 1)

هذه التحويلات أساس زيادة البيانات (data augmentation) في تدريب نماذج الرؤية.

تحسين التباين

معادلة المدرج التكراري (cv2.equalizeHist) أو نسختها التكيفية CLAHE تحسن التباين، وتُستخدم كثيراً في الصور الطبية، مع الحذر من تضخيم الضوضاء.

مصطلحات الدرس

البكسل Pixel
أصغر عنصر في الصورة الرقمية، ويحمل قيمة شدة أو لون.
الفضاء اللوني Color Space
طريقة تمثيل الألوان بالأرقام مثل RGB وHSV وLab.
كشف الحواف Edge Detection
تحديد المواقع التي تتغير فيها شدة الصورة بحدة، وغالباً تمثل حدود الأجسام.

الملخص

الصورة الرقمية مصفوفة من البكسلات، لكل بكسل قيمة شدة واحدة في الصور الرمادية أو ثلاث قيم في الصور الملونة. تشمل المعالجة الأساسية تحويل الفضاءات اللونية، والمرشحات الخطية للتنعيم وإزالة الضوضاء، وكشف الحواف بالتدرجات مثل Sobel وCanny، والعتبات، والعمليات الشكلية، والتحويلات الهندسية. هذه العمليات أساس المعالجة المسبقة وتساعد على فهم ما تتعلمه الشبكات الالتفافية.

أسئلة مراجعة

  1. ما شكل مصفوفة صورة ملونة بحجم 480×640 في NumPy؟

    (480, 640, 3): الارتفاع ثم العرض ثم القنوات.

  2. لماذا نطبق تنعيماً قبل كشف الحواف؟

    لأن مشتقات الصورة حساسة للضوضاء، والتنعيم يقلل الحواف الزائفة.

المصادر والمراجع

  1. OpenCV — Image Processing in OpenCV (Python tutorials)
  2. scikit-image documentation
  3. Szeliski — Computer Vision: Algorithms and Applications, Ch. 3

إكمال الدرس