كيف يعمل تنسيق JPEG

صور JPEG منتشرة في كل مكان في حياتنا الرقمية ، ولكن خلف عباءة الوعي هذه توجد خوارزميات تزيل التفاصيل التي لا تستطيع العين البشرية رؤيتها. والنتيجة هي أعلى جودة مرئية في أصغر حجم للملف - ولكن كيف يعمل كل ذلك بالضبط؟ دعونا نرى بالضبط ما لا تراه أعيننا!

كيف يعمل تنسيق JPEG

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

لحل هذه المشكلة ، تم تشكيل لجنة خبراء من جميع أنحاء العالم في عام 1986 تحت اسم "مجموعة خبراء التصوير المشتركة(مجموعة خبراء التصوير المشتركة ، JPEG) ، التي تأسست كجزء من العمل المشترك للمنظمة الدولية للتوحيد القياسي (ISO) واللجنة الكهروتقنية الدولية (IEC) ، وهما منظمتان دوليتان للمعايير مقرهما في جنيف (سويسرا).

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

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

علاوة على ذلك ، من الممتع جدًا اللعب بالصور بهذه الطريقة.

كيف يعمل تنسيق JPEG

النظر داخل ملف JPEG

على جهاز الكمبيوتر ، يتم تخزين كل شيء كسلسلة من الأرقام الثنائية. عادةً ما يتم تجميع هذه البتات ، الأصفار والآحاد ، في ثمانية ، مكونة البايت. عندما تفتح صورة JPEG على جهاز الكمبيوتر الخاص بك ، يجب أن يقوم شيء ما (المتصفح ، نظام التشغيل ، أيًا كان) بفك تشفير وحدات البايت ، واستعادة الصورة الأصلية كقائمة من الألوان التي يمكن عرضها.

إذا قمت بتنزيل هذا لطيف صورة قطة وفتحه في محرر نصوص ، سترى مجموعة من الشخصيات المختلطة.

كيف يعمل تنسيق JPEG
أنا هنا أستخدم Notepad ++ لفحص محتويات الملف ، لأن برامج تحرير النصوص الشائعة مثل Notepad من Windows ستؤدي إلى إفساد الملف الثنائي بعد حفظه ولن يتناسب مع تنسيق JPEG.

يؤدي فتح صورة في محرر نصوص إلى إرباك جهاز الكمبيوتر ، تمامًا كما تربك عقلك عندما تفرك عينيك وتبدأ في رؤية البقع الملونة!

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

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

لفهم كيفية فك تشفير JPEG ، نحتاج إلى رؤية الإشارات الأصلية نفسها - البيانات الثنائية. يمكن القيام بذلك باستخدام محرر ست عشري ، أو مباشرة على صفحة الويب للمقالة الأصلية! توجد صورة ، بجانبها في حقل النص ، يتم تقديم جميع وحدات البايت (باستثناء الرأس) في شكل عشري. يمكنك تغييرها وسيقوم البرنامج النصي بإعادة ترميزه وإنتاج صورة جديدة على الفور.

كيف يعمل تنسيق JPEG

يمكنك تعلم الكثير فقط من خلال اللعب مع هذا المحرر. على سبيل المثال ، هل يمكنك تحديد ترتيب تخزين وحدات البكسل؟

الغريب في هذا المثال أن تغيير بعض الأرقام لا يؤثر على الصورة إطلاقاً ، فمثلاً إذا استبدلت الرقم 17 بالرقم 0 في السطر الأول ، فستتلف الصورة تمامًا!

كيف يعمل تنسيق JPEG

التغييرات الأخرى ، مثل تغيير 7 على السطر 1988 إلى 254 ، تغير اللون ، ولكن فقط وحدات البكسل اللاحقة.

كيف يعمل تنسيق JPEG

ولعل أغرب شيء هو أن بعض الأرقام لا تغير لون الصورة فحسب ، بل تغير شكلها أيضًا. غيّر 70 في السطر 12 إلى 2 وانظر إلى الصف العلوي من الصورة لترى ما أعنيه.

كيف يعمل تنسيق JPEG

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

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

ثلاثة مستويات لضغط JPEG:

  1. أخذ عينات فرعية من اللون.
  2. تحويل وجيب التمام المنفصل.
  3. تشغيل طول الترميز, دلتا и هوفمان

لإعطائك فكرة عن حجم الضغط ، لاحظ أن الصورة أعلاه تمثل 79 رقمًا ، أي حوالي 819 كيلوبايت. إذا أردنا تخزينه بدون ضغط ، فسنحتاج إلى ثلاثة أرقام لكل بكسل - للمكونات الأحمر والأخضر والأزرق. هذا من شأنه أن يصل إلى 79 رقم ، أو كاليفورنيا. 917 كيلو بايت. نتيجة لضغط JPEG ، انخفض الملف النهائي بأكثر من 700 مرات!

في الواقع ، يمكن ضغط هذه الصورة أكثر من ذلك بكثير. يوجد أدناه صورتان جنبًا إلى جنب - تم ضغط الصورة الموجودة على اليمين إلى 16 كيلوبايت ، أي 57 مرة أقل من النسخة غير المضغوطة!

كيف يعمل تنسيق JPEG

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

1. اختزال اللون

هذه صورة مع تطبيق المستوى الأول فقط من الضغط.

كيف يعمل تنسيق JPEG
(نسخة تفاعلية بتنسيق إبداعي مقالات). إزالة رقم واحد يدمر كل الألوان. ومع ذلك ، إذا تمت إزالة ستة أرقام بالضبط ، فلن يكون لها تأثير يذكر على الصورة.

الآن الأرقام أسهل قليلاً في فكها. هذه قائمة بسيطة من الألوان تقريبًا ، كل بايت يتغير بكسل واحد بالضبط ، لكنه بالفعل نصف حجم الصورة غير المضغوطة (والتي قد تستغرق حوالي 300 كيلو بايت في مثل هذا الحجم المصغر). احزر لما؟

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

كيف يعمل تنسيق JPEG

هذا لأن هذه البايتات تمثل Y (السطوع) ،

كيف يعمل تنسيق JPEG

Cb (أزرق نسبي) ،

كيف يعمل تنسيق JPEG

وصور Cr (احمرار نسبي).

كيف يعمل تنسيق JPEG

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

كيف يعمل تنسيق JPEG

كما أنه مشابه جدًا لكيفية عمل العين البشرية. تسمى مستقبلات اللون في عيوننا "المخاريط"، وتنقسم إلى ثلاثة أنواع ، كل منها أكثر حساسية إما للأحمر ، أو الأخضر ، أو للألوان الزرقاء [المخاريط من النوع S حساسة باللون البنفسجي والأزرق (S من الإنجليزية. طيف قصير - قصير الموجة ) ، من النوع M - باللون الأخضر - الأصفر (M من اللغة الإنجليزية. متوسطة - موجة متوسطة) ، و L من النوع - باللون الأصفر والأحمر (L من اللغة الإنجليزية. طويلة - طويلة الموجة) أجزاء من الطيف. إن وجود هذه الأنواع الثلاثة من المخاريط (والقضبان الحساسة في الجزء الأخضر الزمردي من الطيف) يعطي الشخص رؤية ملونة. / تقريبا. ترجمة.]. العصي، النوع الآخر من المستقبلات الضوئية في أعيننا ، قادر على اكتشاف التغيرات في السطوع ولكنه أكثر حساسية للون. تحتوي أعيننا على حوالي 120 مليون قضيب و 6 ملايين فقط من المخاريط.

لذلك ، تلاحظ أعيننا التغيرات في السطوع بشكل أفضل بكثير من التغيرات في اللون. إذا قمت بفصل اللون عن السطوع ، يمكنك إزالة القليل من اللون ولن يلاحظ أحد أي شيء. Chroma subampling هي عملية تمثيل مكونات اللون للصورة بدقة أقل من مكونات النصوع. في المثال أعلاه ، يحتوي كل بكسل على مكون Y واحد بالضبط ، ولكل مجموعة فردية مكونة من أربعة بكسلات تحتوي على مكون Cb ومكون Cr واحد بالضبط. لذلك ، تحتوي الصورة على معلومات لونية أقل أربع مرات من الصورة الأصلية.

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

لذلك ، فإن إزالة رقم واحد من المحرر يؤدي إلى تدمير كل الألوان تمامًا. يتم تخزين المكونات في النموذج YYYY Cb Cr (في الواقع ، ليس بالضرورة بهذا الترتيب - يتم تحديد ترتيب التخزين في رأس الملف). ستؤدي إزالة الرقم الأول إلى تفسير القيمة الأولى لـ Cb على أنها Y و Cr كـ Cb ، وبشكل عام ، سيتم الحصول على تأثير الدومينو ، مع تبديل كل ألوان الصورة.

لا تتطلب منك مواصفات JPEG استخدام YCbCr. ولكن في معظم الملفات يتم استخدامه لأنه يعطي صورًا ذات جودة أفضل بعد أخذ عينات فرعية مقارنة بـ RGB. لكن ليس عليك أن تأخذ كلامي على محمل الجد. انظر بنفسك في الجدول أدناه كيف سيبدو الاختزال الجزئي لكل مكون فردي في كل من RGB و YCbCr.

كيف يعمل تنسيق JPEG
(نسخة تفاعلية بتنسيق إبداعي مقالات).

لا يمكن ملاحظة إزالة اللون الأزرق مثل اللون الأحمر أو الأخضر. هذا بسبب ستة ملايين مخروط في عينيك ، حوالي 64٪ حساسة للأحمر ، و 32٪ للأخضر ، و 2٪ للأزرق.

من الأفضل رؤية الاختزال الجزئي للمكون Y (أسفل اليسار). حتى التغيير الطفيف يمكن ملاحظته.

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

2. تحويل وجيب التمام المنفصل

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

كيف يعمل تنسيق JPEG
(نسخة تفاعلية بتنسيق إبداعي مقالات). في الإصدار التفاعلي ، يؤدي النقر فوق بكسل إلى تمرير المحرر إلى السطر الذي يمثله. حاول إزالة الأرقام من النهاية أو إضافة بضعة أصفار إلى رقم معين.

للوهلة الأولى ، يبدو أن الضغط سيئ للغاية. يوجد 100،000 بكسل في الصورة ، ويستغرق الأمر 102،400 رقم للإشارة إلى سطوعها (مكونات Y) - وهذا أسوأ من عدم ضغط أي شيء على الإطلاق!

ومع ذلك ، لاحظ أن معظم هذه الأرقام هي صفر. علاوة على ذلك ، يمكن إزالة كل هذه الأصفار في نهاية السطور دون تغيير الصورة. هناك حوالي 26 رقم متبقي ، وهو ما يقرب من 000 مرات أقل!

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

تتشكل هذه الأنماط بناءً على مخطط جيب التمام. إليك ما يبدو عليه البعض منهم:

كيف يعمل تنسيق JPEG
8 احتمالات من أصل 64

يوجد أدناه صورة توضح جميع الأنماط الـ 64.

كيف يعمل تنسيق JPEG
(نسخة تفاعلية بتنسيق إبداعي مقالات).

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

حقيقة أن أي صورة يمكن أن تتكون من 64 نمطًا محددًا تبدو مثل السحر. ومع ذلك ، هذا هو نفس القول بأن أي مكان على الأرض يمكن وصفه برقمين - خط العرض وخط الطول [يشير إلى نصفي الكرة الأرضية / تقريبًا. ترجمة.]. غالبًا ما نفكر في سطح الأرض على أنه ثنائي الأبعاد ، لذلك نحتاج فقط إلى رقمين. صورة 8 × 8 لها 64 بعدًا ، لذا نحتاج إلى 64 رقمًا.

لم يتضح بعد كيف يساعدنا ذلك من حيث الضغط. إذا احتجنا إلى 64 رقمًا لتمثيل صورة 8 × 8 ، فلماذا يكون هذا أفضل من مجرد تخزين 64 مكونًا للإضاءة؟ نقوم بذلك لنفس السبب الذي جعلنا نحول ثلاثة أرقام RGB إلى ثلاثة أرقام YCbCr: فهي تسمح لنا بإزالة التفاصيل الدقيقة.

من الصعب رؤية التفاصيل التي تتم إزالتها بالضبط في هذه المرحلة لأن JPEG يطبق DCT على كتل 8x8. ومع ذلك ، لا أحد يمنعنا من تطبيقه على الصورة كاملة. إليك ما يبدو عليه DCT للمكون Y عند تطبيقه على الصورة بأكملها:

كيف يعمل تنسيق JPEG

يمكن إزالة أكثر من 60 رقم من النهاية بدون أي تغييرات ملحوظة في الصورة تقريبًا.

كيف يعمل تنسيق JPEG

لاحظ ، مع ذلك ، أنه إذا كنا صفرًا من الأرقام الخمسة الأولى ، فسيكون الفرق واضحًا.

كيف يعمل تنسيق JPEG

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

كيف يعمل تنسيق JPEG

نرى جميع مناطق الصورة حيث يحدث التغيير الأكبر من بكسل إلى بكسل. تبرز عيون القط وشعيراته وبطانية تيري والظلال في الزاوية اليسرى السفلية. يمكنك الذهاب إلى أبعد من ذلك بالتخلص من أول 10 رقم:

كيف يعمل تنسيق JPEG

20 000:

كيف يعمل تنسيق JPEG

40 000:

كيف يعمل تنسيق JPEG

60 000:

كيف يعمل تنسيق JPEG

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

يمكنك القيام بشيء رائع مثل تدفق الصور تدريجيًا. يمكنك عرض صورة ضبابية تصبح أكثر وأكثر تفصيلاً كلما تم تنزيل المزيد من المعاملات.

هنا ، للمتعة فقط ، ماذا يحدث عند استخدام 24 رقم فقط:

كيف يعمل تنسيق JPEG

أو 5000 فقط:

كيف يعمل تنسيق JPEG

ضبابية للغاية ولكن يمكن التعرف عليها!

3. ترميز أطوال الجري ، دلتا وهوفمان

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

كيف يمكنك ضغط شيء ما دون تجاهل المعلومات؟ تخيل كيف نصف مستطيلًا أسود بسيطًا بحجم 700 × 437.

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

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

حجم ملف JPEG مع مستطيل أسود أكبر بكثير من 4 بايت - تذكر أنه عند مستوى DCT ، يتم تطبيق الضغط على كتل 8x8 بكسل. لذلك ، على الأقل ، نحتاج إلى معامل DCT واحد لكل 64 بكسل. نحتاج إلى واحد لأنه بدلاً من تخزين معامل DCT واحد متبوعًا بـ 63 صفراً ، يسمح لنا ترميز طول التشغيل بتخزين رقم واحد والإشارة إلى "جميع الأصفار الأخرى هي أصفار".

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

12 13 14 14 14 13 13 14

يمكننا أن نبدأ بالرقم 12 ثم نكتب المقدار الذي يجب جمعه أو طرحه للحصول على الرقم التالي. وهذا التسلسل في ترميز دلتا يأخذ الشكل:

12 1 1 0 0 -1 0 1

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

يعد تشفير دلتا أحد الأساليب القليلة المستخدمة خارج كتل 8 × 8. من بين 64 معاملات DCT ، واحد هو ببساطة دالة موجية ثابتة (لون صلب). إنه يمثل متوسط ​​سطوع كل كتلة لمكونات الإنارة ، أو متوسط ​​الزرقة لمكونات Cb ، وما إلى ذلك. تسمى القيمة الأولى لكل كتلة DCT قيمة DC ، ويتم ترميز كل قيمة DC على أساس دلتا بالنسبة إلى القيم السابقة. لذلك ، سيؤثر تغيير سطوع الكتلة الأولى على جميع الكتل.

يبقى اللغز الأخير: كيف يفسد تغيير الرقم المفرد الصورة بأكملها؟ حتى الآن ، لا تحتوي مستويات الضغط على مثل هذه الخصائص. الجواب يكمن في رأس JPEG. تحتوي أول 500 بايت على بيانات وصفية حول الصورة - العرض والارتفاع وما إلى ذلك ، وحتى الآن لم نعمل معها.

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

يبدو سخيفًا ، لكن هذا بالضبط ما يحدث. يتم ضغط كل صورة بتنسيق JPEG باستخدام أكواد خاصة بها. يتم تخزين قاموس التعليمات البرمجية في الرأس. هذه التقنية تسمى "كود هوفمان" والقاموس يسمى جدول هوفمان. في الرأس ، يتم تمييز الجدول ببايتَين - 255 ثم 196. يمكن أن يكون لكل مكون لون جدول خاص به.

ستؤثر تغييرات الجدول بشكل كبير على أي صورة. وخير مثال على ذلك هو تغيير 15 إلى 1 في السطر الخامس عشر.

كيف يعمل تنسيق JPEG

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

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

234 115

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

11101010 01110011

ثم ننتقل إلى الطاولة لفهم كيفية تجميعها. على سبيل المثال ، يمكن أن تكون أول ستة بتات ، (111010) ، أو 58 في النظام العشري ، تليها خمس بتات (10011) ، أو 19 ، وأخيرًا آخر أربع بتات (0011) ، أو 3.

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

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

ما يمكن فعله أيضًا هو تغيير طاولة Huffman قليلاً. بالنسبة للآخرين ، ستبدو وكأنها صورة فاسدة. وستعرف فقط الخيار السحري لإصلاحه.

لتلخيص: إذن ما هو المطلوب لفك تشفير JPEG؟ ضروري:

  1. استخرج جدول (جداول) Huffman من الرأس وفك تشفير البتات.
  2. استخرج معاملات تحويل جيب التمام المنفصلة لكل مكون من مكونات اللون والنصوع لكل كتلة 8 × 8 عن طريق التحويل العكسي لتشفير طول التشغيل والدلتا.
  3. اجمع جيب التمام بناءً على المعاملات للحصول على قيم البكسل لكل كتلة 8 × 8.
  4. مقياس مكونات اللون إذا تم إجراء اختزال جزئي (هذه المعلومات موجودة في الرأس).
  5. قم بتحويل قيم YCbCr الناتجة لكل بكسل إلى RGB.
  6. اجلب الصورة إلى الشاشة!

عمل جاد لمجرد مشاهدة صورة مع قطة! ومع ذلك ، ما يعجبني فيه هو أنه يُظهر كيف أن تقنية JPEG تتمحور حول الإنسان. يعتمد على ميزات تصورنا ، والذي يسمح لنا بتحقيق ضغط أفضل بكثير من التقنيات التقليدية. والآن ، بفهم كيفية عمل JPEG ، يمكنك تخيل كيف يمكن نقل هذه التقنيات إلى مناطق أخرى. على سبيل المثال ، يمكن أن يؤدي ترميز دلتا في الفيديو إلى تقليل حجم الملف بشكل كبير ، نظرًا لوجود مناطق كاملة في كثير من الأحيان لا تتغير من إطار إلى إطار (على سبيل المثال ، الخلفية).

الكود المستخدم في المقال، مفتوح ، ويحتوي على إرشادات لاستبدال الصور بالصور الخاصة بك.

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

إضافة تعليق