فرمت JPEG چگونه کار می کند

تصاویر JPEG در زندگی دیجیتال ما همه جا وجود دارد، اما در پشت این پوشش آگاهی الگوریتم هایی وجود دارد که جزئیاتی را که چشم انسان نمی تواند ببیند، حذف می کند. نتیجه بالاترین کیفیت بصری در کوچکترین اندازه فایل است - اما دقیقاً چگونه همه کار می کنند؟ بیایید ببینیم دقیقاً چشمان ما چه چیزی را نمی بیند!

فرمت JPEG چگونه کار می کند

به راحتی می توان امکان ارسال عکس برای یک دوست را بدیهی دانست و نگران نبود که از چه دستگاه، مرورگر یا سیستم عاملی استفاده می کند - اما همیشه اینطور نبود. در اوایل دهه 1980، رایانه ها می توانستند تصاویر دیجیتال را ذخیره و نمایش دهند، اما ایده های رقابتی زیادی در مورد بهترین راه برای انجام این کار وجود داشت. شما نمی توانید فقط یک تصویر را از یک رایانه به رایانه دیگر ارسال کنید و امیدوار باشید که کار کند.

برای حل این مشکل، کمیته ای متشکل از کارشناسان از سراسر جهان در سال 1986 تشکیل شد با نام "گروه مشترک کارشناسان عکاسی” (گروه مشترک کارشناسان عکاسی، JPEG)، که به عنوان بخشی از کار مشترک سازمان بین المللی استاندارد (ISO) و کمیسیون بین المللی الکتروتکنیکی (IEC)، دو سازمان استاندارد بین المللی که مقر آنها در ژنو (سوئیس) است، تأسیس شد.

گروهی از افراد به نام JPEG استاندارد فشرده سازی تصویر دیجیتال JPEG را در سال 1992 ایجاد کردند. هرکسی که از اینترنت استفاده کرده باشد احتمالاً با تصاویری با کد JPEG مواجه شده است. این رایج ترین راه برای رمزگذاری، ارسال و ذخیره تصاویر است. از صفحات وب گرفته تا ایمیل تا رسانه های اجتماعی، JPEG میلیاردها بار در روز استفاده می شود - تقریباً هر بار که تصویری را به صورت آنلاین مشاهده یا ارسال می کنیم. بدون JPEG، وب کمتر روشن، کندتر و احتمالاً تصاویر گربه کمتری خواهد داشت!

این مقاله در مورد نحوه رمزگشایی یک تصویر JPEG است. به عبارت دیگر، در مورد آنچه برای تبدیل داده های فشرده ذخیره شده در رایانه به تصویری که روی صفحه ظاهر می شود، مورد نیاز است. این ارزش دانستن را دارد، نه تنها به این دلیل که برای درک فناوری که به طور روزانه استفاده می کنیم مهم است، بلکه به این دلیل که با آشکار کردن سطوح فشرده سازی، ادراک و بینایی را بهتر می دانیم و همچنین می دانیم که چشمانمان چه جزئیاتی دارد. حساس به.

علاوه بر این، بازی با تصاویر به این شکل بسیار جالب است.

فرمت JPEG چگونه کار می کند

نگاه کردن به داخل یک JPEG

در رایانه، همه چیز به صورت دنباله ای از اعداد باینری ذخیره می شود. معمولاً این بیت ها، صفر و یک، در هشت گروه قرار می گیرند و بایت ها را تشکیل می دهند. هنگامی که یک تصویر JPEG را در رایانه خود باز می کنید، چیزی (مرورگر، سیستم عامل، هر چیز دیگری) باید بایت ها را رمزگشایی کند و تصویر اصلی را به عنوان لیستی از رنگ های قابل نمایش بازیابی کند.

اگر این زیبا را دانلود کنید عکس یک گربه و آن را در یک ویرایشگر متن باز کنید، دسته ای از کاراکترهای درهم ریخته را خواهید دید.

فرمت JPEG چگونه کار می کند
در اینجا من از Notepad++ برای بررسی محتویات فایل استفاده می‌کنم، زیرا ویرایشگرهای متن رایج مانند Notepad از ویندوز، پس از ذخیره باینری آن را به هم می‌ریزند و با فرمت JPEG سازگار نمی‌شوند.

باز کردن یک تصویر در یک ویرایشگر متن، کامپیوتر شما را گیج می کند، درست مانند زمانی که چشمان خود را می مالید و شروع به دیدن لکه های رنگی می کنید، مغز خود را گیج می کنید!

این نقاطی که می بینید به عنوان شناخته می شوند فسفن ها، و نتیجه قرار گرفتن در معرض یک محرک نوری یا توهمات ایجاد شده توسط ذهن نیستند. آنها به این دلیل اتفاق می‌افتند که مغز شما فکر می‌کند که هر سیگنال الکتریکی در اعصاب بینایی اطلاعات مربوط به نور را حمل می‌کند. مغز نیاز به چنین فرضیاتی دارد، زیرا هیچ راهی برای دانستن اینکه آیا سیگنال یک صدا، یک بینایی یا چیز دیگری است وجود ندارد. تمام اعصاب بدن دقیقاً تکانه های الکتریکی مشابهی را منتقل می کنند. هنگامی که به چشمان خود فشار وارد می کنید، سیگنال هایی ارسال می کنید که بصری نیستند، اما گیرنده هایی را در چشم فعال می کنند که مغز شما آنها را - در این مورد، به اشتباه - به عنوان چیزی بصری تفسیر می کند. شما به معنای واقعی کلمه فشار را می بینید!

فکر کردن به شباهت رایانه‌ها به مغز خنده‌دار است، اما این یک تشبیه مفید نیز است، که نشان می‌دهد تا چه اندازه معنای داده‌ها - چه توسط اعصاب در بدن منتقل شوند یا در رایانه ذخیره شوند - به نحوه تفسیر آن بستگی دارد. تمام داده های باینری از XNUMX و XNUMX تشکیل شده اند، اجزای اساسی که قادر به انتقال هر نوع اطلاعاتی هستند. رایانه شما اغلب حدس می‌زند که چگونه آنها را با استفاده از سرنخ‌هایی مانند پسوند فایل تفسیر کند. اکنون می‌خواهیم آن‌ها را به‌عنوان متن تفسیر کنیم، زیرا این همان چیزی است که ویرایشگر متن انتظار دارد.

برای درک نحوه رمزگشایی یک JPEG، باید خود سیگنال های اصلی - داده های باینری را ببینیم. این کار را می توان با ویرایشگر هگز یا مستقیماً روی آن انجام داد صفحه وب مقاله اصلی! یک تصویر وجود دارد که در کنار آن در قسمت متن، تمام بایت های آن (به جز هدر) به صورت اعشاری ارائه می شود. شما می توانید آنها را تغییر دهید و اسکریپت دوباره کد می شود و یک تصویر جدید در پرواز تولید می کند.

فرمت JPEG چگونه کار می کند

فقط با بازی کردن با این ویرایشگر می توانید چیزهای زیادی یاد بگیرید. به عنوان مثال، آیا می توانید بگویید پیکسل ها به چه ترتیبی ذخیره می شوند؟

در این مثال نکته عجیب این است که تغییر برخی اعداد به هیچ وجه روی تصویر تاثیر نمی گذارد و مثلا اگر در سطر اول عدد 17 را با 0 جایگزین کنید، عکس کاملا خراب می شود!

فرمت JPEG چگونه کار می کند

تغییرات دیگر، مانند تغییر 7 در خط 1988 به 254، رنگ را تغییر می دهد، اما فقط پیکسل های بعدی.

فرمت JPEG چگونه کار می کند

شاید عجیب ترین چیز این باشد که برخی اعداد نه تنها رنگ، بلکه شکل تصویر را نیز تغییر می دهند. 70 را در خط 12 به 2 تغییر دهید و به ردیف بالای تصویر نگاه کنید تا متوجه منظور من شوید.

فرمت JPEG چگونه کار می کند

و مهم نیست از چه تصویر JPEG استفاده می کنید، همیشه آن الگوهای شطرنج مرموز را هنگام ویرایش بایت ها پیدا خواهید کرد.

با بازی کردن با ویرایشگر، تشخیص اینکه چگونه می توان یک عکس را از این بایت ها بازسازی کرد، دشوار است، زیرا فشرده سازی JPEG شامل سه فناوری مختلف است که به طور متوالی در سطوح اعمال می شوند. ما هر یک از آنها را به طور جداگانه مطالعه خواهیم کرد تا رفتار مرموزی را که مشاهده می کنیم کشف کنیم.

سه سطح فشرده سازی JPEG:

  1. نمونه برداری رنگی.
  2. تبدیل کسینوس گسسته و گسسته سازی.
  3. کدگذاری طول را اجرا کنید, دلتا и هافمن

برای اینکه تصوری از مقیاس فشرده سازی داشته باشید، توجه داشته باشید که تصویر بالا ۷۹۸۱۹ عدد را نشان می دهد که حدود ۷۹ کیلوبایت است. اگر بخواهیم آن را بدون فشرده سازی ذخیره کنیم، برای هر پیکسل به سه عدد نیاز داریم - برای اجزای قرمز، سبز و آبی. این رقم به 79 عدد یا حدودا می رسد. 819 کیلوبایت در نتیجه فشرده سازی JPEG، فایل نهایی بیش از 79 برابر کاهش یافته است!

در واقع این تصویر را می توان خیلی بیشتر فشرده کرد. در زیر دو تصویر در کنار هم هستند - عکس سمت راست به 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 میلیون مخروط دارد.

بنابراین، چشمان ما تغییرات در روشنایی را بسیار بهتر از تغییر رنگ مشاهده می کند. اگر رنگ را از روشنایی جدا کنید، می توانید کمی رنگ را حذف کنید و هیچ کس متوجه چیزی نخواهد شد. نمونه‌برداری فرعی کروما فرآیند نمایش اجزای رنگی یک تصویر با وضوح پایین‌تر از اجزای درخشندگی است. در مثال بالا، هر پیکسل دقیقاً یک جزء 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 تمرکز کنیم. و در اینجا بایت های مولفه Y پس از اعمال این سطح به چه شکل در می آیند.

فرمت JPEG چگونه کار می کند
(نسخه تعاملی در اصلی مقالات). در نسخه تعاملی، با کلیک بر روی یک پیکسل، ویرایشگر به خطی که آن را نشان می دهد پیمایش می کند. سعی کنید اعداد را از آخر حذف کنید یا چند صفر به یک عدد خاص اضافه کنید.

در نگاه اول، فشرده سازی بسیار بدی به نظر می رسد. 100 پیکسل در یک تصویر وجود دارد و 000 عدد برای نشان دادن روشنایی آنها (مولفه های Y) نیاز است - این بدتر از فشرده نکردن هیچ چیزی است!

البته توجه داشته باشید که اکثر این اعداد صفر هستند. علاوه بر این، تمام این صفرهای انتهای خطوط را می توان بدون تغییر تصویر حذف کرد. حدود 26 عدد باقی مانده است که تقریبا 000 برابر کمتر است!

این سطح حاوی راز الگوهای شطرنج است. برخلاف سایر افکت‌هایی که دیده‌ایم، ظاهر این الگوها یک اشکال نیست. آنها اجزای سازنده کل تصویر هستند. هر خط ویرایشگر دقیقاً شامل 64 عدد، ضرایب تبدیل کسینوس گسسته (DCT) مربوط به شدت 64 الگوی منحصر به فرد است.

این الگوها بر اساس نمودار کسینوس شکل می گیرند. در اینجا برخی از آنها به نظر می رسد:

فرمت JPEG چگونه کار می کند
8 از 64 شانس

در زیر تصویری وجود دارد که تمام 64 الگو را نشان می دهد.

فرمت JPEG چگونه کار می کند
(نسخه تعاملی در اصلی مقالات).

این الگوها از اهمیت ویژه ای برخوردار هستند زیرا اساس تصاویر 8x8 را تشکیل می دهند. اگر با جبر خطی آشنا نیستید، این بدان معناست که هر تصویر 8x8 را می توان از این 64 الگو به دست آورد. DCT فرآیند شکستن تصاویر به بلوک های 8x8 و تبدیل هر بلوک به ترکیبی از این 64 ضریب است.

این واقعیت که هر تصویری را می توان از 64 الگوی خاص تشکیل داد، جادو به نظر می رسد. با این حال، این همان است که بگوییم هر مکان روی زمین را می توان با دو عدد توصیف کرد - طول و عرض جغرافیایی [نشان دهنده نیمکره ها / تقریباً. ترجمه.]. ما اغلب سطح زمین را دو بعدی تصور می کنیم، بنابراین فقط به دو عدد نیاز داریم. یک تصویر 8x8 دارای 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 برابر کوچکتر بود به این شکل بود. هر بلوک 8x8 نشان دهنده تعداد بسیار کمتری از ضرایب DCT در مقایسه با نسخه با کیفیت بالاتر است.

شما می توانید کاری به عنوان جریان تدریجی تصاویر انجام دهید. می توانید تصویری تار را نمایش دهید که با دانلود ضرایب بیشتر، جزئیات بیشتر و بیشتر می شود.

در اینجا، فقط برای سرگرمی، چیزی است که فقط با استفاده از 24 عدد بدست می آورید:

فرمت JPEG چگونه کار می کند

یا فقط 5000:

فرمت JPEG چگونه کار می کند

بسیار مبهم اما قابل تشخیص!

3. کدگذاری طول اجرا، دلتا و هافمن

تا کنون تمام مراحل فشرده سازی با تلفات بوده است. آخرین مرحله، برعکس، بدون ضرر پیش می رود. اطلاعات را حذف نمی کند، اما اندازه فایل را به میزان قابل توجهی کاهش می دهد.

چگونه می توانید چیزی را بدون دور ریختن اطلاعات فشرده کنید؟ تصور کنید چگونه یک مستطیل سیاه و سفید ساده 700 x 437 را توصیف می کنیم.

JPEG برای این کار از 5000 عدد استفاده می کند، اما می توان به نتایج بسیار بهتری دست یافت. آیا می توانید یک طرح رمزگذاری را تصور کنید که چنین تصویری را در کمترین بایت ممکن توصیف کند؟

طرح حداقلی که من می توانستم به آن بپردازم از چهار استفاده می کند: سه برای رنگ، و طرح چهارم برای تعداد پیکسل های آن رنگ. ایده نمایش مقادیر تکراری به این شکل فشرده، کدگذاری طول اجرا نامیده می شود. بدون ضرر است زیرا می توانیم داده های رمزگذاری شده را به شکل اصلی آن بازیابی کنیم.

اندازه یک فایل JPEG با یک مستطیل سیاه بسیار بزرگتر از 4 بایت است - به یاد داشته باشید که در سطح DCT، فشرده سازی بر روی بلوک های 8x8 پیکسل اعمال می شود. بنابراین حداقل به ازای هر 64 پیکسل به یک ضریب DCT نیاز داریم. ما به یکی نیاز داریم زیرا به جای ذخیره یک ضریب 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

سپس، بسته به جدول هافمن، می تواند سه عدد باشد. برای استخراج آنها، ابتدا باید آنها را به بیت های جداگانه تقسیم کنید:

11101010 01110011

سپس برای درک نحوه گروه بندی آنها به جدول می رویم. به عنوان مثال، می تواند شش بیت اول، (111010)، یا 58 بیت، به دنبال آن پنج بیت (10011)، یا 19، و در نهایت چهار بیت آخر (0011)، یا 3 باشد.

بنابراین، درک بایت ها در این مرحله از فشرده سازی بسیار دشوار است. بایت ها چیزی را که به نظر می رسند نشان نمی دهند. من در این مقاله به جزئیات کار با جدول نمی پردازم، اما مصالح در مورد این موضوع آنلاین کافی است.

یکی از ترفندهای جالبی که می توانید با این دانش انجام دهید جدا کردن هدر از JPEG و ذخیره آن به طور جداگانه است. در واقع، معلوم می شود که فقط شما می توانید فایل را بخوانید. فیس بوک این کار را برای کاهش بیشتر فایل ها انجام می دهد.

کار دیگری که می توان انجام داد این است که جدول هافمن را کمی تغییر دهیم. برای دیگران، مانند یک تصویر خراب به نظر می رسد. و فقط شما گزینه جادویی برای رفع آن را می دانید.

به طور خلاصه: پس برای رمزگشایی یک JPEG چه چیزی لازم است؟ لازم:

  1. جدول(های) هافمن را از هدر استخراج کرده و بیت ها را رمزگشایی کنید.
  2. ضرایب تبدیل کسینوس گسسته برای هر رنگ و جزء درخشندگی برای هر بلوک ۸×۸ را با تبدیل معکوس رمزگذاری طول اجرا و دلتا استخراج کنید.
  3. کسینوس ها را بر اساس ضرایب ترکیب کنید تا مقادیر پیکسل را برای هر بلوک 8x8 بدست آورید.
  4. اگر نمونه برداری فرعی انجام شد، اجزای رنگ را مقیاس کنید (این اطلاعات در هدر است).
  5. مقادیر YCbCr حاصل برای هر پیکسل را به RGB تبدیل کنید.
  6. تصویر را روی صفحه بیاورید!

کار جدی برای تماشای ساده عکس با گربه! با این حال، چیزی که در مورد آن دوست دارم این است که نشان می دهد فناوری JPEG انسان محور چقدر است. این بر اساس ویژگی های ادراک ما است که به ما امکان می دهد به فشرده سازی بسیار بهتری نسبت به فناوری های معمولی دست یابیم. و اکنون، با درک نحوه عملکرد JPEG، می توانید تصور کنید که چگونه این فناوری ها می توانند به مناطق دیگر منتقل شوند. به عنوان مثال، رمزگذاری دلتا در ویدئو می تواند منجر به کاهش قابل توجهی در اندازه فایل شود، زیرا اغلب مناطقی وجود دارند که از فریم به فریم دیگر تغییر نمی کنند (مثلاً پس زمینه).

کد استفاده شده در مقاله، باز است و حاوی دستورالعمل هایی در مورد نحوه جایگزینی تصاویر با عکس های خود است.

منبع: www.habr.com

اضافه کردن نظر