جبيغ. خوارزمية الضغط

مرحبا مجددا! لقد وجدت هذه المقالة مكتوبة مرة أخرى في مايو 2019. هذا استمرار لسلسلة من المقالات حول WAVE وJPEG، هنا الأول. سيتضمن هذا المنشور معلومات حول خوارزمية ترميز الصور والتنسيق نفسه ككل.

قليل من التاريخ

ملعقة كبيرة من مقالة ويكيبيديا:

يعد JPEG (Joint Photography Experts Group) أحد تنسيقات الرسومات النقطية الشائعة المستخدمة لتخزين الصور الفوتوغرافية والصور المشابهة.

تم تطوير هذا المعيار من قبل مجموعة خبراء التصوير المشتركة في عام 1991 لضغط الصور بكفاءة.

كيف تتحول الصور من الخام إلى JPEG؟

يعتقد بعض الأشخاص أن صور JPEG هي بيانات أولية مضغوطة باستخدام طريقة هوفمان، لكن هذا غير صحيح. قبل ضغط التحكم، تنتقل البيانات لمسافات طويلة.

أولاً، تم تغيير نموذج الألوان من RGB إلى YCbCr. حتى أن هناك خوارزمية خاصة لهذا - هنا. لا يتم لمس Y، لأنه هو المسؤول عن السطوع، وسيكون تغيره ملحوظا.

أول شيء يجب فعله بالصورة هو "رقيق" (أخذ عينات فرعية). من السهل أن نفهم: يتم أخذ مجموعة 2x2 من البكسلات، ثم يتم أخذ Cb وCr - متوسط ​​قيم كل مكون من مكونات YCbCr لهذه البكسلات الأربعة. لذا، فزنا 6 بايت، بدلاً من 4 Y، 4 Cb، 4 Cr حصلنا على 4 Y ونفس Cb وCr لكل منهم (4 + 4 + 4 = 12؛ 4 + 1 + 1 = 6؛ 12 - 6 = 6). حتى على مقياس 2×2، يبدو الضغط مع فقدان البيانات بنسبة ضغط 2:1 قويًا. وهذا ينطبق على الصورة بأكملها. وهكذا - لقد انخفضوا بمقدار نصف الحجم. ويمكننا استخدام هذه التقنية بفضل إدراكنا للألوان. سيلاحظ الشخص بسهولة اختلافًا في السطوع، ولكن ليس في اللون، إذا تم حساب متوسطه على كتلة صغيرة من البكسل. يمكن أيضًا إجراء التخفيف في خط، 4 بكسل أفقيًا وعموديًا. يتم استخدام الخيار الأول في كثير من الأحيان. إذا كانت جودة الصورة مهمة، فلن يتم تنفيذ عملية الحذف على الإطلاق.
رسم توضيحي مرئي للتخفيف (الخبر لم يسمح لي بإدراج صورة متحركة) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

الجزء الرئيسي من التحضير

تجهيز

الآن يأتي الجزء الأصعب والأكثر ضرورة. يتم تقسيم الصورة بأكملها إلى كتل مقاس 8 × 8 (يتم استخدام التعبئة إذا لم تكن الدقة مضاعفًا لجانب الكتلة).

تنطبق الآن على كل كتلة DCT (تحويل جيب التمام المنفصل). في هذا الجزء، يتم إخراج كل ما هو غير ضروري من الصورة. باستخدام DCT، عليك أن تفهم ما إذا كانت كتلة معينة (8 × 8) تصف أي جزء رتيب من الصورة: السماء، الجدار؛ أو تحتوي على بنية معقدة (شعر، رموز، إلخ). من المنطقي أن 64 بكسل من اللون المماثل يمكن وصفها بـ 1 فقط، لأنه حجم الكتلة معروف بالفعل. الكثير بالنسبة للضغط: 64 إلى 1.

يقوم DCT بتحويل الكتلة إلى طيف، وحيثما تتغير القراءات بشكل حاد، يصبح المعامل موجبًا، وكلما كان الانتقال أكثر حدة، كلما ارتفع الناتج. حيث يكون المعامل أعلى، تظهر الصورة تحولات واضحة في اللون والسطوع، حيث تكون أقل - تغيرات ضعيفة (سلسة) في قيم مكونات YCbCr في الكتلة.

توضيح

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

يتم إجراء التكميم لخلق إمكانية ضغط أكبر. إليك ما يبدو باستخدام مثال تحديد كمية الرسم البياني y = sin(x):

جبيغ. خوارزمية الضغط

ضغط

أولاً نمر عبر المصفوفة بنمط متعرج:

جبيغ. خوارزمية الضغط

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

أين تستخدم

في كل مكان. مثل PNG، يتم استخدام JPEG في الكاميرات وأنظمة التشغيل (مثل شعارات الشركة وأيقونات التطبيقات والصور المصغرة) وفي جميع المناطق المحتملة التي تحتاج إلى تخزين الصور بكفاءة.

إنتاج

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

مصادر

مقالة عن YCbCr على ويكيبيديا
مقالة ويكيبيديا عن JPEG
القليل عن PrEP من منشور Pikabu
مقالة ويكيبيديا عن PrEP

المصدر: www.habr.com

إضافة تعليق