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

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

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

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

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

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

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

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

هذا لأن هذه البايتات تشير إلى Y (السطوع) ،

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

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

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

كما أنه يشبه إلى حد بعيد عمل العين البشرية. تسمى مستقبلات الألوان في أعيننا "
المخاريط " ، وتنقسم إلى ثلاثة أنواع ، كل منها أكثر حساسية إما للأحمر أو الأخضر أو الأزرق [الأقماع من نوع S حساسة باللون الأزرق البنفسجي (S من English Short - shortwave) الطيف) ، من النوع M - باللون الأخضر - الأصفر (M من الإنجليزية. الموجة المتوسطة - المتوسطة) ، والنوع L - في الأجزاء ذات اللون الأصفر والأحمر (L من الإنكليزية. - الموجة الطويلة - الطويلة) من الطيف. وجود هذه الأنواع الثلاثة من الأقماع (والقضبان الحساسة في الجزء الأخضر الزمردي من الطيف) يعطي رؤية ملونة للشخص. / تقريبا. العابرة.].
يمكن للقضبان ، وهي نوع آخر من مستقبِلات الضوء في أعيننا ، التقاط التغييرات في السطوع فقط ، لكنها أكثر حساسية بكثير. في عيوننا هناك حوالي 120 مليون قضيب و 6 ملايين فقط المخاريط.
لذلك ، تلاحظ أعيننا التغييرات في السطوع أفضل بكثير من التغييرات في اللون. إذا قمت بفصل اللون عن السطوع ، يمكنك إزالة القليل من اللون ، ولن يلاحظ أحد أي شيء. اختزال اللون هو عملية تمثيل مكونات الألوان للصورة بدقة أقل من مكونات السطوع. في المثال أعلاه ، يحتوي كل بكسل على مكون Y واحد تمامًا ، ولكل مجموعة من أربعة بكسلات مكون Cb واحد وواحد Cr. لذلك ، تحتوي الصورة على معلومات أقل أربع مرات من الألوان الأصلية.
يتم استخدام مساحة اللون YCbCr ليس فقط في JPEG. تم اختراعه في الأصل عام 1938 للبرامج التلفزيونية. ليس كل شخص لديه تلفزيون ملون ، لذلك فإن فصل اللون والسطوع سمح للجميع بتلقي نفس الإشارة ، وأجهزة التلفزيون التي لا تحتوي على لون تستخدم فقط مكون السطوع.
لذلك ، فإن حذف رقم واحد من المحرر يدمر كل الألوان تمامًا. يتم تخزين المكونات كـ YYYY Cb Cr (في الواقع ، ليس بالضرورة في هذا الترتيب - يتم تحديد ترتيب التخزين في رأس الملف). ستؤدي إزالة الرقم الأول إلى حقيقة أن قيمة Cb الأولى سيتم اعتبارها Y ، Cr كـ Cb ، وسيظهر تأثير الدومينو ككل ، مع تبديل كل ألوان الصورة.
مواصفات JPEG لا تلزمك باستخدام YCbCr. ولكن في معظم الملفات يتم استخدامه لأنه يعطي صورًا ذات جودة أفضل بعد الاختزال مقارنةً بـ RGB. ولكن ليس عليك أن تأخذ كلامي من أجل ذلك. انظر لنفسك في الجدول أدناه كيف سيبدو الاختزال لكل مكون فردي في RGB وفي YCbCr.

(النسخة التفاعلية - في المقال
الأصلي ).
إزالة الأزرق ليست ملحوظة مثل الأحمر أو الأخضر. هذا بسبب ستة مخروط في عينيك ، حوالي 64 ٪ حساسة للون الأحمر ، 32 ٪ إلى اللون الأخضر و 2 ٪ إلى اللون الأزرق.
أفضل رؤية للعينة الفرعية للمكون Y (أسفل اليسار). ملحوظ حتى هو تغيير طفيف.
لا يقلل تحويل صورة من RGB إلى YCbCr من حجم الملف ، ولكن يسهل العثور على تفاصيل أقل وضوحًا يمكن إزالتها. يحدث ضياع الضغط في المرحلة الثانية. يعتمد على فكرة تمثيل البيانات في شكل أكثر انضغاطًا.
2. جيب التمام تحويل منفصلة وتقديرية
يحدد مستوى الضغط هذا في معظمه جوهر JPEG. بعد تحويل الألوان إلى YCbCr ، يتم ضغط المكونات بشكل منفصل ، حتى نتمكن من التركيز على المكون Y في وقت لاحق فقط ، وهذه هي الطريقة التي تبحث بها بايت المكون Y بعد تطبيق هذا المستوى.
(النسخة التفاعلية - في المقال الأصلي ). في الإصدار التفاعلي ، يؤدي النقر فوق بكسل إلى تمرير المحرر إلى السطر الذي يشير إليه. حاول إزالة الأرقام من النهاية أو إضافة عدد قليل من الأصفار إلى رقم معين.
للوهلة الأولى ، يبدو وكأنه ضغط سيء للغاية. هناك 100000 بكسل في الصورة ، وهناك حاجة إلى 102،400 رقم للإشارة إلى سطوعها (مكونات Y) - وهذا أسوأ من عدم ضغط أي شيء على الإطلاق!
ومع ذلك ، لاحظ أن معظم هذه الأرقام هي صفر. علاوة على ذلك ، يمكن حذف كل هذه الأصفار في نهاية الأسطر دون تغيير الصورة. يتبقى حوالي 26000 رقم ، وهذا أقل 4 مرات تقريبًا!
في هذا المستوى هو سر أنماط الشطرنج. على عكس التأثيرات الأخرى التي رأيناها ، فإن ظهور هذه الأنماط ليس خللًا. هم لبنات بناء الصورة كاملة. يحتوي كل سطر من المحرر على 64 رقمًا بالضبط ، معاملات تحويل جيب التمام المنفصلة (DCT) المقابلة لشدة 64 نمطًا فريدًا.
تتشكل هذه الأنماط على أساس الرسم البياني جيب التمام. هؤلاء بعض منهم:
8 من أصل 64 احتمالاتيوجد أدناه صورة توضح جميع الأنماط الـ 64.
(النسخة التفاعلية - في المقال الأصلي ).هذه الأنماط لها أهمية خاصة لأنها تشكل أساسًا لصور 8 × 8. إذا كنت غير معتاد على الجبر الخطي ، فهذا يعني أنه يمكن الحصول على أي صورة 8 × 8 من هذه الأنماط الـ 64. DCT هي عملية تقسيم الصور إلى كتل 8x8 وتحويل كل كتلة إلى مزيج من هذه المعاملات 64.
حقيقة أن أي صورة يمكن أن تتألف من 64 أنماط محددة تبدو سحرية. ومع ذلك ، هذا هو نفس القول بأن أي مكان على الأرض يمكن وصفه برقمين - خطوط الطول والعرض [تشير إلى نصفي الكرة / تقريبا. العابرة.]. غالبًا ما نعتبر سطح الأرض ثنائي الأبعاد ، لذلك نحن بحاجة إلى رقمين فقط. صورة 8x8 لها 64 أبعاد ، لذلك نحن بحاجة إلى 64 رقم.
لم يتضح بعد كيف يساعدنا ذلك في الشعور بالضغط. إذا احتجنا إلى 64 رقمًا لتمثيل صورة بحجم 8 × 8 ، فلماذا يكون هذا أفضل من مجرد تخزين 64 مكونًا من مكونات النصوع؟ نقوم بذلك لنفس السبب الذي جعلنا نحول ثلاثة أرقام RGB إلى ثلاثة أرقام YCbCr: وهذا يسمح لنا بإزالة التفاصيل غير المرئية.
من الصعب معرفة التفاصيل التي تمت إزالتها بالضبط في هذه المرحلة ، لأن JPEG يطبق DCT على كتل 8 × 8. ومع ذلك ، لا أحد يمنعنا من تطبيقه على الصورة كاملة. إليك ما يشبه DCT في المكون Y عند تطبيقه على الصورة بأكملها:

من النهاية ، يمكنك حذف أكثر من 60،000 رقم بدون تغييرات ملحوظة في الصورة.

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

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

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

20 000:

40 000:

60 000:

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

أو 5000 فقط:

ضبابية جدا ، ولكن كما لو يمكن التعرف عليها!
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. من معاملات DCT 64 ، واحد هو ببساطة وظيفة موجة ثابتة (لون خالص). ويمثل متوسط السطوع لكل كتلة لمكونات النصوع ، أو متوسط الزرق لمكونات Cb ، وما إلى ذلك. تسمى القيمة الأولى لكل فدرة DCT قيمة DC ، وتخضع كل قيمة DC لترميز دلتا فيما يتعلق بالقيم السابقة. لذلك ، سيؤثر التغيير في سطوع الكتلة الأولى على جميع الكتل.يبقى اللغز الأخير: كيف يفسد التغيير المفرد الصورة كاملة؟ حتى الآن ، لم يكن لمستويات الضغط هذه الخصائص. تكمن الإجابة في رأس JPEG. تحتوي أول 500 بايت على بيانات وصفية حول الصورة - العرض ، الارتفاع ، وما إلى ذلك ، وحتى الآن لم نعمل معهم.بدون رأس ، يكاد يكون من المستحيل (جيدًا أو صعبًا للغاية) فك تشفير JPEG. ستبدو كما لو أنني أحاول وصف الصورة لك ، والبدء في اختراع الكلمات من أجل التعبير عن انطباعي. من المحتمل أن يكون الوصف مختصراً للغاية ، لأنني أستطيع أن أخترع الكلمات ذات المعنى الذي أريد أن أنقله بالضبط ، لكن بالنسبة لجميع الآخرين لن يكونوا منطقيين.يبدو غبيًا ، ولكن هذا ما يحدث بالضبط. يتم ضغط كل صورة بتنسيق JPEG برموز خاصة بها. يتم تخزين قاموس الرموز في الرأس. تسمى هذه التقنية كود Huffman ، ويسمى القاموس جدول Huffman. في الرأس ، يتم تمييز الجدول بوحدتي بايت - 255 ثم 196. يمكن أن يكون لكل مكون لون جدول خاص به.تؤثر التغييرات في الجداول بشكل جذري على أي صورة. مثال جيد هو تغيير 1 على 12 على السطر 15.
وهذا لأن الجداول تشير إلى كيفية قراءة البتات الفردية. حتى الآن ، لقد عملنا فقط مع الأرقام الثنائية في شكل عشري. ولكن هذا يخفي عننا حقيقة أنه إذا كنت ترغب في تخزين الرقم 1 في بايت ، فسيبدو مثل 00000001 ، حيث يجب أن تحتوي كل بايت على ثماني بتات بالضبط ، حتى لو كانت هناك حاجة واحدة منها فقط.قد يكون هذا مضيعة كبيرة للمساحة إذا كان لديك الكثير من الأرقام الصغيرة. كود Huffman هو أسلوب يسمح لنا بتخفيف هذا المطلب ، والذي يجب أن يشغل كل رقم ثماني بتات. هذا يعني أنه إذا رأيت وحدتي بايت:234 115هذا ، حسب جدول هوفمان ، يمكن أن يكون ثلاثة أرقام. لاستخراجها ، تحتاج أولاً إلى تقسيمها إلى وحدات منفصلة:11101010 01110011ثم ننتقل إلى الجدول لفهم كيفية تجميعها . على سبيل المثال ، يمكن أن تكون البتات الستة الأولى ، (111010) ، أو 58 في النظام العشري ، متبوعة بخمس بتات (10011) ، أو 19 ، وأخيراً البتات الأربعة الأخيرة (0011) ، أو 3.لذلك ، من الصعب جدًا فهم البايتات في هذه المرحلة من الضغط. البايت لا تمثل ما يبدو. لن أخوض في تفاصيل العمل مع الجدول في هذه المقالة ، ولكن هناك مواد كافية حول هذه المشكلة على الشبكة .واحدة من الحيل المثيرة للاهتمام التي يمكنك القيام بها إذا كنت تعلم أن ذلك هو فصل الرأس عن JPEG وتخزينه بشكل منفصل. في الواقع ، اتضح أنه فقط يمكنك قراءة الملف. يقوم Facebook بهذا لتقليل حجم الملف.ما يمكنك القيام به هو تعديل جدول Huffman قليلاً. بالنسبة للآخرين ، سوف تبدو وكأنها صورة تالفة. وفقط ستعرف النسخة السحرية لتصحيحها.لتلخيص: إذن ما هو المطلوب لفك تشفير JPEG؟ من الضروري:- قم باستخراج جدول (جداول) Huffman من الرأس وفك تشفير البتات.
- قم باستخراج معاملات تحويل جيب التمام المنفصلة لكل مكون من مكونات اللون والسطوع لكل كتلة 8 × 8 عن طريق إجراء تحويلات عكسية لترميز أطوال السلسلة ودلتا.
- , 88.
- , ( ).
- YCbCr RGB.
- !
العمل الجاد لسهولة عرض الصور مع القط! ومع ذلك ، فإن ما يعجبني في الأمر هو أنه يمكنك رؤية مدى تركيز تقنية JPEG على الإنسان. يعتمد على خصائص تصورنا ، والذي يسمح لنا بتحقيق ضغط أفضل بكثير من التقنيات التقليدية. والآن ، فهم كيف تعمل JPEG ، يمكنك أن تتخيل كيف يمكن نقل هذه التقنيات إلى مناطق أخرى. على سبيل المثال ، يمكن أن يوفر تشفير دلتا في مقطع فيديو انخفاضًا كبيرًا في حجم الملف ، حيث توجد غالبًا مساحات كاملة لا تتغير من إطار إلى إطار (على سبيل المثال ، الخلفية).الشفرة المستخدمة في المقالة مفتوحة ، وتحتوي على تعليمات لاستبدال الصور بأخرى خاصة بك.