"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > مقدمة للرؤية الحاسوبية باستخدام لغة بايثون (الجزء الأول)

مقدمة للرؤية الحاسوبية باستخدام لغة بايثون (الجزء الأول)

تم النشر بتاريخ 2024-11-05
تصفح:653

ملاحظة: في هذا المنشور، سنعمل فقط مع الصور ذات الحجم الرمادي لتسهيل متابعتها.

ما هي الصورة؟

يمكن اعتبار الصورة مصفوفة من القيم، حيث تمثل كل قيمة شدة البكسل. هناك ثلاثة أنواع رئيسية من تنسيقات الصور:

  • ثنائي: يتم تمثيل الصورة بهذا التنسيق بمصفوفة ثنائية الأبعاد بقيمتين 0 (أسود) و1 (أبيض). إنه أبسط شكل من أشكال تمثيل الصور.

Introduction To Computer Vision with Python (Part 1)

  • المقياس الرمادي: في هذا التنسيق، يتم تمثيل الصورة بواسطة مصفوفة واحدة ثنائية الأبعاد بقيم تتراوح من 0 إلى 255؛ حيث يمثل 0 الأسود و 255 يمثل الأبيض. تمثل القيم المتوسطة درجات مختلفة من اللون الرمادي.

Introduction To Computer Vision with Python (Part 1)

  • مقياس RGB: هنا، يتم تمثيل الصورة بثلاث مصفوفات ثنائية الأبعاد (واحدة لكل قناة لون: الأحمر والأخضر والأزرق)، بقيم تتراوح من 0 إلى 255. تحتوي كل مصفوفة على قيم بكسل لـ مكون لون واحد، والجمع بين هذه القنوات الثلاث يعطينا صورة ملونة كاملة.

Introduction To Computer Vision with Python (Part 1)

المرشحات

المرشحات هي أدوات تستخدم لتعديل الصور من خلال تطبيق عمليات معينة. المرشح عبارة عن مصفوفة (تسمى أيضًا النواة) تتحرك عبر الصورة، وتقوم بإجراء العمليات الحسابية على قيم البكسل داخل نافذتها. سنغطي نوعين شائعين من المرشحات: المرشحات المتوسطة والمرشحات المتوسطة.

يعني المرشحات

يتم استخدام مرشح متوسط ​​لتقليل الضوضاء عن طريق حساب متوسط ​​قيم البكسل داخل النافذة. فهو يستبدل البكسل المركزي في النافذة بمتوسط ​​جميع قيم البكسل داخل تلك النافذة. تطبق الدالة cv2.blur() مرشحًا متوسطًا بحجم نواة 3x3، مما يعني أنها تأخذ في الاعتبار نافذة 3x3 من وحدات البكسل حول كل بكسل لحساب المتوسط. وهذا يساعد في تنعيم الصورة.

import cv2
import matplotlib.pyplot as plt

image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE)

# Applies a Mean Filter of size 3 x 3
blurred_image = cv2.blur(image, (3, 3))

plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis("off")

plt.subplot(1, 2, 2)
plt.imshow(blurred_image, cmap='gray')
plt.title('Mean Filtered Image')
plt.axis("off")
plt.show()

Introduction To Computer Vision with Python (Part 1)

المرشحات المتوسطة

يتم استخدام مرشح متوسط ​​لتقليل الضوضاء عن طريق استبدال قيمة كل بكسل بالقيمة المتوسطة لجميع وحدات البكسل في النافذة. إنه فعال بشكل خاص في إزالة ضوضاء الملح والفلفل. تطبق الدالة cv2.medianBlur() مرشحًا متوسطًا بحجم نواة قدره 3. تستبدل هذه الطريقة كل بكسل بالقيمة المتوسطة لقيم البكسل في جوارها، مما يساعد في الحفاظ على الحواف أثناء إزالة التشويش. هنا كلما زاد حجم النواة كلما أصبحت الصورة غير واضحة.

import cv2
import matplotlib.pyplot as plt

image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE)

# Applies a Median Filter with a kernel size of 3
blurred_image = cv2.medianBlur(image, 3)

plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis("off")

plt.subplot(1, 2, 2)
plt.imshow(blurred_image, cmap='gray')
plt.title('Median Filtered Image')
plt.axis("off")
plt.show()

Introduction To Computer Vision with Python (Part 1)

مرشحات مخصصة

يمكنك إنشاء مرشحات مخصصة لتطبيق عمليات محددة على صورك. تتيح لك الدالة cv2.filter2D()‎ تطبيق أي نواة مخصصة على الصورة. تطبق الدالة cv2.filter2D() نواة مخصصة (مرشح) على الصورة. النواة عبارة عن مصفوفة تحدد العملية التي سيتم تنفيذها على قيم البكسل. في هذا المثال، تعمل النواة على تحسين ميزات معينة في الصورة بناءً على القيم المحددة.

import cv2
import numpy as np
import matplotlib.pyplot as plt

image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE)

# Define a custom filter kernel
kernel = np.array([[2, -1, 5],
                   [-5, 5, -1],
                   [0, -1, 0]])

filtered_image = cv2.filter2D(image, -1, kernel)

plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis('off')

plt.subplot(1, 2, 2)
plt.imshow(filtered_image, cmap='gray')
plt.title('Filtered Image')
plt.axis('off')

plt.show()

Introduction To Computer Vision with Python (Part 1)

العتبة

ملاحظة: في مقتطفات التعليمات البرمجية، سترى _ ، صورة عند تعيين الصورة ذات العتبة. وذلك لأن الدالة cv2.threshold ترجع قيمتين: قيمة العتبة المستخدمة والصورة ذات العتبة. وبما أننا نحتاج فقط إلى الصورة ذات العتبة، فإننا نستخدم _ لتجاهل قيمة العتبة.

يقوم الحد الأدنى بتحويل الصورة إلى صورة ثنائية عن طريق تعيين قيم البكسل بناءً على الشرط. هناك عدة أنواع من تقنيات العتبة:

العتبة العالمية

عتبة بسيطة

تقوم هذه الطريقة بتعيين قيمة عتبة ثابتة للصورة بأكملها. يتم تعيين وحدات البكسل ذات القيم الأعلى من الحد الأقصى إلى القيمة القصوى (255)، ويتم تعيين تلك الموجودة أدناه على 0. يتم استخدام الدالة cv2.threshold() لتحديد العتبة البسيطة. يتم ضبط البكسلات ذات الكثافة الأكبر من 127 على اللون الأبيض (255)، والبكسلات ذات الكثافة الأقل من أو تساوي 127 يتم ضبطها على الأسود (0)، مما يؤدي إلى إنتاج صورة ثنائية.

import cv2
import matplotlib.pyplot as plt

image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE)

_, thresholded_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)

plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis("off")

plt.subplot(1, 2, 2)
plt.imshow(thresholded_image, cmap='gray')
plt.title('Thresholded Image')
plt.axis("off")
plt.show()

Introduction To Computer Vision with Python (Part 1)

عتبة أوتسو

تحدد طريقة Otsu قيمة العتبة المثالية تلقائيًا بناءً على الرسم البياني للصورة. تقلل هذه الطريقة من التباين داخل الفئة وتزيد من التباين بين الفئات. من خلال تعيين قيمة العتبة على 0 واستخدام cv2.THRESH_OTSU، تقوم الوظيفة تلقائيًا بحساب أفضل قيمة عتبة لفصل المقدمة عن الخلفية.

import cv2
import matplotlib.pyplot as plt

image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE)

_, otsu_thresholded_image = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY   cv2.THRESH_OTSU)

plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis("off")

plt.subplot(1, 2, 2)
plt.imshow(otsu_thresholded_image, cmap='gray')
plt.title("Otsu's Thresholded Image")
plt.axis("off")
plt.show()

Introduction To Computer Vision with Python (Part 1)

عتبة التكيف

يعني عتبة التكيف

في متوسط ​​العتبة التكيفية، يتم حساب قيمة العتبة لكل بكسل بناءً على متوسط ​​قيم البكسل في الحي المحلي حول ذلك البكسل. تقوم هذه الطريقة بضبط العتبة ديناميكيًا عبر مناطق مختلفة من الصورة. تقوم الدالة cv2.adaptiveThreshold() بحساب العتبة لكل بكسل استنادًا إلى القيمة المتوسطة لقيم البكسل في حي 11x11 محلي. يتم طرح قيمة ثابتة قدرها 2 من هذا الوسط لضبط العتبة. هذه الطريقة فعالة للصور ذات ظروف الإضاءة المختلفة.

import cv2
import matplotlib.pyplot as plt

image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE)

mean_adaptive_thresholded_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)

plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis("off")

plt.subplot(1, 2, 2)
plt.imshow(mean_adaptive_thresholded_image, cmap='gray')
plt.title('Mean Adaptive Thresholded Image')
plt.axis("off")
plt.show()

Introduction To Computer Vision with Python (Part 1)

عتبة التكيف الغوسية

يحسب الحد التكيفي Gaussian قيمة العتبة لكل بكسل استنادًا إلى مجموع مرجح Gaussian لقيم البكسل في حي محلي. غالبًا ما توفر هذه الطريقة نتائج أفضل في الحالات ذات الإضاءة غير المنتظمة. في Gaussian Adaptive Thresholding، يتم تحديد العتبة من خلال مجموع مرجح Gaussian لقيم البكسل في حي 11x11. يتم طرح القيمة الثابتة 2 من هذا الوسط المرجح لضبط العتبة. هذه الطريقة مفيدة في التعامل مع الصور ذات الإضاءة والظلال المختلفة.

import cv2
import matplotlib.pyplot as plt

image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE)

gaussian_adaptive_thresholded_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis("off")

plt.subplot(1, 2, 2)
plt.imshow(gaussian_adaptive_thresholded_image, cmap='gray')
plt.title('Gaussian Adaptive Thresholded Image')
plt.axis("off")
plt.show()

Introduction To Computer Vision with Python (Part 1)

مراجع

  • Encord.com
  • Pyimagesearch.com
  • عتبة OpenCV
  • تصفية OpenCV
بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/thecspandz/introduction-to-computer-vision-with-python-part-1-2kd?1 إذا كان هناك أي انتهاك، فيرجى الاتصال بـ [email protected] للحذف هو - هي
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3