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

للبدء ، نحتاج إلى وحدتي مكتبة:
from PIL import Image, ImageDraw
إعداد أدوات للعمل المستقبلي المريح:
image = Image.open('test.jpg')
لنبدأ
سنقوم بمعالجة الصور بتنسيق RGB. يدعم PIL أيضًا العمل بالتنسيقات 1 و L و P و RGB و RGBA و CMYK و YCbCr و LAB و HSV و I و F.
يتم تعيين قيم البيكسل في الصورة بالتنسيق:
(س ، ص) ، (أحمر ، أخضر ، أزرق) ، حيث
x ، ص هي الإحداثيات ، والقيم العددية ل RGB في النطاق من 0 إلى 255. وهذا هو ، ونحن نعمل مع صورة
8 بت. ظلال رمادية
يظهر صبغة رمادية في حالة تساوي جميع لوحات الألوان ، لذلك نحن بحاجة إلى الحصول على قيمة المتوسط الحسابي في النقاط الثلاث:
for x in range(width): for y in range(height): r = pix[x, y][0]

فارق بسيطترى العين البشرية مجموعة مختلفة من الألوان بطرق مختلفة. لن يمنحك أي شخص الصيغة الدقيقة ، نظرًا لأن إدراك الألوان مختلف لكل شخص بطريقة أو بأخرى ، ولكن إذا كنت مهتمًا ، يمكنك قراءة المزيد
هنا وهنا .
انقلاب
يتم الحصول على الانعكاس بطرح اللون الحالي من 255:
for x in range(width): for y in range(height): r = pix[x, y][0] g = pix[x, y][1] b = pix[x, y][2] draw.point((x, y), (255 - r, 255 - g, 255 - b))

انعكاس تدرج الرمادي
الجمع بين الخوارزميات السابقة ، يمكنك كتابة التعليمات البرمجية التالية:
for x in range(width): for y in range(height): r = pix[x, y][0] g = pix[x, y][1] b = pix[x, y][2] sr = (r + g + b) // 3 draw.point((x, y), (255 - sr, 255 - sr, 255 - sr))

انعكاس تدرج الرمادي الانتقائي
بالنسبة إلى هذه الخوارزمية ، يلزمك تحديد قيمة العتبة ، والتي سآخذها مقابل 100:
for x in range(width): for y in range(height): r = pix[x, y][0] g = pix[x, y][1] b = pix[x, y][2] if (r+g+b)>100:

استنتاج
في المقالات التالية ، أود أن أتحدث عن كيفية التعامل مع تصفية الصور محليًا بتقسيمها إلى مناطق ، بالإضافة إلى إظهار إمكانيات
DFS المثيرة للاهتمام في خوارزميات معالجة الصور