التحويل، التكميم، و JPEG
هنا نبني — لبنة لبنة — أكثر صيغة انتشاراً في التاريخ. لكن الجائزة ليست JPEG، بل المبدأ الذي يحكم كل صيغة خَسورة بعده: الترميز بالتحويل (transform coding).
بلوك ٨×٨ من قيم السطوع. كل قيمة مجرّد رقم. أين "التفصيل الدقيق" وأين "الخشن"؟ لا يمكنك الإشارة لبِكسل وتقول "هذا دقيق" — الدقّة خاصّية للعلاقة بين البِكسلات.
هل يمكن إعادة كتابة البلوك كخليط من ٦٤ نمطاً موجياً معروفاً، فتصبح "كمّية الخشن" رقماً و"كمّية الدقيق" رقماً آخر — فتخفض دقّة أرقام الدقيق وتبقي الخشن؟ وكم نمطاً تحتاج؟ ولماذا ٦٤؟
ليش التحويل: من القيم إلى الترددات
فكرة فورييه: أي إشارة = مجموع موجات جيبية بترددات مختلفة، لكلٍّ وزن. لماذا هذا عبقري للضغط؟ تركيز الطاقة: في الصور الطبيعية معظم الطاقة في الترددات المنخفضة (الخشنة)؛ أوزان العالية ≈ صفر. فبدل ٦٤ قيمة كلّها مهمّة، نحصل على بضع أوزان كبيرة وكثير من الأصفار → إنتروبي منهار. وثانياً، "الدقيق" و"الخشن" صارا أرقاماً منفصلة → نطبّق خسارة متفاوتة (العين تتسامح مع خطأ الترددات العالية).
فورييه يفترض الإشارة دورية فيخلق قفزات وهمية عند الحواف. DCT يستعمل cosines فقط ويفترض امتداداً مرآتياً → لا قفزات → طاقة أقل في الترددات العالية = تركيز أفضل. لهذا DCT-II قريب من التحويل الأمثل نظرياً (KLT) للصور الطبيعية، لكنه ثابت ورخيص. مقايضة مثالية.
الأنماط الأساسية الـ٦٤ — "المكتبة" التي تخيّلتها
DCT ثنائي البُعد يفكّك بلوك ٨×٨ إلى مجموع موزون من ٦٤ نمطاً. كل نمط تموّج جيبي بتردد أفقي ورأسي محدّدين. هذه الأنماط مرسومة فعلياً بالمعادلة:
DCT-II 2DF(u,v) = ¼ C(u)C(v) Σₓ Σᵧ f(x,y)·cos[(2x+1)uπ/16]·cos[(2y+1)vπ/16] C(0)=1/√2 , غيرها = 1 # DCT لاخسارة بذاته: IDCT يعيد البلوك بالضبط
التكميم — هنا تحدث الخسارة، وهنا تختبئ العين
نقسّم كل معامل على قيمة من جدول التكميم Q ونقرّب لصحيح. القسمة + التقريب = الخسارة الوحيدة في JPEG. والسحر: قيم Q صغيرة للترددات المنخفضة (خسارة قليلة) وكبيرة للعالية (خسارة كبيرة).
عند الجودة المنخفضة، تُكمَّم معاملات AC لصفر فيصير كل بلوك قريباً من متوسّطه (DC)، وتختلف المتوسّطات بين البلوكات المتجاورة → تظهر حدود ٨×٨. ليس عيباً عشوائياً، بل نتيجة مباشرة لـ(تكميم عدواني + بلوكات مستقلّة). العقدة ٠٦ ستحاربه بـin-loop filtering.
المقايضة الكبرى — rate-distortion
خطّ JPEG كاملاً — ٧ خطوات، كلٌّ عقدة بنيتها
- نفّذ DCT-II و IDCT من المعادلة. تحقّق
IDCT(DCT(block))==block(يثبت أن التحويل لاخسارة). - طبّق DCT على بلوك من منطقة ناعمة. اطبع المصفوفة — لاحظ DC ضخماً والبقية تتضاءل. عُدّ المعاملات <1. هذا "الهواء" مُقاساً.
- كمّم بجدول Q قياسي ثم أزِل التكميم ثم IDCT. اضرب Q بمعاملات (0.5, 2, 8, 32) وارسم (الجودة → عدد الأصفار → الخطأ) = منحنى rate-distortion.
- طبّق zig-zag وأرِ ذيل الأصفار، ثم مرّر على Huffman. قارن 64 بايت خاماً بالحجم بعد كل الخط.
- بصري: طبّق الخط على صورة كاملة بجودة منخفضة وشاهد تأثير البلوكات يظهر — أنت من صنعه، وتعرف جذره.
الترميز بالتحويل يفصل الخشن عن الدقيق ويركّز الطاقة؛ DCT شبه أمثل ورخيص ولاخسارة بذاته؛ التكميم بجدول Q هو الخسارة الوحيدة ونموذج العين أرقاماً؛ ثم خطّ ترميز إنتروبي يجمع كل لبنات العقدتين ٠٢ و٠٣. التقت الشجرتان في آلة واحدة. عيوب JPEG (بلوكات ثابتة، لا تنبّؤ بينها، Huffman) = خارطة طريق لكل ما بعده.