ملاحظة: في هذا المنشور، سنعمل فقط مع الصور ذات الحجم الرمادي لتسهيل متابعتها.
يمكن اعتبار الصورة مصفوفة من القيم، حيث تمثل كل قيمة شدة البكسل. هناك ثلاثة أنواع رئيسية من تنسيقات الصور:
المرشحات هي أدوات تستخدم لتعديل الصور من خلال تطبيق عمليات معينة. المرشح عبارة عن مصفوفة (تسمى أيضًا النواة) تتحرك عبر الصورة، وتقوم بإجراء العمليات الحسابية على قيم البكسل داخل نافذتها. سنغطي نوعين شائعين من المرشحات: المرشحات المتوسطة والمرشحات المتوسطة.
يتم استخدام مرشح متوسط لتقليل الضوضاء عن طريق حساب متوسط قيم البكسل داخل النافذة. فهو يستبدل البكسل المركزي في النافذة بمتوسط جميع قيم البكسل داخل تلك النافذة. تطبق الدالة 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()
يتم استخدام مرشح متوسط لتقليل الضوضاء عن طريق استبدال قيمة كل بكسل بالقيمة المتوسطة لجميع وحدات البكسل في النافذة. إنه فعال بشكل خاص في إزالة ضوضاء الملح والفلفل. تطبق الدالة 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()
يمكنك إنشاء مرشحات مخصصة لتطبيق عمليات محددة على صورك. تتيح لك الدالة 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()
ملاحظة: في مقتطفات التعليمات البرمجية، سترى _ ، صورة عند تعيين الصورة ذات العتبة. وذلك لأن الدالة 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()
تحدد طريقة 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()
في متوسط العتبة التكيفية، يتم حساب قيمة العتبة لكل بكسل بناءً على متوسط قيم البكسل في الحي المحلي حول ذلك البكسل. تقوم هذه الطريقة بضبط العتبة ديناميكيًا عبر مناطق مختلفة من الصورة. تقوم الدالة 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()
يحسب الحد التكيفي 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()
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3