اذهب إلى المحتوى

بيانات الوسائط المتعددة في شبكات طرف إلى طرف الحاسوبية


Ola Abbas

تشكل حاليًا بيانات الوسائط المتعددة المكونة من الصوت والفيديو والصور الثابتة غالبية حركة المرور على الإنترنت، حيث كان للتقدم الحاصل في تقنية الضغط دورًا في جعل نقل الوسائط المتعددة على نطاقٍ واسع عبر الشبكات ممكنًا. وبما أن بيانات الوسائط المتعددة يستهلكها البشر باستخدام حاستي الرؤية والسمع ويعالجها الدماغ البشري، فهناك تحدياتٌ فريدة لعملية ضغطها، حيث تحاول الاحتفاظ بالمعلومات الأعلى أهمية للإنسان، مع التخلص من أي شيء لا يحسّن إدراك الإنسان للتجربة البصرية أو السمعية، ليأتي دور كلٍّ من علوم الحاسوب ودراسة الإدراك البشري. سنلقي نظرةً في هذا القسم على بعض الجهود الرئيسية في تمثيل بيانات الوسائط المتعددة وضغطها.

لا تقتصر استخدامات الضغط على بيانات الوسائط المتعددة بالطبع، فقد تستخدم أداة مساعدة مثل zip أو compress لضغط الملفات قبل إرسالها عبر الشبكة، أو لإلغاء ضغط ملف البيانات بعد التنزيل، وقد اتضح أن التقنيات المستخدمة لضغط البيانات والتي عادةً ما تكون غير فَقودة lossless، لأن معظم الأشخاص لا يحبون فقدان البيانات من ملف، وتظهر أيضًا كأنها جزءٌ من الحل .المطروح لضغط الوسائط المتعددة. لا يَعِد الضغط الفقود lossy compression الذي يشيع استخدامه على بيانات الوسائط المتعددة بأن تكون البيانات المستلمة هي نفسها البيانات المرسلة تمامًا، لأن بيانات الوسائط المتعددة غالبًا تحتوي على معلوماتٍ ذات فائدة قليلة للشخص الذي يستقبلها، حيث يمكن لحواسنا وأدمغتنا فقط إدراك الكثير من التفاصيل، كما أنها جيدة جدًا في ملء الأجزاء المفقودة وحتى تصحيح بعض الأخطاء فيما نراه أو نسمعه. تحقق عادةً الخوارزميات الفَقُودة نسبَ ضغطٍ أفضل بكثير من نظيرتها التي تكون غير فقودة، حيث يمكن أن تكون بمستوى وترتيب أهم من ناحية الحجم.

افترض المثال التالي للتعرف على مدى أهمية الضغط في انتشار الوسائط المتعددة المتصلة بالشبكة: تحتوي شاشة التلفاز عالية الدقة على 1080 × 1920 بكسل، ويحتوي كلٌّ منها على 24 بت من معلومات الألوان، لذلك يكون حجم كل إطار هو:

1080 × 1920 × 24 = 50 Mb

لذلك فإذا أردت إرسال 24 إطارًا في الثانية، فسيكون ذلك أكثر من 1 جيجابت في الثانية، وهذا أكثر مما يمكن لمعظم مستخدمي الإنترنت الوصول إليه، لكن يمكن لتقنيات الضغط الحديثة الحصول على إشارة HDTV عالية الجودة بدرجة معقولة تصل إلى نطاق 10 ميجابت في الثانية، وهو تخفيضٌ بمقدار درجتين ويكون في متناول معظم مستخدمي النطاق العريض.

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

كانت تقنيات الضغط المطبقة على الوسائط المتعددة مجالًا للابتكار ولا سيما الضغط الفقود، وتقنيات الضغط غير الفقودة لها دورٌ مهم أيضًا. تتضمن معظم التقنيات الفقودة بعض الخطوات غير الفقودة، لذلك نبدأ مناقشتنا بنظرة عامة على الضغط غير الفقودة للبيانات.

تقنيات الضغط غير الفقودة

لا يمكن فصل الضغط عن تشفير البيانات، فعند التفكير في كيفية تشفير جزءٍ من البيانات ضمن مجموعةٍ من البتات، قد نفكر أيضًا في كيفية تشفير البيانات في أصغر مجموعةٍ ممكنة من البتات. إذا كان لديك كتلة بياناتٍ مكونة من 26 رمزًا من A إلى Z على سبيل المثال وكان لكلٍّ من هذه الرموز فرصةٌ متساوية للتواجد في كتلة البيانات التي تشفّرها، فإن تشفير كل رمزٍ ضمن 5 بتات يكون أفضل ما يمكنك فعله بما أن 25 = 32 هي أقل قوةٍ للعدد 2 بعد 26؛ لكن إذا ظهر الرمز R بنسبة 50% من الوقت، فسيكون من الجيد استخدام عددٍ أقل من البتات لتشفير R موازنةً بأي من الرموز الأخرى. إذا عرفت الاحتمال النسبي لظهور كل رمزٍ في البيانات، فيمكنك إسناد عددٍ مختلف من البتات لكل رمزٍ محتمل بطريقةٍ تقلل من عدد البتات اللازمة لتشفير كتلةٍ معينةٍ من البيانات، وهذه هي الفكرة الأساسية لشيفرات هوفمان Huffman codes وهي إحدى أهم التطورات الأولى في ضغط البيانات.

تشفير طول التشغيل

أسلوب تشفير طول التشغيل Run Length Encoding أو اختصارًا RLE هو أسلوب ضغطٍ يتمتع ببساطة أسلوب القوة القاسية brute-force. الفكرة هي باستبدال التكرارات المتتالية لرمزٍ معين بنسخةٍ واحدةٍ فقط من الرمز بالإضافة إلى عدد مرات ظهور هذا الرمز، ومن هنا أتى اسم طول التشغيل run length. ستُشفَّر السلسلة AAABBCDDDD إلى 3A2B1C4D على سبيل المثال.

تبين أن تشفير RLE مفيدٌ لضغط بعض أصناف الصور، حيث يمكن استخدامه من خلال موازنة قيم البكسل المتجاورة ثم تشفير التغييرات فقط، فإن هذه التقنية فعالةً للغاية بالنسبة للصور التي تحتوي على مناطق متجانسة كبيرة، وليس غريبًا أن يحقق RLE نسب ضغطٍ بترتيب 8 إلى 1 للصور النصية الممسوحة ضوئيًا على سبيل المثال. يعمل RLE جيدًا مع مثل هذه الملفات لأنها تحتوي غالبًا على قدرٍ كبير من المساحات الفارغة الممكن إزالتها. كان RLE قديمًا بمثابة خوارزمية الضغط الرئيسية المستخدمة لإرسال الفاكسات. من الممكن أن يؤدي الضغط إلى زيادة حجم بايتات الصورة بالنسبة للصور التي تحتوي على درجةٍ صغيرة من الاختلاف المحلي، نظرًا لأن الأمر يتطلب بايتين لتمثيل رمزٍ واحد عندما لا يتكرر هذا الرمز.

تعديل شيفرة النبضات التفاضلية

تقنية تعديل شيفرة النبضات التفاضلية Differential Pulse Code Modulation أو اختصارًا DPCM هي خوارزمية ضغطٍ بسيطة أخرى. الفكرة هنا هي إخراج رمز مرجعي reference symbol أولًا ثم إخراج الفرق بين هذا الرمز والرمز المرجعي لكل رمزٍ في البيانات. ستُشفَّر السلسلة AAABBCDDDD باستخدام الرمز A المرجعي على أنها A0001123333 على سبيل المثال لأن الرمز A هو نفس الرمز المرجعي، ويختلف الرمز B عن الرمز المرجعي بمقدار 1، وهلم جرًا. لاحظ أن هذا المثال البسيط لا يوضح الفائدة الحقيقية لخوارزمية DPCM المتمحورة حول امكانية تشفير الاختلافات باستخدام بتاتٍ أقل من الرمز نفسه عندما تكون هذه الاختلافات صغيرة. يمكن تمثيل مجال الاختلافات، الذي هو 0-3، ببتَين لكلٍ منها في هذا المثال بدلًا من 7 أو 8 بتات التي يتطلبها الحرف الكامل، ويُحدَّد رمزٌ مرجعي جديد بمجرد أن يصبح الاختلاف كبيرًا جدًا.

تعمل DPCM بصورةٍ أفضل من RLE في معظم الصور الرقمية، لأنها تستفيد من حقيقة أن البكسلات المتجاورة متشابهة عادةً؛ ويمكن بسبب هذه العلاقة أن يكون المجال الديناميكي للاختلافات بين قيم البكسلات المتجاورة أقل بكثيرٍ من النطاق الديناميكي للصورة الأصلية، وبالتالي يمكن تمثيل هذا المجال باستخدام بتاتٍ أقل. كانت قد قيست نسب الضغط من 1.5 إلى 1 على الصور الرقمية باستخدام DPCM. تعمل DPCM أيضًا على الصوت، حيث من الممكن أن تكون العينات المتجاورة لموجة صوتية متقاربة القيمة.

تشفّر طريقةٌ مختلفة قليلًا، تسمى تشفير دلتا delta encoding رمزًا على أنه اختلافٌ عن الرمز السابق، وبالتالي سيجري تمثيل السلسلة AAABBCDDDD على أنها A001011000 على سبيل المثال. لاحظ أنه يمكن أن يعمل تشفير دلتا جيدًا لتشفير الصور حيث تتشابه البكسلات المتجاورة، ويمكن أيضًا تنفيذ RLE بعد تشفير دلتا، حيث من الممكن أن نجد سلاسل طويلة مؤلفة من أصفار إذا كان هناك العديد من الرموز المتشابهة بجانب بعضها بعضًا.

الطرق القائمة على القاموس

الطريقة النهائية للضغط دون فقد التي هي الطريقة القائمة على القاموس Dictionary-Based Methods، وتُعد خوارزمية ضغط Lempel-Ziv أو اختصارًا LZ الأشهر من بينها. تستخدم أوامر يونيكس compress وgzip أنواعًا من خوارزمية LZ.

تتمثل فكرة خوارزمية الضغط القائمة على القاموس في إنشاء قاموس (جدول) لسلاسلٍ متغيرة الطول يمكن عدُّها جملًا شائعة تتوقع العثور عليها في البيانات، ثم استبدال كلٍّ من هذه السلاسل عند ظهورها في البيانات مع فهرس القاموس المقابل. يمكنك التعامل مع كل كلمة على أنها سلسلة وإخراج الدليلindex المقابل في القاموس لتلك الكلمة بدلًا من العمل مع كل حرفٍ في البيانات النصية على سبيل المثال. افرض أن للكلمة compression دليلٌ هو 4978 في قاموسٍ واحد معين، أي أنها الكلمة رقم 4978 في /usr/share/dict/words. لضغط النص، سنستبدل السلسلة "compression" بالفهرس 4978 في كل مرةٍ تظهر فيها هذه السلسلة. بما أن هذا القاموس المعين يحتوي على ما يزيد عن 25000 كلمة فيه، فقد يحتاج تشفير الفهرس 15 بتًا، مما يعني أن السلسلة "compression" يمكن تمثيلها في 15 بتًا بدلًا من 77 بت التي يتطلبها ASCII ذو 7 بتات، وهذه نسبة ضغط من 5 إلى 1. تمكنّا من الحصول على نسبة ضغط 2 إلى 1 في مكانٍ آخر عندما طبقنا الأمر compress على الشيفرة المصدرية للبروتوكولات الموضحة في هذا الكتاب.

وهذا يدفعنا للتساؤل عن مصدر القاموس. أحد الخيارات هو تحديد قاموس ثابت، ويفضل أن يكون قاموسًا مُصممًا للبيانات المضغوطة. والحل الأعم الذي يستخدمه ضغط LZ هو تعريف القاموس تكيُّفيًا بناءً على محتويات البيانات التي يجري ضغطها، ولكن يجب في هذه الحالة إرسال القاموس المُنشَأ أثناء الضغط مع البيانات حتى يتمكن جزء فك الضغط من الخوارزمية من اتمام عمله.

تمثيل الصور وضغطها باستخدام GIF وJPEG

تُستخدَم الصور الرقمية في كل مكان، حيث نشأ هذا الاستخدام عن طريق اختراع العروض الرسومية graphical displays وليس عن طريق الشبكات عالية السرعة، فأصبحت الحاجة إلى صيغ التمثيل القياسية وخوارزميات الضغط لبيانات الصور الرقمية ضرورية. حددت منظمة ISO استجابةً لهذه الحاجة صيغة صورةٍ رقمية تُعرف باسم JPEG، سُميت باسم المجموعة المشتركة لخبراء التصوير Joint Photographic Experts Group التي صممتها. يشير "Joint" في JPEG إلى جهدٍ مشترك بين منظمتي ISO / ITU. صيغة JPEG هي النوع الأكثر استخدامًا للصور الثابتة المستخدمة اليوم، وتظهر العديد من التقنيات المستخدمة في JPEG أيضًا في MPEG، وهي مجموعة معايير ضغط الفيديو ونقله أنشأتها مجموعة خبراء الصور المتحركة Moving Picture Experts Group.

نلاحظ أن هناك خطواتٍ قليلة جدًا قبل الخوض في تفاصيل JPEG للانتقال من صورةٍ رقمية إلى تمثيلٍ مضغوط لتلك الصورة التي يمكن نقلها وفك ضغطها وعرضها بصورةٍ صحيحة بواسطة المستقبل. تتكون الصور الرقمية من بكسلات ولأجل ذلك تُذكر الميجابكسلات في إعلانات كاميرا الهاتف الذكي. يمثل كل بكسل موقعًا واحدًا في الشبكة ثنائية الأبعاد التي تتكون منها الصورة، ويكون لكل بكسل قيمة رقمية تمثل لونًا بالنسبة للصور الملونة. هناك العديد من الطرق لتمثيل الألوان يشار إليها باسم فضاءات اللون color spaces، وأكثر ما يعرفه الناس هو RGB (أحمر، أخضر، أزرق). يمكنك التفكير في اللون على أنه كمية ثلاثية الأبعاد، حيث يمكنك صنع أي لون من الضوء الأحمر والأخضر والأزرق بكمياتٍ مختلفة. هناك العديد من الطرق الصحيحة المختلفة لوصف نقطةٍ معينة في الفضاء ثلاثي الأبعاد بافتراض الإحداثيات الديكارتية والقطبية على سبيل المثال، وهناك طرقٌ مختلفة لوصف اللون باستخدام ثلاث كميات، وبديل RGB الأكثر شيوعًا هو YUV، حيث تمثل Y السطوع luminance أي تقريبًا السطوع الكلي للبكسل، ويتضمن U وV التشبّع اللوني chrominance أو معلومات اللون. هناك عددٌ قليل من التفاوتات المختلفة لفضاء اللون YUV أيضًا.

تكمن أهمية هذه المناقشة في أن تشفير الصور الملونة ونقلها سواءٌ كانت ثابتة أو متحركة يتطلب اتفاقًا بين الطرفين على فضاء اللون، وإلا فسينتهي بك الأمر مع ألوانٍ مختلفةٍ يعرضها المستقبل عن الألوان التي التقطها المرسل. إن الاتفاق على تعريف فضاء أو مساحة اللون وربما طريقة للإبلاغ عن المساحة المُخصصة المستخدمة، هو جزءٌ من تعريف أي صورة أو تنسيق فيديو.

لنلق نظرةً على مثال تنسيق تبادل الرسوميات Graphical Interchange Format أو اختصارًا GIF. يستخدم GIF فضاء ألوان RGB ويبدأ بتمثيل 8 بتات لكلٍّ بعدٍ من أبعاد اللون الثلاثة بإجمالي 24 بتًا. يقلل GIF أولًا من الصور الملونة 24 بت إلى صورٍ ملونة 8 بت بدلًا من إرسال 24 بت لكل بكسل، وذلك عن طريق تحديد الألوان المستخدمة في الصورة والتي سيكون عددها عادةً أقل من 224 لونًا، ثم اختيار 256 لونًا التي تقترب من الألوان المستخدمة في الصورة؛ لكن قد يكون هناك أكثر من 256 لونًا، لذا تكمن الحيلة في محاولة عدم تشويه اللون كثيرًا عن طريق اختيار 256 لونًا بحيث لا يتغير لون البكسل كثيرًا.

يجري تخزين 256 لونًا في جدول يمكن فهرسته في رقمٍ مؤلفٍ من 8 بتات، وتُستبدَل قيمة كل بكسل بالفهرس المناسب. لاحظ أن هذا مثال على ضغطٍ مع فقد لأية صورةٍ تحتوي على أكثر من 256 لونًا. يشغّل GIF بعد ذلك LZ على النتيجة، حيث يتعامل مع التسلسلات الشائعة من البكسلات على أنها السلاسل التي يتكون منها القاموس وهي عمليةٌ بلا فقد. يكون GIF باستخدام هذا الأسلوب أحيانًا قادرًا على تحقيق نسب ضغط من رتبة 1:10، ولكن فقط عندما تتكون الصورة من عددٍ صغير نسبيًا من الألوان المنفصلة. يجري التعامل مع الشعارات الرسومية على سبيل المثال جيدًا بواسطة GIF، بينما لا يمكن ضغط صور المشاهد الطبيعية والتي غالبًا ما تتضمن طيفًا أكثر استمرارية من الألوان بهذه النسبة باستخدام GIF، كما أنه من السهل على العين البشرية اكتشاف التشوه الناجم عن تقليل لون GIF المفقود في بعض الحالات.

تُعَد صيغة JPEG أكثر ملاءمةً للصور الفوتوغرافية، حيث لا تقلل JPEG من عدد الألوان مثل GIF، لكنها تحول ألوان RGB التي تحصل عليها عادةً من الكاميرا الرقمية إلى فضاء YUV بدلًا من ذلك. يعود السبب وراء ذلك بالطريقة التي ترى بها العين الصور، فهناك مستقبلاتٌ في العين للسطوع، ومستقبلاتٌ أخرى للون، وبما أننا بارعون جدًا في إدراك الاختلافات في السطوع، فمن المنطقي إنفاق المزيد من البتات على نقل معلومات السطوع. إن المكون Y لفضاء YUV هو تقريبًا سطوع brightness البكسل، لذلك يمكننا ضغط هذا المكوّن بصورةٍ منفصلة، وأقل قوةً من المكونين الآخرين أي التشبع اللوني chrominance.

تُعد YUV وRGB طرقًا بديلة لوصف نقطة في فضاءٍ ثلاثي الأبعاد، ومن الممكن التحويل من فضاءٍ لوني إلى آخر باستخدام المعادلات الخطية، حيث تكون المعادلات بالنسبة لفضاء YUV شائع الاستخدام لتمثيل الصور الرقمية هي:

Y = 0.299R + 0.587G + 0.114B
U = (B-Y) x 0.565
V =  (R-Y) x 0.713

القيم الدقيقة للثوابت هنا غير مهمة طالما أن المشفر وجهاز فك التشفير يتفقان على ماهيتها. سيتعين على وحدة فك التشفير تطبيق التحويلات العكسية لاستعادة مكونات RGB اللازمة لتشغيل العرض، ولكن يجري اختيار الثوابت بعناية بناءً على الإدراك البشري للون. يمكنك أن ترى أن السطوع Y هو مجموع مكونات الأحمر والأخضر والأزرق، بينما U وV هما مكونان لاختلاف اللون، حيث يمثل U الفرق بين السطوع والأزرق، ويمثل V الفرق بين السطوع والأحمر. قد تلاحظ أن ضبط R وG وB على قيمها القصوى والتي ستكون 255 لتمثيلات 8 بتات سيؤدي أيضًا إلى إنتاج قيمة Y = 255 بينما سيكون U وV في هذه الحالة صفرًا. أي أن البكسل الأبيض بالكامل هو (255,255,255) في فضاء RGB و(255,0,0) في فضاء YUV.

SubsamplingTheUAndVComponentsOfAnImage.png

يمكننا الآن التفكير في ضغط كل مكونٍ من المكونات الثلاثة على حدة بمجرد تحويل الصورة إلى فضاء YUV. نريد أن نكون أقوى في ضغط مكونات U وV، حيث تكون عيون الإنسان أقل حساسية. هناك طريقةٌ واحدةٌ لضغط مكونات U وV وهي أخذ عينةٍ فرعيةٍ منها، حيث تتمحور الفكرة الأساسية لأخذ العينات الفرعية في أخذ عددٍ من البكسلات المتجاورة، وحساب متوسط قيمة U أو V لتلك المجموعة من البكسلات ونقل ذلك بدلًا من إرسال القيمة لكل بكسل، حيث يوضح الشكل السابق هذه النقطة. لا تُؤخذ عينات من مكون السطوع Y، لذلك ستُرسَل قيمة Y لجميع البكسلات، كما هو موضحٌ من خلال شبكة 16 × 16 بكسل على يسار الشكل السابق. نتعامل مع كل أربعة بكسلات متجاورة على أنها مجموعة group في حالة U وV، ونحسب متوسط قيمة U أو V لتلك المجموعة ونرسلها. وبالتالي ننتهي مع شبكة 8 × 8 من قيم U وV جاهزة للإرسال. وهكذا نرسل ست قيم (أربع قيم Y وقيمة لكلٍ من U وV) لكل أربعة بكسلات في هذا المثال بدلًا من القيم الأصلية الاثني عشر (أربع قيم لكلٍ من المكونات الثلاثة)، لتقليل المعلومات بنسبة 50%.

من الجدير بالذكر أنه يمكن أن نكون أكثر أو أقل قوةً عند أخذ العينة الفرعية، مع الزيادات المقابلة في الضغط وانخفاض الجودة. تحدث طريقة أخذ العينات الفرعية الموضحة هنا، والتي يجري فيها أخذ عيناتٍ فرعية من التشبع اللوني بعامل اثنين في كلا الاتجاهين الأفقي والشاقولي وذلك من خلال التعريف 4:2:0، لمطابقة النهج الأكثر شيوعًا المستخدم لكلٍ من JPEG وMPEG.

BlockDiagramOfJPEGCompression.png

أصبح لدينا الآن ثلاث شبكات من البكسلات للتعامل معها بمجرد الانتهاء من أخذ العينات الفرعية، ونتعامل مع كل شبكةٍ على حدة. يحدث ضغط JPEG لكل مكونٍ على ثلاث مراحل كما هو موضح في الشكل السابق. يجري تغذية الصورة من جهة الضغط من خلال هذه المراحل الثلاث وكتلة واحدة 8 × 8 في كل مرة. تطبّق المرحلة الأولى تحويل جيب التمام المتقطّع discrete cosine transform أو اختصارًا DCT على الكتلة. إذا افترضنا أن الصورة إشارةٌ signal في النطاق المكاني، فسيحوّل DCT هذه الإشارة إلى إشارةٍ مكافِئة في نطاق التردد المكاني، وهذه عملية دون فقد ولكنها تمهيدٌ ضروري للخطوة التالية، التي هي عملية مع فقد. تطبِّق المرحلة الثانية تحويلًا كميًّا أو ما يسمّى تكميمًا quantization على الإشارة الناتجة بعد DCT، وبذلك تُفقَد المعلومات الأقل أهميةً والموجودة في تلك الإشارة. تشفّر المرحلة الثالثة النتيجة النهائية، ولكنها تضيف أيضًا عنصر الضغط بدون فقد إلى الضغط مع فقد الذي تحقق في المرحلتين الأوليتين. يتّبع فك الضغط هذه المراحل الثلاث نفسها، ولكن بترتيب عكسي.

مرحلة DCT

تحويل DCT هو تحويل وثيق الصلة بتحويل فورييه السريع fast Fourier transform أو اختصارًا FFT، حيث يأخذ مصفوفة دخل 8 × 8 من قيم البكسلات ويخرج مصفوفة 8 × 8 بمعاملات التردد. يمكنك التفكير في مصفوفة الإدخال على أنها إشارةٌ من 64 نقطةٍ محددة في بعدين مكانيين (x وy)، حيث تقسّم تقنية DCT هذه الإشارة إلى 64 ترددًا مكانيًا. للحصول على فهمٍ أوسع للتردد المكاني، تخيل نفسك تتحرك عبر صورة في الاتجاه x على سبيل المثال، حيث سترى قيمة كل بكسل تتغير مع بعض دوال x؛ فإذا تغيرت هذه القيمة ببطء مع زيادة x فإن لها ترددًا مكانيًا منخفضًا؛ وإذا تغيرت بسرعة، فسيكون لها ترددًا مكانيًا عاليًا. لذا فإن الترددات المنخفضة تتوافق مع السمات الإجمالية للصورة، بينما تتوافق الترددات العالية مع التفاصيل الدقيقة. تكمن الفكرة وراء DCT في فصل الميزات الإجمالية الضرورية لمشاهدة الصورة عن التفاصيل الدقيقة الأقل أهمية والتي بالكاد تدركها العين في بعض الحالات.

يُعرَّف DCT الذي يستعيد البكسلات الأصلية أثناء فك الضغط بالصيغ التالية جنبًا إلى جنب مع معكوسه:

DCTAlongWithItsInverse.PNG

حيث تكون C(x)=1/2 عندما x = 0 وC(x)=1 عندما x > 0 وpixel(x,y) هي قيمة التدرج الرمادي للبكسل في الموضع (x , y) في كتلة 8 × 8 التي يجري ضغطها، وN = 8 في هذه الحالة.

يُسمى معامل التردد الأول في الموقع (0,0) في مصفوفة الخرج بمعامل DC أو DC coefficient. يمكننا أن نرى أن معامل DC هو مقياسٌ لمتوسط قيمة 64 بكسل دخل. تسمى العناصر 63 الأخرى في مصفوفة المخرجات معاملات AC التي تضيف معلومات التردد المكاني الأعلى إلى هذه القيمة المتوسطة. وهكذا عند انتقالك من معامل التردد الأول نحو معامل التردد 64، فإنك تنتقل من المعلومات منخفضة التردد إلى المعلومات عالية التردد، من الخطوط العريضة للصورة إلى التفاصيل الدقيقة ثم الأدق. هذه المعاملات ذات التردد العالي غير مهمة بصورةٍ متزايدة للجودة المحسوسة للصورة. تقرر المرحلة الثانية من JPEG أي جزءٍ من المعاملات يجب التخلص منه.

مرحلة التكميم

المرحلة الثانية من JPEG هي التكميم Quantization حيث يصبح الضغط مع فقد lossy.تحويل DCT بحد ذاته لا يفقد المعلومات، حيث يحوّل الصورة إلى نموذجٍٍ يسهل معرفة المعلومات المراد إزالتها؛ وعلى الرغم من أنه لا يحوي فقدًا، لكن يوجد بالطبع بعض الفقد أثناء مرحلة DCT بسبب استخدام حساب النقطة الثابتة. التكميم ببساطة مسألة إسقاط بتات معاملات التردد غير المهمة.

لمعرفة كيفية عمل مرحلة التكميم، تخيل أنك تريد ضغط بعض الأعداد الصحيحة الأقل من 100، مثل 45 و98 و23 و66 و7، فإذا قررت أن معرفة هذه الأرقام المقتطعةٌ إلى أقرب مضاعف للعدد 10 كافيةٌ بالنسبة لك، فيمكنك بعد ذلك قسمة كل رقم على الكم quantum الذي هو 10 باستخدام حساب العدد الصحيح، مما ينتج عنه 4 و9 و2 و6 و0، ويمكن تشفير هذه الأرقام في 4 بتات بدلًا من 7 بتات اللازمة لتشفير الأرقام الأصلية.

الكم Quantum
3 5 7 9 11 13 15 17
5 7 9 11 13 15 17 19
7 9 11 13 15 17 19 11
9 11 13 15 17 19 21 23
11 13 15 17 19 21 23 25
13 15 17 19 21 23 25 27
15 17 19 21 23 25 27 29
17 19 21 23 25 27 29 31

يستخدم JPEG جدول تكميم quantization table يعطي الكم المُستخدم من أجل كلٍ من المعاملات بدلًا من استخدام نفس الكم لجميع المعاملات التي عددها 64، كما هو محدد في الصيغة الواردة أدناه. يمكنك التفكير في Quantum في هذا الجدول على أنه معاملٌ يمكن ضبطه للتحكم في مقدار المعلومات المفقودة وبالتالي مقدار الضغط المُحقَّق. يحدد معيار JPEG عمليًا مجموعةً من جداول التكميم التي أثبتت فعاليتها في ضغط الصور الرقمية، وقد ورد مثالٌ لجدول تكميم في الجدول السابق. يكون للمعاملات المنخفضة كمٌّ قريبٌ من 1 في جداول مثل الجدول السابق مما يعني فقدان القليل من المعلومات منخفضة التردد، ويكون للمعاملات العالية قيمٌ أكبر مما يعني فقدان المزيد من معلومات الترددات العالية. تصبح قيم العديد من المعاملات عالية التردد صفرًا بعد التكميم نتيجة لجداول التكميم هذه، مما يجعلها مستعدةً لمزيدٍ من الضغط في المرحلة الثالثة.

معادلة التكميم الأساسية هي:

QuantizedValue(i,j) = IntegerRound(DCT(i,j), Quantum(i,j))

حيث:

IntegerRound(x) =
    Floor(x + 0.5) if x >= 0
    Floor(x - 0.5) if x < 0

ثم يُعرَّف فك الضغط Decompression ببساطة كما يلي:

DCT(i,j) = QuantizedValue(i,j) x Quantum(i,j)

إذا كان معامل DC أي DCT(0,0) لكتلةٍ معينة يساوي 25 على سبيل المثال، فسينتج عن تكميم هذه القيمة باستخدام الجدول السابق:

Floor(25/3+0.5) = 8

ستجري بعد ذلك استعادة هذا المعامل أثناء فك الضغط ليصبح 8 × 3 = 24.

مرحلة التشفير

تشفّر المرحلةُ الأخيرة من JPEG معاملات التردد الكمومية في نموذجٍ مضغوط، فينتج عن ذلك ضغطٌ إضافي لكنه ضغطٌ بدون فقد. تُعالَج المعاملات بدءًا من معامل DC في الموضع (0,0) في تسلسل متعرّج zigzag كما هو موضحٌ في الشكل التالي. ويُستخدَم نموذجُ من تشفير طول التشغيل run length encoding على طول هذا التسلسل المتعرج، حيث يبقي RLE على المعاملات 0 فقط، وهو أمرٌ مهم لأن العديد من المعاملات اللاحقة تساوي 0، ثم تُشفَّر قيم المعامل الفردية باستخدام شيفرة هوفمان. يسمح معيار JPEG للمنفّذ باستخدام الترميز الحسابي بدلًا من شيفرة هوفمان.

ZigzagTraversalOfQuantizedFrequencyCoefficients.png

بما أن معامل DC يحتوي على نسبةٍ كبيرة من المعلومات حول كتلة 8 × 8 من الصورة المصدر، وتتغير عادةً الصور ببطء من كتلةٍ إلى أخرى، لذلك يُشفَّر كل معامل DC على أنه الاختلاف عن معامل DC السابق، ويسمى هذا الأسلوب بأسلوب تشفير دلتا.

تتضمن JPEG عددًا من التغيرات التي تتحكم في مقدار الضغط الذي تحققه مقابل دقة الصورة، ويمكن فعل ذلك باستخدام جداول تكميمٍ مختلفة على سبيل المثال. تجعل هذه الاختلافات إضافةً إلى حقيقة أن الصور المختلفة لها خصائص مختلفة تحديد نسب الضغط الممكن تحقيقها باستخدام JPEG بدقة أمرًا مستحيلًا. تُعَد النسبة 30:1 شائعة، ومن المؤكد أن النسب الأعلى ممكنة، لكن ستصبح التشوهات الصنعية artifacts أي التشوهات الملحوظة بسبب الضغط أكثر حدةً عند النسب الأعلى.

ترجمة -وبتصرّف- للقسم Multimedia Data من فصل End-to-End Data من كتاب Computer Networks: A Systems Approach

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...