دوباره سلام! این مقاله را پیدا کردم که در ماه مه 2019 نوشته شده است. این ادامه یک سری مقالات در مورد WAVE و JPEG در اینجا است
ذره ای از تاریخ
یک قاشق غذاخوری مقاله ویکی پدیا:
JPEG (گروه مشترک کارشناسان عکاسی) یکی از فرمت های گرافیکی شطرنجی محبوب است که برای ذخیره عکس ها و تصاویر مشابه استفاده می شود.
این استاندارد توسط Joint Photographic Experts Group در سال 1991 برای فشرده سازی کارآمد تصویر ایجاد شد.
چگونه تصاویر از خام به JPEG تبدیل می شوند؟
برخی از مردم تصور می کنند که تصاویر JPEG داده های خامی هستند که با استفاده از روش هافمن فشرده شده اند، اما این درست نیست. قبل از فشرده سازی کنترل، داده ها مسیر طولانی را طی می کنند.
ابتدا مدل رنگ از RGB به YCbCr تغییر می کند. حتی یک الگوریتم ویژه برای این وجود دارد -
اولین کاری که باید با تصویر انجام داد این است "لاغر کننده" (نمونه برداری فرعی). درک آن آسان است: یک آرایه 2x2 از پیکسل ها گرفته می شود، سپس Cb و Cr گرفته می شود - مقادیر متوسط هر یک از اجزای YCbCr این 4 پیکسل. بنابراین، ما 6 بایت بردیم، به جای 4 Y، 4 Cb، 4 Cr، ما 4 Y و همان Cb و Cr برای هر یک از آنها گرفتیم (4 + 4 + 4 = 12؛ 4 + 1 + 1 = 6؛ 12 - 6 = 6). در مقیاس حتی 2x2، فشرده سازی با اتلاف با نسبت تراکم 2:1 ثابت به نظر می رسد. این برای کل تصویر صدق می کند. و بنابراین - آنها به اندازه نصف کاهش یافتند. و ما می توانیم به لطف درک رنگ خود از این تکنیک استفاده کنیم. اگر در یک بلوک کوچک از پیکسل ها به طور متوسط تفاوت شود، فرد به راحتی متوجه تفاوت در روشنایی می شود، اما نه در رنگ. نازک شدن را می توان در یک خط، 4 پیکسل به صورت افقی و عمودی نیز انجام داد. گزینه اول بیشتر مورد استفاده قرار می گیرد. اگر کیفیت تصویر مهم است، در آن صورت به هیچ وجه decation انجام نمی شود.
یک تصویر بصری از نازک شدن (هابر به من اجازه نداد گیف درج کنم) -
بخش اصلی آماده سازی
PrEP
اکنون سخت ترین و ضروری ترین قسمت فرا می رسد. کل تصویر به بلوک های 8x8 تقسیم می شود (اگر وضوح مضرب سمت بلوک نباشد از پر کردن استفاده می شود).
حالا برای هر بلوک اعمال کنید DCT (تبدیل کسینوس گسسته). در این قسمت همه چیز غیر ضروری از تصویر خارج شده است. با استفاده از DCT، باید درک کنید که آیا یک بلوک معین (8×8) هر قسمت یکنواخت تصویر را توصیف می کند: آسمان، دیوار. یا دارای ساختار پیچیده ای است (مو، نمادها و غیره). منطقی است که 64 پیکسل با رنگ مشابه را می توان تنها با 1 توصیف کرد، زیرا اندازه بلوک از قبل مشخص است. خیلی برای فشرده سازی: 64 به 1.
DCT بلوک را به یک طیف تبدیل می کند و در جایی که خوانش ها به شدت تغییر می کند، ضریب مثبت می شود و هرچه انتقال واضح تر باشد، خروجی بالاتر خواهد بود. در جایی که ضریب بالاتر است، تصویر انتقال واضح در رنگ و روشنایی را نشان می دهد، جایی که کمتر است - تغییرات ضعیف (صاف) در مقادیر اجزای YCbCr در بلوک.
کمی سازی
تنظیمات فشرده سازی قبلاً در اینجا اعمال شده است. هر یک از ضرایب در هر یک از ماتریس های 8x8 بر یک عدد معین تقسیم می شود. اگر کیفیت تصویر را پس از تمام تغییرات آن کاهش ندهید، مقسومکننده باید یکی باشد. اگر حافظه اشغال شده توسط این عکس برای شما مهمتر است، مقسوم علیه بزرگتر از 1 خواهد بود و ضریب آن گرد می شود. معلوم می شود که پس از گرد کردن، اغلب با صفرهای زیادی روبرو می شوید.
کوانتیزاسیون برای ایجاد امکان فشرده سازی بیشتر انجام می شود. در اینجا با استفاده از مثال کمی کردن نمودار y = sin(x) به نظر می رسد:
فشرده سازی
ابتدا ماتریس را به صورت زیگزاگ مرور می کنیم:
یک آرایه تک بعدی با اعداد بدست می آوریم. می بینیم که صفرهای زیادی در آن وجود دارد، می توان آنها را حذف کرد. برای این کار به جای دنباله ای از صفرهای زیاد، 1 صفر و بعد از آن یک عدد نشان دهنده تعداد آنها در دنباله وارد می کنیم. به این ترتیب می توانید اندازه کل آرایه را به 1/3 بازنشانی کنید. و سپس به سادگی این آرایه را با استفاده از روش هافمن فشرده کرده و در خود فایل می نویسیم.
از کجا استفاده شد
هر کجا. مانند PNG، JPEG در دوربینها، سیستمعاملها (بهعنوان لوگوی شرکت، نماد برنامهها، تصاویر کوچک) و در تمام قسمتهای ممکن که در آنها تصاویر نیاز به ذخیره کارآمد دارند، استفاده میشود.
نتیجه
در حال حاضر، دانش در مورد JPEG اکنون فقط برای اهداف آموزشی ارزشمند است، زیرا قبلاً در همه جا ساخته شده و توسط گروه های زیادی از مردم بهینه شده است، اما گرانیت علم هنوز هم خوشمزه است.
منابع
منبع: www.habr.com