النمذجة والتنبّؤ: شجرة اللاخسارة
كيف نجعل البِكسلات متوقَّعة فينخفض إنتروبيها قبل المرمّز؟ هنا تتشكّل GIF و PNG، وتظهر أشهر قصّة في تاريخ صيغ الصور: كيف كادت براءةُ اختراعٍ واحدة تقتل GIF فأنجبت PNG.
سطر سماء متدرّج 40 42 45 47 48 48 49 …: فروقه الأفقية تنهار
لأصفار. ممتاز. لكن سطر علم مخطّط 12 12 12 200 200 200 12 12 12 …:
فروقه تصير 0 0 188 0 0 -188 … — تذبذب، لا أصفار!
صورة واحدة فيها سماء (يبرع التنبّؤ الأفقي) وأعلام (يفشل). لو ألزمتها بنموذج
واحد تخسر في نصفها. كيف تختار النموذج المناسب لكل جزء؟ ومن يدفع ثمن
إخبار الفكّاك؟ وماذا عن شعار ABCABC المتكرّر — أي نموذج
يلتقط تكرار المقاطع بدل العلاقة بالجار؟
عائلتان من النماذج اللاخسارة
اللغز كشف عائلتين، وهما تقريباً كل النمذجة اللاخسارة:
عائلة القاموس: LZ و LZW وقصّة GIF
أبسط تكرار غير متتالٍ هو تكرار مقطع ظهر سابقاً. LZ77
(نافذة منزلقة، تُخرج (مسافة، طول، الرمز)) قلب DEFLATE/PNG.
LZW يبني قاموساً ينمو ذاتياً ويُعاد بناؤه في الفكّاك دون
إرساله — وهو ما اختارته GIF.
GIF (1987) اختار LZW، المحميّ ببراءة Unisys. في 1994 بدأت Unisys المطالبة برسوم على كل برنامج يكتب GIF ("GIF Tax"). ردّ المجتمع بتصميم صيغة بديلة حرّة عمداً → وُلد PNG (1996) باختيار DEFLATE لا LZW، ليس لأنه أفضل تقنياً، بل لتفادي البراءة. ستراه يتكرّر مع الترميز الحسابي في JPEG، ومع AVIF/JPEG XL. البراءات خيطٌ أحمر يشرح نصف قرارات المجال.
عائلة التنبّؤ: مرشّحات PNG واشتقاق Paeth
حلّ PNG عبقريّ: كل سطر يختار مرشّحه ويخبر الفكّاك ببايت واحد. خمسة مرشّحات تتنبّأ بقيمة كل بايت ثم تخزّن الفرق:
p=A+B−C ثم يختار الجار الأقرب إليه — فيتكيّف مع الحواف الأفقية والرأسية بلا أي بيانات إضافية."التنبّؤ من السياق" هنا هو جذر intra-prediction في فيديو HEVC/AV1 (العقدة ٠٦): Paeth على منشّطات — تنبّؤ اتّجاهي ببلوكات كاملة و٣٥+ اتجاهاً. الجذر هنا.
المرشّح يخزّن الفرق لأن إنتروبيه أقلّ، فيستفيد منه DEFLATE التالي. المرشّح لا يضغط بنفسه — يعيد تشكيل البيانات لتصير منخفضة الإنتروبي ثم يسلّمها للمرمّز. تجسيد حيّ لانقسام نموذج/مرمّز.
الصيغتان — فلسفتان متعاكستان
- نفّذ المرشّحات الخمسة. لكل سطر اختر ذا أقلّ مجموع قيم مطلقة للفروقات (هو فعلاً ما تستعمله libpng).
- مرّر الناتج على مرمّز Huffman من العقدة ٠٢. قارن الحجم مع تطبيق Huffman مباشرة بلا مرشّحات — كم وفّر التنبّؤ؟
- اصنع صورة نصفها تدرّج ونصفها خطوط حادّة. تحقّق أن مرمّزك اختار مرشّحات مختلفة للنصفين تلقائياً. اطبع التوزيع.
- تحدٍّ: نفّذ LZW من الصفر، طبّقه على
ABABAB…، وراقب القاموس يلتقطAB, ABA, ABAB…. اشتقّ بنفسك كيف يعرف الفكّاك القاموس دون إرساله.
النمذجة اللاخسارة عائلتان: تنبّؤ مكاني (PNG) وقاموس (LZ/LZW). GIF وُلد من LZW فجرّته لأزمة براءة، و PNG وُلد ردّاً عليها حرّاً. العائق الجوهري: كلاهما لاخسارة → ضخم للصور الفوتوغرافية، لأنهما يحفظان تفاصيل لا تراها العين أصلاً. هذه الثغرة ستقتحمها الشجرة الخَسورة — بعد أن نفهم العين.