• الگوریتم های فشرده سازی تصویر JPEG، JPEG2000، JPEG-LS. فشرده سازی تصویر با و بدون از دست دادن

    "پیاده سازی الگوریتم ها

    JPEG و JPEG2000"

    تکمیل شد:

    گروه دانش آموزی 819

    اوگاروف دیمیتری

    نحوه کار الگوریتم های JPEG و JPEG2000

    1. الگوریتم JPEG

    JPEG (گروه مشترک متخصصان عکاسی انگلیسی - گروه مشترکی از متخصصان در زمینه عکاسی) - روشی پرکاربرد برای فشرده سازی تصاویر عکاسی است. فرمت فایل حاوی داده های فشرده معمولاً نام JPEG نیز نامیده می شود. متداول ترین پسوند برای چنین فایل هایی عبارتند از .jpeg، .jfif، .jpg، .JPG یا JPE. با این حال، از این میان، jpg. محبوب ترین پسوند در همه پلتفرم ها است.

    الگوریتم JPEG یک الگوریتم فشرده سازی است با افت کیفیت.

    منطقه برنامه

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

    هنگام ذخیره یک فایل JPEG، می توانید درجه کیفیت و از این رو درجه فشرده سازی را مشخص کنید، که معمولاً در برخی واحدهای دلخواه تنظیم می شود، به عنوان مثال، از 1 تا 100 یا از 1 تا 10. عدد بزرگتر مربوط به کیفیت بهتر است. ، اما اندازه فایل افزایش می یابد. معمولا تفاوت کیفیت بین 90 تا 100 عملا با چشم قابل درک نیست. باید به خاطر داشت که تصویر بیت به بیت بازیابی شده همیشه با تصویر اصلی متفاوت است. یک تصور غلط رایج این است که کیفیت JPEG برابر با مقدار اطلاعات ذخیره شده است.

    مراحل کدنویسی

    فرآیند فشرده سازی JPEG شامل چندین مرحله است:

    1. تبدیل تصویر به فضای رنگی مطلوب.

    هنگام استفاده از فضای رنگی luma/chrominance (YCbCr)، نسبت فشرده سازی بهتری به دست می آید. بر این مرحلهکدگذاری با استفاده از نسبت های مناسب، مدل رنگی RGB به YCbCr تبدیل می شود:

    Y = 0.299*R + 0.587*G + 0.114*B

    Cb = - 0.1687*R – 0.3313*G + 0.5*B

    Cr = 0.5*R – 0.4187*G – 0.0813*B.
    در طول رمزگشایی می توان از تبدیل معکوس مناسب استفاده کرد:
    R = Y + 1.402*Cr

    G = Y – 0.34414*Cb – 0.71414*Cr

    B = Y + 1.772 * Cb.
    توجه به Y,Cb,Cr در سیستم بینایی انسان:

    چشم، به خصوص شبکیه، دارای دو نوع سلول به عنوان تحلیلگر بینایی است: سلول های دید در شب که فقط سایه های خاکستری (از سفید روشن تا سیاه تیره) را درک می کنند و سلول های بینایی در روز که رنگ را درک می کنند. اولین سلول‌هایی که رنگ RGB را می‌دهند، سطح روشنایی مشابه با مقدار Y را تشخیص می‌دهند. سلول‌های دیگر که مسئول درک رنگ رنگ هستند، مقدار مربوط به تفاوت رنگ را تعیین می‌کنند.


    2. نمونه‌برداری فرعی از اجزای کرومینانس با میانگین‌گیری گروه‌های پیکسل.

    بسیاری از اطلاعات بصری که چشم انسان به آن حساس‌تر است، شامل اجزای درخشندگی با فرکانس بالا (Y) فضای رنگی YCbCr است. دو جزء رنگی دیگر (Cb و Cr) حاوی اطلاعات رنگی با فرکانس بالا هستند که چشم انسان نسبت به آنها حساسیت کمتری دارد. بنابراین، می توان قسمت خاصی از آن را دور انداخت و به این ترتیب، می توان تعداد پیکسل های در نظر گرفته شده برای کانال های رنگی را کاهش داد.

    1) نوع 4:2:0 (زمانی که تصویر به مربع های 2x2 پیکسل تقسیم می شود و در هر یک از آنها همه پیکسل ها دریافت می کنند. همان مقادیرکانال های Cb و Cr، و روشنایی Y y برای هر یک باقی می ماند)

    2) نوع 4:2:2 (اتحاد مولفه های رنگی فقط به صورت افقی در گروه های دو پیکسلی رخ می دهد).

    3) نوع 4:4:4 به این معنی است که هر پیکسل در هر ردیف مقدار منحصر به فرد خود را از اجزای Y، Cb و Cr دارد. (شکل 1 الف)

    4) نوع 4:2:2. با زیرنمونه برداری از سیگنال کرومینانس با ضریب 2 به صورت افقی، یک جریان YCbCr 4:2:2 از یک جریان YCbCr 4:4:4 دریافت می کنیم. ورودی "4: 2: 2" به این معنی است که در یک خط، 4 مقدار روشنایی به ازای هر 2 مقدار کرومینانس وجود دارد (شکل 1 ب را ببینید). سیگنال YCbCr 4:2:2 کیفیت تصویر بسیار کمی را نسبت به سیگنال YCbCr 4:4:4 از دست می دهد، اما پهنای باند مورد نیاز تا 33 درصد از سیگنال اصلی کاهش می یابد.

    3. اعمال تبدیل های کسینوس گسسته برای کاهش افزونگی داده های تصویر.

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

    یک DCT که مستقیماً به یک بلوک (در مورد ما 8x8 پیکسل) از یک تصویر اعمال می شود، به شکل زیر است:

    که در آن x، y - مختصات مکانی یک پیکسل (0..7)،

    f(x,y) - مقادیر پیکسل ماکروبلاک اصلی (مثلاً روشنایی)

    u,v - مختصات پیکسل در نمایش فرکانس (0..7)

    w(u) =1/SQRT(2) برای u=0، در غیر این صورت w(u)=1 (SQRT ریشه دوم است)

    w(v) =1/SQRT(2) برای v=0، در غیر این صورت w(v)=1

    یا به صورت ماتریسی:

    4. کمی کردن هر بلوک از ضرایب DCT با استفاده از توابع وزن بهینه شده برای ادراک بصری انسان.

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


    5. مرحله فشرده سازی ثانویه

    مرحله نهایی رمزگذار JPEG، رمزگذاری ماتریس به دست آمده است.

    5.1 جایگشت زیگزاگ 64 ضرایب DCT

    بنابراین، پس از اینکه ما یک تبدیل DCT روی یک بلوک 8x8 از مقادیر انجام دادیم، یک بلوک 8x8 جدید داریم. سپس، این بلوک 8x8 به صورت زیگزاگ مانند زیر اسکن می شود:

    (اعداد موجود در بلوک 8x8 نشان دهنده ترتیبی است که ما به ماتریس 2 بعدی 8x8 نگاه می کنیم)

    0, 1, 5, 6,14,15,27,28,

    2, 4, 7,13,16,26,29,42,

    3, 8,12,17,25,30,41,43,

    9,11,18,24,31,40,44,53,

    10,19,23,32,39,45,52,54,

    20,22,33,38,46,51,55,60,

    21,34,37,47,50,56,59,61,

    35,36,48,49,57,58,62,63

    همانطور که می بینید، ابتدا گوشه سمت چپ بالا (0.0)، سپس مقدار (0.1)، سپس (1.0)، سپس (2.0)، (1،1)، (0، 2)، (0.3)، (1.2)، (2.1)، (3.0)، و غیره.

    بعد از اینکه ماتریس 8x8 را زیگزاگ کردیم، اکنون برداری با 64 ضریب داریم (0..63) نکته این بردار زیگزاگ این است که به ضرایب DCT 8x8 به ترتیب صعودی فرکانس های فضایی نگاه می کنیم. بنابراین، ما یک بردار مرتب شده بر اساس معیارهای فرکانس مکانی دریافت می کنیم: اولین مقدار بردار (شاخص 0) مربوط به کمترین فرکانس در تصویر است - با عبارت DC نشان داده می شود. با افزایش شاخص بردار، مقادیر مربوط به فرکانس های بالاتر را دریافت می کنیم (مقدار با شاخص 63 مربوط به دامنه بالاترین فرکانس در بلوک 8x8 است). بقیه ضرایب DCT را AC نشان می دهند.

    5.2 رمزگذاری طولی صفر (RLE)

    حالا ما یک بردار با یک دنباله طولانی از صفر داریم. ما می توانیم از این با رمزگذاری صفرهای متوالی استفاده کنیم. مهم: بعداً خواهید دید که چرا، اما در اینجا از رمزگذاری ضریب اول بردار (ضریب DC) که به شکل دیگری کدگذاری می شود، صرف نظر می کنیم. بردار 64 اصلی را به عنوان بردار 63 در نظر بگیرید (این بردار 64 بدون ضریب اول است)

    فرض کنید 57,45,0,0,0,0,23,0,-30,-16,0,0,1,0,0,0,0,0,0 داریم فقط 0,... .0

    در اینجا - مانند RLC فشرده سازی jpegبرای این مثال انجام شد:

    (0.57); (0.45)؛ (4.23)؛ (1,-30); (0,-16); (2.1)؛ EOB

    همانطور که می بینید، برای هر مقدار غیر از 0، تعداد 0 های PRIOR متوالی را قبل از مقدار رمزگذاری می کنیم، سپس مقدار را اضافه می کنیم. نکته دیگر: EOB فرم کوتاه End of Block است و یک مقدار رمزگذاری شده خاص (نشانگر) است. اگر در یک بردار به موقعیتی رسیده باشیم که از آن فقط تا انتهای بردار صفر داریم، آن موقعیت را با EOB تخصیص می دهیم و فشرده سازی RLC بردار کوانتیزه را خاتمه می دهیم.

    [توجه داشته باشید که اگر بردار کوانتیزه شده غیر صفر باشد (آخرین عنصر غیر صفر داشته باشد)، نشانگر EOB نخواهیم داشت.]

    (0,57); (0,45); (4,23); (1,-30); (0,-16); (2,1); (0,0)

    یک چیز اساسی دیگر: بیایید در جایی از بردار کوانتیزه شده بگوییم:

    57، هجده صفر، 3، 0.0، 0.0 2، سی و سه صفر، 895، EOB

    کدگذاری JPG هافمن این محدودیت را ایجاد می کند که تعداد صفرهای ابتدایی باید به عنوان یک مقدار 4 بیتی کدگذاری شود - نمی تواند از 15 تجاوز کند.

    بنابراین، مثال قبلی باید به صورت زیر کدگذاری شود:

    (0,57); (15,0) (2,3); (4,2); (15,0) (15,0) (1,895), (0,0)

    (15,0) یک مقدار رمزگذاری شده ویژه است که نشان می دهد که 16 صفر متوالی به دنبال آن چیست.

    5.3 مرحله آخر - کدگذاری هافمن

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

    7,..,-4,4,..,7 3 000,001,010,011,100,101,110,111

    15,..,-8,8,..,15 4 0000,..,0111,1000,..,1111

    31,..,-16,16,..,31 5 00000,..,01111,10000,..,11111

    63,..,-32,32,..,63 6 .

    127,..,-64,64,..,127 7 .

    255,..,-128,128,..,255 8 .

    511,..,-256,256,..,511 9 .

    1023,..,-512,512,..,1023 10 .

    2047,..,-1024,1024,..,2047 11 .

    4095,..,-2048,2048,..,4095 12 .

    8191,..,-4096,4096,..,8191 13 .

    16383,..,-8192,8192,..,16383 14 .

    32767,..,-16384,16384,..,32767 15 .

    پس از آن، برای مثال قبلی:

    (0,57); (0,45); (4,23); (1,-30); (0,-8); (2,1); (0,0)

    بیایید فقط مقدار مناسب این جفت ها را رمزگذاری کنیم، به جز جفت هایی که نشانگرهای خاصی مانند (0,0) یا (اگر باید داشته باشیم) (15,0) هستند.

    45، به طور مشابه، به صورت (6.101101) کدگذاری می شود.

    30 -> (5,00001)

    و اکنون، دوباره رشته جفت ها را می نویسیم:

    (0,6), 111001; (0,6), 101101; (4,5), 10111; (1,5), 00001; (0,4), 0111; (2,1), 1; (0,0)

    جفت‌های 2 مقدار محصور در پرانتز را می‌توان در یک بایت نشان داد، زیرا در واقع هر یک از 2 مقدار را می‌توان در یک قطعه 4 بیتی نشان داد (شمار ​​صفر اول همیشه کمتر از 15 و درست مانند دسته است. [اعداد رمزگذاری شده در فایل JPG- در منطقه -32767..32767]). در این بایت، بیت بالا تعداد صفرهای اول را نشان می‌دهد و بیت پایین نشان‌دهنده مقوله مقدار جدید غیر از 0 است.

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

    به عنوان مثال، برای بایت 6 (معادل (0.6)) کد هافمن = 111000 داریم.

    21 = (1,5) - 11111110110

    4 = (0,4) - 1011

    33 = (2,1) - 11011

    0 = EOB = (0.0) - 1010

    بیت استریم نهایی نوشته شده در فایل JPG روی دیسک برای مثال قبلی 63 ضریب است (به یاد داشته باشید که ضریب اول را حذف کردیم) -

    111000 111001 111000 101101 1111111110011001 10111 11111110110 00001

    1011 0111 11011 1 1010
    مزایا و معایب

    معایب فرمت شامل این واقعیت است که با نسبت فشرده سازی قوی، ساختار داده بلوک خود را احساس می کند، تصویر "به مربع تقسیم می شود" (هر یک به اندازه 8x8 پیکسل). این اثر به ویژه در مناطقی با فرکانس فضایی کم (انتقال تصویر صاف، مانند آسمان صاف) قابل توجه است. در مناطقی با فرکانس فضایی بالا (به عنوان مثال، لبه های متضاد تصویر)، "مصنوعات" مشخصه ظاهر می شوند - ساختار نامنظم پیکسل های رنگ و / یا روشنایی مخدوش. علاوه بر این، جزئیات رنگی کوچک از تصویر ناپدید می شوند. همچنین فراموش نکنید که این قالب از شفافیت پشتیبانی نمی کند.

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

    2. الگوریتم JPEG2000

    الگوریتم JPEG-2000 توسط همان گروه از متخصصان عکاسی به عنوان JPEG توسعه داده شد. شکل گیری JPEG به عنوان یک استاندارد بین المللی در سال 1992 تکمیل شد. در سال 1997 مشخص شد که استاندارد جدید، انعطاف پذیرتر و قدرتمندتر مورد نیاز است که تا زمستان 2000 نهایی شد.

    تفاوت های اصلی بین الگوریتم در JPEG 2000 و الگوریتم در JPEG به شرح زیر است:

    1) کیفیت تصویر بهتر با نسبت فشرده سازی قوی. یا همان، نسبت تراکم بزرگ با همان کیفیت برای نسبت تراکم بالا. در واقع، این به معنای کاهش قابل توجه در اندازه گرافیک های "با کیفیت وب" است که توسط اکثر سایت ها استفاده می شود.

    2) پشتیبانی از رمزگذاری منطقه تک با کیفیت بهتر. مشخص است که بخش‌های خاصی از تصویر برای درک انسان حیاتی هستند (مثلاً چشم‌ها در یک عکس)، در حالی که می‌توان کیفیت بخش‌های دیگر را قربانی کرد (مثلاً پس‌زمینه). با بهینه سازی "دستی"، افزایش نسبت فشرده سازی تا زمانی که کیفیت در بخش مهمی از تصویر از بین برود، انجام می شود. اکنون می توان کیفیت را در مناطق بحرانی تنظیم کرد و بقیه مناطق را با شدت بیشتری فشرده کرد، یعنی. ما نسبت فشرده سازی نهایی بالاتری را با کیفیت تصویر ذهنی برابر دریافت می کنیم.

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

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

    5) از فشرده سازی بدون تلفات پشتیبانی کنید. علاوه بر فشرده سازی معمولی با اتلاف، JPEG جدید اکنون از فشرده سازی بدون تلفات نیز پشتیبانی می کند. بنابراین، می توان از JPEG برای فشرده سازی تصاویر پزشکی، در چاپ، در حالی که متن را برای تشخیص توسط سیستم های OCR و غیره ذخیره کرد، استفاده کرد.

    6) پشتیبانی از فشرده سازی تصاویر تک بیتی (2 رنگ). برای ذخیره تصاویر یک بیتی (نقاشی جوهر، متن اسکن شده، و غیره)، فرمت GIF قبلاً به طور گسترده توصیه می شد، زیرا فشرده سازی با استفاده از DCT برای تصاویر با تغییر رنگ واضح بسیار ناکارآمد است. در JPEG، هنگامی که فشرده می شود، یک تصویر 1 بیتی به یک تصویر 8 بیتی کاهش می یابد، یعنی. 8 برابر افزایش یافت، پس از آن تلاش برای فشرده سازی انجام شد، اغلب کمتر از 8 برابر. اکنون می توانیم JPEG 2000 را به عنوان یک الگوریتم جهانی توصیه کنیم.

    7) شفافیت در سطح قالب پشتیبانی می شود. اکنون می‌توانید هنگام ایجاد صفحات WWW نه تنها در GIF، بلکه در JPEG 2000، پس‌زمینه را هموار کنید. که به شما امکان می دهد یک انتقال صاف از یک تصویر مات به پس زمینه شفاف تنظیم کنید.

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

    مراحل کدنویسی

    فرآیند فشرده سازی طبق طرح JPEG2000 شامل تعدادی مرحله است:

    1. تبدیل تصویر به فضای رنگی بهینه.
    در این مرحله از رمزگذاری، با استفاده از نسبت های مناسب، مدل رنگی RGB به YUV تبدیل می شود:

    هنگام فشرده سازی، تبدیل معکوس مربوطه اعمال می شود:

    2. تبدیل موجک گسسته.

    تبدیل موجک گسسته (DWT) همچنین می تواند دو نوع باشد - برای فشرده سازی با اتلاف و برای فشرده سازی بدون تلفات.

    این تبدیل در حالت یک بعدی حاصل ضرب اسکالر ضرایب مربوطه و رشته مقادیر است. اما از آنجایی که بسیاری از ضرایب صفر هستند، سپس تبدیل موجک مستقیم و معکوس را می توان با فرمول های زیر نوشت (برای تبدیل عناصر انتهایی خط، از امتداد آن 2 پیکسل در هر جهت استفاده می شود که مقادیر آن متقارن با مقادیر عناصر خط نسبت به پیکسل های شدید آن):
    y(2*n + 1) = x(2*n + 1) - (int)(x(2*n) + x(2*n + 2)) / 2

    y(2*n) = x(2*n) + (int)(y(2*n - 1) + y(2*n + 1) + 2) / 4

    و بالعکس

    x(2*n) = y(2*n) - (int)(y(2*n - 1) + y(2*n + 1) + 2) / 4

    x(2*n + 1) = y(2*n + 1) + (int)(x(2*n) + x(2*n + 2)) / 2.

    3. کمی سازی ضرایب.

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


    4. مرحله فشرده سازی ثانویه

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

    پیاده سازی نرم افزار

    در این مقاله الگوریتم‌های JPEG و JPEG2000 پیاده‌سازی شده‌اند. هر دو الگوریتم کدگذاری مستقیم و معکوس را پیاده سازی می کنند ( آخرین مرحله فشرده سازی ثانویه وجود ندارد). محاسبه JPEG به دلیل محاسبه "مستقیم" DCT زمان زیادی (حدود 30 ثانیه) طول می کشد. اگر نیاز به افزایش سرعت کار دارید، ابتدا باید ماتریس DCT را محاسبه کنید (در کلاس DCT تغییراتی ایجاد کنید).

    بیایید نگاهی به برنامه بیندازیم:


    1. پس از راه اندازی، پنجره ای ظاهر می شود که در آن

    و با فشردن دکمه (2) و وارد کردن نام مورد نظر در کادر محاوره ای می توانید آن را ذخیره کنید.

  • با یک ضریب کیفیت به اندازه کافی بزرگ، تصویر به طور چشمگیری تغییر می کند. اگر این یک الگوریتم JPEG باشد، بلوک‌های ۸×۸ تلفظ می‌شوند. (در مورد الگوریتم JPEG2000، تقسیم بلوکی وجود نخواهد داشت)
  • قبل از:

    بعد از:



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

    مطمئناً بسیاری از افرادی که با گرافیک روی رایانه کار می کنند به این سؤال علاقه مند هستند: چگونه می توان تصویری را که مقدار بسیار چشمگیری در حافظه رایانه شخصی اشغال می کند در اندازه بسیار کوچکتر روی دیسک فشرده شود؟ به یاد دارم که در طلوع فعالیت انتشاراتم، کلمه "فشرده سازی" برای من بسیار مرموز و غافلگیر کننده بود ... در واقع، فشرده سازی تصویر چگونه کار می کند - به هر حال، اکنون تصور کردن وب، عکاسی دیجیتال یا غیر قابل تصور است. چاپ رنگی بدون آن؟

    بنابراین فشرده سازی. ممکن است منجر به کاهش کیفیت شود یا خیر. مورد آخر روش هایی مانند RLE (Run Length Encoding، کدگذاری طول اجرا، که در نتیجه جفت های نوع ( جست و خیز کردن, ارزش، جایی که جست و خیز کردنتعداد صفرهای متوالی است و ارزش- مقدار به دنبال آنها) و LZW (فشرده سازی با روش Lempel-Ziff-Welch)، پیاده سازی شده در فرمت های PSD، GIF و TIFF. آنها به طور گسترده توسط آرشیوهایی مانند RAR و ZIP استفاده می شوند. میانگین نسبت فشرده سازی بدون تلفات 2-3 برابر است.

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

    محبوب ترین روش فشرده سازی با اتلاف JPEG است که کیفیت تصویر کافی را حتی با فشرده سازی 30 برابر حفظ می کند. به هر حال، در اکثر روش های مدرن فشرده سازی داده ها (به عنوان مثال، Layer-4، معروف به mp3، و همچنین MPEG)، مکانیسم هایی شبیه به JPEG اجرا می شود. بیایید نگاهی دقیق‌تر به این قالب بیندازیم، به‌ویژه که چندی پیش آخرین پیاده‌سازی آن، JPEG2000، سرانجام تأیید شد، که شامل تمام موارد اضافه‌شده به JPEG/MPEG طی ده سال توسعه آن می‌شود.

    JPEG

    نام الگوریتم فشرده سازی مخفف Joint Photographic Expert Group است، یک گروه ابتکاری که توسط کارشناسان ITU (اتحادیه بین المللی مخابرات) و ISO (سازمان بین المللی استانداردسازی) تشکیل شده است. به همین دلیل است که پیشوند Joint در نام آن وجود دارد. در سال 1992، JPEG استاندارد بین المللی گرافیک اعلام شد.

    فشرده سازی JPEG همیشه کیفیت خود را از دست می دهد. در این مورد، همیشه یک انتخاب وجود دارد: اولویت دادن به کیفیت به ازای حجم (اندازه فایل حدود سه برابر فشرده می شود) یا برعکس، برای دستیابی به حداقل اندازه تصویر که در آن همچنان قابل تشخیص باقی بماند ( نسبت تراکم می تواند به 100 برسد). فشرده سازی، که در آن تفاوت کیفیت بین تصویر به دست آمده و تصویر اصلی هنوز قابل توجه نیست، باعث کاهش 10 تا 20 برابری در اندازه فایل می شود.

    منطقه برنامه

    JPEG تصاویر تمام رنگی و تک رنگ با کیفیت عکاسی را به بهترین نحو فشرده می کند. اگر می خواهید یک تصویر را با یک پالت فهرست ذخیره کنید، ابتدا آن را به رنگ کامل تبدیل می کنید. هنگام فشرده‌سازی با استفاده از روش JPEG، باید در نظر داشته باشید که همه چیز به ماهیت تصاویر بستگی دارد: آن‌هایی که تغییر رنگ در آن‌ها ناچیز است و تغییر رنگ واضحی وجود ندارد، حجم بسیار کمتری را اشغال می‌کنند. JPEG در هر جایی که نیاز است تصاویر عکس ذخیره شوند استفاده می شود: در دوربین های دیجیتال، چاپ (EPS DCS 2.0)، اینترنت بدون آن غیرقابل تصور است.

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

    فشرده سازی چگونه اتفاق می افتد

    1. مرحله اول شامل تبدیل کردن مدل رنگ تصویر (معمولا RGB) را به مدلی تبدیل کنید که در آن اجزای روشنایی و رنگ از هم جدا شده اند (به عنوان مثال، YCbCr یا YUV)، که به شما امکان می دهد به طور بهینه به انتخاب سطوح فشرده سازی برای هر کانال (با در نظر گرفتن ادراک چشم) نزدیک شوید. تبدیل به این صورت است:

    Y = 0.299xR+0.587*G+0.114xB Cb = (B-Y)/0.866/2+128 Cr = (R-Y)/0.701/2+128

    2. در مرحله بعدی، به اصطلاح. پیش فیلتراسیون، که در آن پیکسل های مجاور به طور جداگانه در هر یک از کانال های Cb و Cr به صورت جفت در جهات افقی و عمودی گروه بندی می شوند و کانال روشنایی Y بدون تغییر باقی می ماند. پس از آن، کل گروه چهار پیکسلی مقدار متوسط ​​مولفه های Cb و Cr مربوطه را دریافت می کند. برای اختصار، چنین طرحی را می توان به عنوان 4: 1: 1 تعیین کرد (همان فرم نمایش در DRAW - پنجره صادرات jpeg اتخاذ شده است). با در نظر گرفتن این واقعیت که هر پیکسل در 3 بایت (256 سطح برای هر سه کانال) کدگذاری می شود، در نتیجه میزان داده ها به طور خودکار 2 برابر کاهش می یابد (به جای 12 بایت برای انتقال 4 پیکسل، برای انتقال فقط 4+1+1 = 6 بایت کافی است. از نقطه نظر ریاضیات، چنین تحولی منجر به از دست دادن قابل توجه اطلاعات می شود، اما چشم انسان از دست دادن را درک نمی کند، زیرا در تصاویر عکاسی معمولی افزونگی قابل توجهی وجود دارد.

    3. اطلاعات دریافت شده، که مرحله "تمیز کردن" اولیه را پشت سر گذاشته است، دوباره در هر کانال به طور جداگانه در بلوک ها، اما در حال حاضر به اندازه 8x8 گروه بندی می شود، پس از آن فشرده سازی اصلی به آنها اعمال می شود - به اصطلاح. تبدیل کسینوس گسستهبه طور خلاصه - DCT (تبدیل کسینوس گسسته). در نتیجه اطلاعات در مورد توزیع روشنایی پیکسل به شکل دیگری تبدیل می شود، جایی که با توزیعی بر اساس توصیف می شود فراوانی وقوع یک یا آن روشنایی پیکسل DCT دارای تعدادی مزیت نسبت به سایر تبدیل ها (به عنوان مثال، تبدیل فوریه) است که بازیابی اطلاعات بهتری را ارائه می دهد.

    به جای آرایه ای از 64 مقدار (8x8 پیکسل) برای هر بلوک که تصویر را می سازد، آرایه ای از 64 فرکانس دریافت می کنیم. عملکرد DCT را در یک مثال در نظر بگیرید. فرض کنید روشنایی پیکسل ها در یک بلوک از تصویر ما به شکلی است که در شکل نشان داده شده است. 1 در سمت چپ، سپس نتیجه تبدیل مانند نشان داده شده در سمت راست خواهد بود.

    1

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

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

    برای مثال، هنگام ذخیره یک تصویر با استفاده از عملیات Save for web، پنجره فتوشاپ چگونه به نظر می رسد، جایی که پارامتر Quality (یا بهتر است بگوییم، مشتق آن) یکسان است. عامل گرد(شکل 2).

    در نتیجه کوانتیزه کردن، مجموعه ای از اجزا به دست می آید که بر اساس آن تصویر اصلی با دقت معینی بازیابی می شود (شکل 3).

    4

    روی انجیر شکل 4 نتیجه بازیابی مربع سیاه و سفید را به ترتیب با یک، چهار و پانزده جزء نشان می دهد.

    5. پس از انجام کار اصلی در فشرده سازی تصویر، تبدیلات بیشتر به وظایف ثانویه کاهش می یابد: اجزای باقی مانده به ترتیب رفتنبه گونه ای که ابتدا مسئولین جزئیات بزرگ و سپس همه موارد کوچکتر قرار می گیرند. اگر به شکل نگاه کنید، حرکت انکودر مانند یک خط زیگزاگ به نظر می رسد. مرحله زیگ زاگ نامیده می شود (شکل 5).

    5

    سپس توالی حاصل فشرده می شود: ابتدا با RLE معمول، سپس با روش هافمن.

    6. و در نهایت تمیز مرحله فنی- داده ها در یک پوسته محصور شده اند، همراه با یک هدر، که تمام پارامترهای فشرده سازی را نشان می دهد تا بتوان تصویر را بازیابی کرد. با این حال، گاهی اوقات این اطلاعات در هدرها گنجانده نمی‌شود، که باعث افزایش فشرده‌سازی می‌شود، اما در این مورد باید مطمئن باشید که برنامه‌ای که فایل را می‌خواند از آنها اطلاع دارد.

    در اینجا، به طور کلی، و همه تحولات. حالا بیایید محاسبه کنیم که در مثال ما چقدر فشرده سازی به دست آمده است. ما 7 مقدار دریافت کردیم که تصویر 8x8 اصلی را بازیابی می کند. بنابراین، فشرده سازی حاصل از استفاده از تبدیل DCT در هر دو کانال رنگی 8x8/7 9 برابر بود. بیایید نه هفت، بلکه 11 ضریب را به کانال روشنایی اختصاص دهیم، که 8x8/11 6 را می دهد. برای هر سه کانال، (9+9+6)/3=8 برابر می شود. کاهش کیفیت در هنگام "تخریب" تصویر که در مرحله دوم رخ داد افزایش مضاعف اضافی را به همراه دارد (طرح 4-1-1 با در نظر گرفتن ویژگی های رمزگذاری مؤلفه روشنایی) که نتیجه نهایی را به دست می دهد - 16 بار این یک تخمین تقریبی است که برخی از جنبه ها را در نظر نمی گیرد، اما تصویر واقعی را منعکس می کند. برای کاهش 30 برابری اندازه فایل، باید تنها 3-4 جزء باقی بگذارید.

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

    معایب JPEG

    1. عدم امکان دستیابی به نسبت تراکم بالا به دلیل محدودیت اندازه بلوک (فقط 8x8).
    2. ساختار بلوکی در نسبت تراکم بالا.
    3. گوشه های تیز گرد و عناصر نازک را در یک تصویر محو کنید.
    4. فقط تصاویر RGB پشتیبانی می شوند (شما فقط می توانید از JPEG برای تصاویر CMYK در فرمت EPS از طریق DCS استفاده کنید).
    5. تا زمانی که تصویر به طور کامل بارگذاری نشده باشد، نمی توان آن را نمایش داد.

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

    JPEG2000

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

    از آنجایی که الگوریتم جدید ادعا می کرد جهانی است، علاوه بر این، وظیفه استفاده از روش های مختلف انتقال داده ها را نیز بر عهده داشت. حالت واقعیزمان و با پهنای باند باریک)، که به ویژه در برنامه های چند رسانه ای، به عنوان مثال، در پخش واقعی از طریق اینترنت بسیار مهم است.

    الزامات اساسی برای فرمت JPEG2000:

    1. دستیابی به درجه فشرده سازی بالاتر در مقایسه با JPEG.
    2. پشتیبانی از تصاویر تک رنگ، که امکان استفاده از آن را برای فشرده سازی تصاویر با متن فراهم می کند.
    3. امکان فشرده سازی بدون اتلاف
    4. خروجی تصاویر با بهبود تدریجی جزئیات (مانند GIF مترقی).
    5. استفاده از نواحی اولویت دار در تصویر که می توان کیفیت آن را بالاتر از بقیه قسمت های تصویر قرار داد.
    6. رمزگشایی در زمان واقعی (بدون تاخیر).

    اصل فشرده سازی

    به عنوان مکانیسم اصلی فشرده سازی در JPEG2000، بر خلاف JPEG، تبدیل موج (موجک) استفاده می شود - سیستمی از فیلترها که بر روی کل تصویر اعمال می شود. بدون پرداختن به جزئیات فشرده سازی، فقط نکات اصلی را یادداشت می کنیم.

    6
    ابتدا، درست مانند JPEG، تصویر به سیستم YCrCb تبدیل می‌شود و پس از آن، اطلاعات اضافی حذف می‌شوند (با ترکیبی از پیکسل‌های مجاور که قبلاً شناخته شده‌اند به بلوک‌های 2×2). سپس کل تصویر به قسمت هایی با همان اندازه (کاشی) تقسیم می شود، که بر روی هر یک، مستقل از بقیه، تغییرات بیشتری رخ می دهد (این امر نیاز به حافظه و منابع محاسباتی را کاهش می دهد). در ادامه هر کانال توسط فیلترهای پایین گذر و بالا گذر به صورت جداگانه در ردیف و ردیف فیلتر می شود که در نتیجه پس از اولین گذر، چهار تصویر کوچکتر (زیر باند) در هر قسمت تشکیل می شود. همه آنها حاوی اطلاعات مربوط به تصویر اصلی هستند، اما محتوای اطلاعاتی آنها بسیار متفاوت است (شکل 6).

    به عنوان مثال، تصویری که پس از فیلتر کردن پایین گذر توسط ردیف ها و ردیف ها (بالا سمت چپ) به دست می آید، بیشترین میزان را دارد. مقدار زیاداطلاعات، و دریافت پس از فرکانس بالا - حداقل. محتوای اطلاعات تصاویر به دست آمده پس از فیلتر پایین گذر ردیف ها و فیلتر با فرکانس بالا برای ستون ها (و بالعکس) متوسط ​​است. آموزنده ترین تصویر دوباره فیلتر می شود و اجزای حاصل، مانند فشرده سازی jpeg، کوانتیزه می شوند. این چندین بار اتفاق می افتد: برای فشرده سازی بدون تلفات، حلقه معمولاً 3 بار تکرار می شود، با تلفات - 10 تکرار یک مصالحه منطقی بین اندازه، کیفیت و سرعت رفع فشار در نظر گرفته می شود. نتیجه یک تصویر کوچک و مجموعه ای از تصاویر با جزئیات کوچک است که به طور متوالی و با دقت خاصی آن را به اندازه عادی باز می گرداند. بدیهی است که بیشترین درجه فشرده سازی در تصاویر بزرگ به دست می آید، زیرا چرخه های بیشتری را می توان تنظیم کرد.

    پیاده سازی عملی

    از زمانی که پایه های فشرده سازی JPEG2000 گذاشته شد، تعدادی از شرکت ها الگوریتم های نسبتاً کارآمدی را برای پیاده سازی آن ایجاد کرده اند.

    در میان توسعه دهندگان اصلی نرم افزار، می توان به Corel اشاره کرد (به هر حال، این یکی از اولین کسانی بود که پشتیبانی از فرمت wi را بر اساس تبدیل امواج به بسته های خود معرفی کرد، که برای آن افتخار و ستایش است) - تمام تصاویر ارائه شده بر روی سی دی ها با بسته CorelDRAW تا نسخه نهم، به این صورت فشرده شدند.

    بعدها، Adobe نیز به آن توجه کرد. برخی از ایده های پشت JPEG2000 توسط توسعه دهندگان فتوشاپ 6 در قالب گزینه های پیشرفته هنگام ذخیره یک تصویر به صورت JPEG (معمولی، بر اساس تبدیل کسینوس) به کار گرفته شده است. از جمله JPEG پیشرونده (گزینه Progressive در پنجره Save for Web) است. این الگوریتم اساساً برای سیستم های بلادرنگ در نظر گرفته شده است و دقیقاً مانند GIF پیشرونده عمل می کند. ابتدا یک کپی تقریبی از تصویر ظاهر می شود که فقط از چند بلوک تشکیل شده است. سایز بزرگو با گذشت زمان، زمانی که بقیه داده ها بارگذاری می شوند، ساختار با وضوح بیشتری مشاهده می شود تا در نهایت، تصویر نهایی به طور کامل بازیابی شود. برخلاف GIF، این الگوریتم ایجاد می کند بار سنگینروی بیننده، زیرا باید کل چرخه تبدیل را برای هر نسخه ارسال شده تکمیل کند.

    در میان سایر موارد اضافه شده، ما به گنجاندن چندین تصویر فشرده شده با JPEG با درجات مختلف فشرده سازی، وضوح و حتی مدل های رنگی در فایل اشاره می کنیم. بر این اساس، در فتوشاپ 6 امکان انتخاب مناطق جداگانه در تصویر و اعمال تنظیمات مختلف فشرده سازی برای آنها فراهم شد. منطقه مورد نظر، برای اولین بار چنین مکانیزمی در سال 1995 با استفاده از مقادیر پایین تر در جدول کوانتیزاسیون ارائه شد. برای انجام این کار، ناحیه مورد نیاز تنظیم می شود (مثلاً به شکل یک کانال جدید در تصویر) و نماد ماسک در کنار آیتم Quality فشار داده می شود. در پنجره ای که ظاهر می شود، می توانید با حرکت دادن لغزنده ها، تصویر را آزمایش کنید - نتیجه نهایی روی صفحه نمایش داده می شود و به شما امکان می دهد به سرعت مصالحه لازم بین کیفیت و اندازه را پیدا کنید.

    مبدل ها و بینندگان تخصصی

    از آنجایی که استاندارد پیاده‌سازی خاصی از روش‌های فشرده‌سازی/فشرده‌سازی را مشخص نمی‌کند، این فضا را برای توسعه‌دهندگان شخص ثالث الگوریتم‌های فشرده‌سازی باز می‌کند. در واقع، شما می توانید از یک الگوریتم شکل موج ساده استفاده کنید و در نتیجه فرآیند فشرده سازی را سرعت بخشید، یا برعکس، از یک الگوریتم پیچیده تر استفاده کنید و بر این اساس، به منابع سیستم زیادی نیاز دارید.

    راه حل های تخصصی از شرکت های دیگر به عنوان توسعه تجاری در دسترس هستند. برخی به عنوان برنامه های جداگانه (JPEG 2000 توسعه یافته توسط Aware)، برخی دیگر به عنوان ماژول های الحاقی برای رایج ترین ویرایشگرهای شطرنجی (ImagePress JPEG2000 توسعه یافته توسط Pegasus Imaging و ماژول LEAD JPEG2000 از LEAD Technologies) اجرا می شوند. در مقابل پیشینه آنها، شرکت LuraTech متمایز است که مدت هاست با این موضوع سروکار داشته است. این فناوری LuraWave خود را در محصول مستقل LuraWave SmartCompress (نسخه سوم اکنون در دسترس است) ترویج می‌کند و ماژول‌هایی را برای Photoshop، Paintshop، Photopaint ارائه می‌دهد. ویژگی متمایز- سرعت بالاتر (تبدیل تقریباً آنی) حتی با تصاویر چند مگابایتی. بر این اساس، قیمت این ماژول بالاترین - 79 دلار است.

    برای مشاهده تصاویر JPEG2000 در مرورگرها، باید یک ماژول نمایشگر ویژه نصب کنید (همه توسعه دهندگان آن را به صورت رایگان ارائه می دهند). درج یک تصویر در یک سند html، مانند هر افزونه، به استفاده از ساختار EMBED (با گزینه های اضافی). به عنوان مثال، به این معنی است که از روش انتقال تصویر پیشرونده استفاده خواهد شد. یعنی در مثال ما (فایل 139 کیلوبایتی) ابتدا فقط 250 بایت منتقل می شود که بر اساس آن یک تصویر خشن ساخته می شود سپس پس از بارگذاری 500 بایت تصویر به روز می شود (این کار تا زمانی که مقدار LIMIT ادامه یابد ادامه می یابد. رسیده).

    اگر می خواهید تصویر بهتری داشته باشید، باید مورد Improve را از منویی که در دکمه سمت راست ظاهر می شود انتخاب کنید (شکل 9). برای چهار رزومه، کل تصویر به طور کامل دانلود می شود.

    9

    نتیجه گیری

    بنابراین، JPEG2000 به طور عینی نشان می دهد بالاترین امتیازهااز JPEG فقط در نسبت فشرده سازی بالا. با فشرده سازی 10-20 بار، تفاوت زیادی وجود ندارد. آیا می تواند جایگزین قالب گسترده شود یا به سادگی با آن رقابت کند؟ در آینده نزدیک - به سختی، در بیشتر موارد، نسبت کیفیت / اندازه ارائه شده توسط JPEG کاملا قابل قبول است. و آن 10 تا 20 درصد فشرده‌سازی اضافی که JPEG2000 با کیفیت بصری یکسان ارائه می‌کند، بعید است که منجر به افزایش محبوبیت آن شود.

    از سوی دیگر، شرکت‌های دوربین‌های دیجیتال علاقه زیادی به فرمت جدید نشان می‌دهند، زیرا اندازه ماتریس‌های حساس به نور هر سال به طور پیوسته افزایش می‌یابد و قرار دادن تصاویر در حافظه سخت‌تر می‌شود. و سپس فرمت جدید گسترده تر خواهد شد، و چه کسی می داند، شاید پس از مدتی JPEG2000 به JPEG برسد. در هر صورت، آنالوگ میکرو دیوایس اخیراً یک تراشه تخصصی منتشر کرده است که در آن فشرده‌سازی/فشرده‌سازی با استفاده از یک فناوری جدید در سطح سخت‌افزار اجرا می‌شود و وزارت دفاع ایالات متحده در حال حاضر فعالانه از فرمت جدیدی برای ضبط عکس‌های دریافتی از ماهواره‌های جاسوسی استفاده می‌کند.

    حقایق و حدسیات

    1. JPEG هنگام باز کردن و ذخیره مجدد فایل کیفیت خود را از دست می دهد.

    درست نیست.کیفیت فقط زمانی از بین می رود که نسبت فشرده سازی کمتر از نسبت فشرده سازی انتخاب شده باشد که تصویر در آن ذخیره شده است.

    2. JPEG هنگام ویرایش فایل کیفیت خود را از دست می دهد.

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

    3. نتیجه فشرده سازی با پارامترهای یکسان در برنامه های مختلف یکسان خواهد بود.

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

    4. وقتی روی حداکثر کیفیت تنظیم می شود، تصویر بدون افت کیفیت ذخیره می شود.

    درست نیست. JPEG همیشه با تلفات فشرده می شود. اما تنظیم، به عنوان مثال، کیفیت 90٪ به جای 100٪ باعث کاهش حجم فایل بیشتر از کاهش کیفیت می شود.

    5. هر فایل JPEG را می توان در هر ویرایشگری که فرمت JPEG را درک می کند باز کرد.

    درست نیست.پیشرو JPEG گونه ای از JPEG است که برخی از ویرایشگران آن را درک نمی کنند.

    6. JPEG از شفافیت پشتیبانی نمی کند.

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

    7. JPEG بهتر از GIF فشرده می شود.

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

    JPEG2000 در مقابل JPEG

    7
    1. با فشرده سازی 20 تا 30 برابر، JPEG2000 و JPEG تقریباً کیفیت یکسانی را ارائه می دهند (به هر حال، فتوشاپ نمی تواند فشرده شود عکس معمولیبیش از این حد).

    2. با فشرده سازی بالاتر، کیفیت JPEG2000 به طور قابل توجهی بالاتر از JPEG است، که به شما امکان می دهد بدون تلفات زیاد تا 50 بار فشرده سازی کنید، و با مقداری تلفات (ما در مورد تصاویر برای اینترنت صحبت می کنیم) - تا 100 و حتی بیشتر تا 200

    3. با نسبت فشرده سازی بالا در مناطقی که تغییر رنگ صاف وجود دارد، تصویر ساختار بلوکی مشخصه یک JPEG ساده را به دست نمی آورد. JPEG2000 همچنین لبه های تیز را تا حدودی لکه دار و گرد می کند - عکس ها را ببینید (شکل 7 و 8).

    نتایج فشرده سازی فایل آزمایشی را با نسبت های مختلف فشرده سازی نشان می دهد (در سمت چپ - ذخیره شده در فتوشاپ با فرمت JPG، در سمت راست - با فرمت JPEG2000). برای تصویر در شکل 7 سطح فشرده سازی 20، 40، 70 و 145 انتخاب شد (در هنگام ذخیره در JPEG2000 می توان آنها را به صراحت مشخص کرد)، نسبت فشرده سازی JPG طوری انتخاب شد که اندازه فایل مانند پس از فشرده سازی توسط JPEG2000 باشد. همانطور که می گویند، نتایج در. برای وضوح، آزمایش دوم بر روی تصویری با جزئیات واضح تر (با سطوح فشرده سازی 10، 20، 40 و 80) انجام شد. مزیت دوباره JPEG2000 است (شکل 8).

    8

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

    بنابراین، برای کسانی که گالری تصاویر در اینترنت می سازند، نیازی به ایجاد تصاویر کوچک برای آنها نیست.

    5. فشرده سازی بدون اعوجاج (حالت بدون از دست دادن) مورد توجه خاص است. بنابراین، فایل آزمایشی با فشرده سازی LZW از فتوشاپ 827 کیلوبایت گرفت و JPEG2000 - 473 کیلوبایت فشرده شد.

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

    7. عدم پشتیبانی از JPEG2000 در مرورگرها. برای مشاهده چنین تصاویری، باید یک افزونه نسبتاً بزرگ (1.2 مگابایت) دانلود کنید.

    8. عدم وجود نرم افزار رایگان برای ذخیره تصاویر در فرمت جدید.

    مجلات در حوزه عمومی

    در مورد همین موضوع:


    منطقه برنامه

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

    هنگام ذخیره یک فایل JPEG، می توانید درجه کیفیت و از این رو درجه فشرده سازی را مشخص کنید، که معمولاً در برخی واحدهای دلخواه تنظیم می شود، به عنوان مثال، از 1 تا 100 یا از 1 تا 10. عدد بزرگتر مربوط به کیفیت بهتر است. ، اما اندازه فایل افزایش می یابد. معمولا تفاوت کیفیت بین 90 تا 100 عملا با چشم قابل درک نیست. لازم به یادآوری است که تصویر بازیابی شده از فرمت JPEG کپی دقیقی از نسخه اصلی نیست. یک تصور غلط رایج این است که کیفیت JPEG برابر با مقدار اطلاعات ذخیره شده است.

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

    فشرده سازی

    هنگامی که فشرده می شود، تصویر از فضای رنگی RGB به YCbCr (YUV) تبدیل می شود. لازم به ذکر است که استاندارد JPEG (ISO / IEC 10918-1) انتخاب YCbCr را به هیچ وجه تنظیم نمی کند و به انواع دیگر تبدیل (به عنوان مثال، با تعدادی مؤلفه غیر از سه) و فشرده سازی بدون تبدیل اجازه می دهد. (مستقیماً به RGB)، با این حال، مشخصات JFIF (فرمت تبادل فایل JPEG، پیشنهاد شده در سال 1991 توسط C-Cube Microsystems، و در حال حاضر استاندارد واقعی) شامل استفاده از تبدیل RGB-> YCbCr است.

    پس از تبدیل RGB->YCbCr، برای کانال های تصویر Cb و Cr که مسئول رنگ هستند، می توان "decimation" (subsampling) را انجام داد، به این معنی که به هر بلوک 4 پیکسلی (2x2) از کانال روشنایی Y مقادیر متوسط ​​اختصاص داده می شود. از Cb و Cr (طرح نازک شدن "4:2:0". در این مورد، برای هر بلوک 2x2، به جای 12 مقدار (4 Y، 4 Cb و 4 Cr)، فقط 6 عدد (4 Y) استفاده می شود. و هر کدام یک Cb و Cr متوسط).اگر کیفیت بازیابی شده پس از فشرده سازی تصویر منوط به افزایش نیاز باشد، نازک شدن را می توان فقط در یک جهت انجام داد - به صورت عمودی (طرح "4:4:0") یا به صورت افقی ("4: 2:2")، یا اصلا اجرا نشده است ("4: 4:4").

    این استاندارد همچنین اجازه می دهد تا با میانگین Cb و Cr، نه برای یک بلوک 2x2، بلکه برای چهار پیکسل متوالی (عمودی یا افقی)، یعنی برای بلوک های 1x4 یا 4x1، حذف شود (طرح "4:1:1"). همچنین می توان از انواع مختلف کاهش برای Cb و Cr استفاده کرد، اما در عمل چنین طرح هایی بسیار نادر هستند.

    علاوه بر این، مولفه روشنایی Y و اجزای مسئول رنگ Cb و Cr به بلوک های 8x8 پیکسل تقسیم می شوند. هر بلوک از این قبیل در معرض تبدیل کسینوس گسسته (DCT) قرار می گیرد. ضرایب DCT حاصل کوانتیزه می شوند (ماتریس های کوانتیزاسیون مختلف معمولاً برای Y، Cb و Cr استفاده می شوند) و با استفاده از کدهای هافمن بسته بندی می شوند. استاندارد JPEG همچنین امکان استفاده از کدگذاری حسابی بسیار کارآمدتر را می دهد، اما به دلیل محدودیت های ثبت اختراع (پتنت رمزگذار QM حسابی که در استاندارد JPEG توضیح داده شده متعلق به IBM است)، در عمل از آن استفاده نمی شود.

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

    انواع طرح های فشرده سازی JPEG

    استاندارد JPEG دو راه اصلی برای نمایش داده های کدگذاری شده ارائه می دهد.

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

    در مورد JPEG پیشرونده، داده های فشرده شده به عنوان مجموعه ای از اسکن ها در جریان خروجی نوشته می شوند که هر کدام کل تصویر را با جزئیات بیشتر توصیف می کنند. این امر یا با ثبت مجموعه کاملی از ضرایب DCT، بلکه فقط برخی از آنها در هر اسکن به دست می‌آید: اول - فرکانس پایین، در اسکن‌های بعدی - فرکانس بالا (روش انتخاب طیفی، به عنوان مثال، نمونه‌های طیفی)، یا با استفاده متوالی. از اسکن به اسکن، اصلاح ضرایب DCT (روش "تقریبا متوالی"، یعنی تقریب های متوالی). این نمایش تدریجی داده ها به ویژه هنگام انتقال تصاویر فشرده با استفاده از کانال های ارتباطی کم سرعت مفید است، زیرا به شما امکان می دهد پس از انتقال بخش کوچکی از فایل JPEG، نمای کل تصویر را دریافت کنید.

    هر دو طرح توصیف شده (هم ترتیبی و هم پیش رونده JPEG) بر اساس DCT هستند و اساساً اجازه به دست آوردن یک تصویر بازسازی شده کاملاً یکسان با تصویر اصلی را نمی دهند. با این حال، این استاندارد همچنین فشرده‌سازی را مجاز می‌کند که از DCT استفاده نمی‌کند، بلکه بر اساس یک پیش‌بینی‌کننده خطی ساخته شده است (بدون تلفات، به‌عنوان «بی ضرر»، JPEG)، که تطابق کامل و بیت به بیت را بین نسخه اصلی و بیت تضمین می‌کند. تصاویر بازیابی شده در عین حال، نسبت فشرده سازی برای تصاویر عکاسی به ندرت به 2 می رسد، اما عدم تضمین اعوجاج در برخی موارد مورد تقاضا است. قابل ملاحظه ای درجات عالیفشرده سازی را می توان با استفاده از روش فشرده سازی JPEG-LS بدست آورد، که با وجود شباهت در نام ها، ارتباط مستقیمی با JPEG ISO/IEC 10918-1 (توصیه ITU T.81) 0.87 ندارد.

    نحو و ساختار

    یک فایل JPEG شامل دنباله ای از نشانگرها است که هر کدام با یک بایت 0xFF شروع می شود که نشانگر شروع نشانگر و یک بایت شناسه است. برخی از نشانگرها فقط از این جفت بایت تشکیل شده اند، در حالی که برخی دیگر حاوی داده های اضافی هستند که شامل یک فیلد دو بایتی با طول بخش اطلاعات نشانگر (شامل طول این فیلد، اما منهای دو بایت ابتدای نشانگر، یعنی 0xFF و شناسه) و داده های واقعی.

    نشانگرهای اصلی JPEG
    نشانگربایت هاطولهدف
    مشکلات با الگوریتم های آرشیو با اتلاف

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

    یکی از مشکلات جدی گرافیک کامپیوتری این است که هنوز معیار مناسبی برای ارزیابی افت کیفیت تصویر پیدا نشده است. و به طور مداوم از بین می رود - هنگام دیجیتالی کردن، هنگام تبدیل به پالت محدود رنگ، هنگام تبدیل به سیستم نمایش رنگ دیگری برای چاپ، و، که به ویژه برای ما مهم است، هنگام بایگانی با ضرر. می توانید مثال بزنید یک معیار ساده: انحراف استاندارد مقادیر پیکسل (L 2 اندازه گیری، یا ریشه میانگین مربع - RMS):

    با توجه به آن، هنگامی که روشنایی تنها 5٪ کاهش یابد، تصویر به شدت آسیب می بیند (چشم متوجه این موضوع نمی شود - تنظیم روشنایی برای مانیتورهای مختلف بسیار بیشتر متفاوت است). در همان زمان، تصاویر با "برف" - تغییر شدید در رنگ نقاط منفرد، نوارهای کم رنگ یا "moiré" به عنوان "تقریباً بدون تغییر" شناخته می شوند (توضیح دهید چرا؟). معیارهای دیگر نیز معایبی دارند.

    برای مثال حداکثر انحراف را در نظر بگیرید:

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

    معیاری که در حال حاضر در عمل استفاده می شود، اندازه گیری نسبت سیگنال به نویز (نسبت سیگنال به نویز پیک به پیک - PSNR) نامیده می شود.

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

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

    JPEG یکی از جدیدترین و کاملا قدرتمندترین الگوریتم هاست. این عملاً استاندارد واقعی برای تصاویر تمام رنگی است. این الگوریتم با نواحی 8×8 عمل می کند که در آن روشنایی و رنگ نسبتاً آرام تغییر می کند. در نتیجه، هنگام گسترش ماتریس چنین منطقه ای به یک سری دوگانه از نظر کسینوس (به فرمول های زیر مراجعه کنید)، تنها ضرایب اول مهم هستند. بنابراین، فشرده سازی در JPEG به دلیل صاف بودن تغییرات رنگ در تصویر انجام می شود.

    این الگوریتم توسط گروهی از متخصصان عکاسی به طور خاص برای فشرده سازی تصاویر 24 بیتی توسعه یافته است. JPEG - Joint Photographic Expert Group - یک بخش در ISO - سازمان بین المللی استاندارد. نام الگوریتم به عنوان ["jei" peg] خوانده می شود. به طور کلی، الگوریتم مبتنی بر تبدیل کسینوس گسسته (از این پس DCT) است که به ماتریس تصویر اعمال می شود تا ماتریس جدیدی از ضرایب به دست آید. یک تبدیل معکوس برای به دست آوردن تصویر اصلی اعمال می شود.

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

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

    نحوه عملکرد الگوریتم

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

    مرحله 1.

    تصویر را از فضای رنگی RGB، با اجزای مسئول اجزای قرمز (قرمز)، سبز (سبز) و آبی (آبی) رنگ نقطه، به فضای رنگی YCrCb (گاهی اوقات YUV نامیده می شود) ترجمه می کنیم.

    در آن، Y جزء روشنایی است و Cr، Cb اجزای مسئول رنگ (قرمز رنگی و آبی رنگی) هستند. با توجه به اینکه چشم انسان نسبت به رنگ حساسیت کمتری نسبت به روشنایی دارد، می توان آرایه هایی را برای اجزای Cr و Cb با تلفات زیاد و بر این اساس نسبت فشرده سازی زیاد بایگانی کرد. تحول مشابهی برای مدت طولانی در تلویزیون استفاده شده است. باند فرکانسی باریک تری به سیگنال های مسئول رنگ اختصاص داده می شود.

    به صورت ساده، ترجمه از فضای رنگی RGB به فضای رنگی YCrCb را می توان با استفاده از ماتریس انتقال نشان داد:

    تبدیل معکوس با ضرب بردار YUV در ماتریس معکوس انجام می شود.

    گام 2

    ما تصویر اصلی را به ماتریس های 8x8 تقسیم می کنیم. از هر کدام سه ماتریس کار DCT - 8 بیت به طور جداگانه برای هر جزء تشکیل می دهیم. در نسبت تراکم بالا، این مرحله می تواند کمی دشوارتر باشد. تصویر با مؤلفه Y تقسیم می شود - مانند مورد اول، و برای مؤلفه های Cr و Cb، ماتریس ها از طریق خط و از طریق ستون تایپ می شوند. آن ها از ماتریس اصلی 16x16، تنها یک ماتریس DCT فعال به دست می آید. در این حالت، همانطور که به راحتی قابل مشاهده است، 3/4 اطلاعات مفید در مورد اجزای رنگی تصویر را از دست می دهیم و بلافاصله فشرده سازی دو برابری دریافت می کنیم. ما می توانیم این کار را با کار در فضای YCrCb انجام دهیم. همانطور که تمرین نشان داده است، این تاثیر زیادی روی تصویر RGB ایجاد شده ندارد.

    مرحله 3

    ما DCT را برای هر ماتریس کاری اعمال می کنیم. در این مورد، ماتریسی به دست می آوریم که در آن ضرایب در سمت چپ گوشه بالاییبا مولفه فرکانس پایین تصویر و در سمت راست پایین - با فرکانس بالا مطابقت دارد.

    در شکل ساده شده، این تبدیل را می توان به صورت زیر نشان داد:

    مرحله 4

    ما کوانتیزاسیون را انجام می دهیم. در اصل، این به سادگی تقسیم ماتریس کار بر عنصر ماتریس کوانتیزاسیون به عنصر است. برای هر جزء (Y، U و V)، در حالت کلی، ماتریس کوانتیزاسیون q خود (از این پس MC) مشخص شده است. در این مرحله نسبت تراکم کنترل می شود و بیشترین تلفات رخ می دهد. واضح است که با تنظیم MC با ضرایب بزرگ، به صفرهای بیشتر و در نتیجه نسبت تراکم بیشتر خواهیم رسید.

    اثرات خاص الگوریتم نیز با کوانتیزاسیون همراه است. در مقادیر بالای ضریب گاما، تلفات در فرکانس‌های پایین می‌تواند آنقدر زیاد باشد که تصویر به مربع‌های 8x8 تقسیم شود. تلفات در فرکانس های بالامی تواند خود را در به اصطلاح "اثر گیبس" نشان دهد، زمانی که نوعی "هاله" در اطراف خطوط با یک انتقال رنگ تیز شکل می گیرد.

    مرحله 5.

    ماتریس 8x8 را با استفاده از اسکن "زیگزاگ" به یک بردار 64 عنصری ترجمه می کنیم. عناصر را با شاخص های (0.0)، (0.1)، (1.0)، (2.0) بگیرید...

    بنابراین، در ابتدای بردار، ضرایب ماتریس مربوط به آن را دریافت می کنیم فرکانس های پایین، و در پایان - بالا.

    مرحله 6

    ما بردار را با استفاده از الگوریتم کدگذاری گروهی در هم می‌کشیم. در این مورد، جفت هایی از نوع (پرش، عدد) دریافت می کنیم، که در آن "پرش" شمارنده صفرهای نادیده گرفته شده است، و "عدد" مقداری است که باید در سلول بعدی قرار گیرد. بنابراین، بردار 42 3 0 0 0 -2 0 0 0 0 1 ... به صورت جفت (0.42) (0.3) (3,-2) (4.1) ... تا می شود.

    مرحله 7

    جفت های به دست آمده را با کد گذاری هافمن با جدول ثابت تا می کنیم.

    فرآیند بازسازی تصویر در این الگوریتم کاملاً متقارن است. این روش به شما امکان می دهد برخی از تصاویر را 10-15 بار بدون تلفات جدی فشرده کنید.


    عملیات خط لوله مورد استفاده در الگوریتم JPEG.

    جنبه های مثبت مهم الگوریتم عبارتند از:

    1. نسبت تراکم را تنظیم می کند.
    2. مرخصی روزانه یک تصویر رنگی می تواند 24 بیت در هر نقطه داشته باشد.
    معایب الگوریتم این است که:
    1. با افزایش نسبت فشرده سازی، تصویر به مربع های جداگانه (8x8) تقسیم می شود. این به دلیل این واقعیت است که تلفات زیادی در فرکانس های پایین در طول کوانتیزه شدن اتفاق می افتد و بازیابی داده های اصلی غیرممکن می شود.
    2. اثر گیبس ظاهر می شود - هاله ها در امتداد مرزهای انتقال رنگ تیز.
    همانطور که قبلاً ذکر شد ، JPEG نسبتاً اخیراً - در سال 1991 - استاندارد شده است. اما حتی در آن زمان نیز الگوریتم هایی وجود داشتند که با افت کیفیت کمتری فشرده تر می شدند. واقعیت این است که اقدامات توسعه دهندگان استاندارد به دلیل قدرت فناوری که در آن زمان وجود داشت محدود شد. یعنی حتی در رایانه شخصی، الگوریتم باید کمتر از یک دقیقه روی یک تصویر متوسط ​​کار می کرد و اجرای سخت افزاری آن باید نسبتاً ساده و ارزان باشد. الگوریتم باید متقارن باشد (زمان باز کردن زیپ تقریباً برابر با زمان بایگانی است).

    نیاز اخیر اسباب‌بازی‌هایی مانند دوربین‌های دیجیتال را امکان‌پذیر کرد - دستگاه‌هایی به اندازه یک دوربین فیلمبرداری کوچک که عکس‌های 24 بیتی را روی یک کارت فلش 10-20 مگابایتی با رابط PCMCIA می‌گیرند. سپس این کارت در اسلات لپ تاپ شما قرار می گیرد و برنامه مربوطه به شما امکان خواندن تصاویر را می دهد. آیا این درست نیست که اگر الگوریتم نامتقارن بود، منتظر ماندن طولانی مدت تا زمانی که دستگاه "شارژ" شود - تصویر را فشرده کند، ناخوشایند است.

    یکی دیگر از ویژگی های نه چندان خوشایند JPEG این است که اغلب افقی و راه راه های عمودیروی نمایشگر کاملاً نامرئی هستند و فقط زمانی می توانند ظاهر شوند که به شکل الگوی موآر چاپ شوند. زمانی اتفاق می‌افتد که یک الگوی چاپ اریب روی نوارهای افقی و عمودی تصویر اعمال شود. به دلیل این شگفتی‌ها، JPEG برای استفاده فعال در چاپ، تنظیم ضرایب بالا توصیه نمی‌شود. با این حال، هنگام آرشیو تصاویر در نظر گرفته شده برای مشاهده انسان، در حال حاضر ضروری است.

    کاربرد گسترده JPEG برای مدت طولانیشاید تنها با این واقعیت که او با تصاویر 24 بیتی کار می کند مهار شده است. بنابراین برای مشاهده تصویری با کیفیت قابل قبول بر روی مانیتور معمولی در پالت 256 رنگ، استفاده از الگوریتم های مناسب و در نتیجه زمان معینی مورد نیاز بود. در برنامه‌هایی که کاربر حساس را هدف قرار می‌دهند، مانند بازی‌ها، چنین تاخیرهایی غیرقابل قبول است. علاوه بر این، اگر تصاویری دارید، مثلاً با فرمت GIF 8 بیتی، تبدیل به JPEG 24 بیتی شده و سپس برای مشاهده به GIF برگردید، با هر دو تبدیل، کیفیت دو بار کاهش می یابد. با این حال، افزایش اندازه آرشیو اغلب آنقدر زیاد است (3-20 برابر!)، و کاهش کیفیت آنقدر کم است که ذخیره تصاویر در JPEG بسیار کارآمد است.

    در مورد اصلاحات این الگوریتم باید چند کلمه گفت. اگرچه JPEG یک استاندارد ISO است، فرمت فایل آن ثابت نشده است. با استفاده از این، سازندگان فرمت های ناسازگار خود را ایجاد می کنند و بنابراین می توانند الگوریتم را تغییر دهند. بنابراین، جداول داخلی الگوریتم توصیه شده توسط ISO با آنها جایگزین می شود. علاوه بر این، هنگام تنظیم درجه تلفات، سردرگمی جزئی وجود دارد. به عنوان مثال، هنگام آزمایش، معلوم می شود که کیفیت "عالی"، "100٪" و "10 امتیاز" تصاویر به طور قابل توجهی متفاوت است. در عین حال، به هر حال، کیفیت "100٪" به معنای فشرده سازی بدون تلفات نیست. همچنین انواع JPEG برای برنامه های خاص وجود دارد.

    چگونه استاندارد ISO JPEG شروع به استفاده بیشتر و بیشتر در تبادل تصاویر می کند شبکه های کامپیوتر. الگوریتم JPEG در فرمت‌های Quick Time، PostScript Level 2، Tiff 6.0 پشتیبانی می‌شود و در حال حاضر جایگاه برجسته‌ای را در سیستم‌های چند رسانه‌ای اشغال می‌کند.

    ویژگی های الگوریتم JPEG:

    کلاس تصویر:تصاویر تمام رنگی 24 بیتی یا خاکستری بدون تغییر رنگ واضح (عکس).

    تقارن: 1

    مشخصات:در برخی موارد، الگوریتم یک "هاله" در اطراف لبه های افقی و عمودی تیز در تصویر ایجاد می کند (اثر گیبس). علاوه بر این، با درجه فشرده سازی بالا، تصویر به بلوک های 8x8 پیکسل تقسیم می شود.

    الگوریتم فراکتال

    ایده روش

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

    به بیان دقیق، IFS مجموعه ای از تبدیل های سه بعدی است که در مورد ما، یک تصویر را به تصویر دیگر تبدیل می کند. نقاط در فضای سه بعدی (x_coordinate، y_coordinate، روشنایی) در معرض تبدیل قرار می گیرند.

    این فرآیند به وضوح توسط بارنزلی در کتاب "فشرده سازی تصویر فراکتال" نشان داده شد. در آنجا مفهوم فتوکپی معرفی شد که شامل صفحه‌ای است که تصویر اصلی روی آن نمایش داده می‌شود و سیستمی از لنزهایی که تصویر را بر روی صفحه دیگری پخش می‌کنند.

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

    با قرار دادن لنزها و تغییر مشخصات آنها می توانیم تصویر حاصل را کنترل کنیم. یک تکرار از کار ماشین شامل این واقعیت است که یک تصویر جدید از تصویر اصلی با کمک طرح ریزی ساخته می شود و پس از آن تصویر جدید به عنوان تصویر اولیه در نظر گرفته می شود. ادعا می شود که در فرآیند تکرارها تصویری دریافت خواهیم کرد که تغییر نخواهد کرد. این تنها به مکان و ویژگی های لنزها بستگی دارد و به تصویر اصلی بستگی ندارد. این تصویر نام دارد نقطه ثابت" یا جذب کنندهاین IFS تئوری مربوطه تضمین می کند که دقیقاً یک نقطه ثابت برای هر IFS وجود دارد.

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

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

    تمرین: 4 ناحیه را در تصویر مشخص کنید که با هم ترکیب شوند و کل تصویر را بپوشانند و هر کدام شبیه به کل تصویر باشد (ساقه سرخس را فراموش نکنید).

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

    =>
    در بدترین حالت، اگر یک الگوریتم بهینه‌سازی اعمال نشود، شمارش و مقایسه تمام قطعات تصویر ممکن در اندازه‌های مختلف ضروری خواهد بود. حتی برای تصاویر کوچک، با در نظر گرفتن گسستگی، تعداد نجومی گزینه هایی برای مرتب سازی دریافت خواهیم کرد. علاوه بر این، حتی باریک شدن شدید طبقات تبدیل، به عنوان مثال، تنها با مقیاس بندی تعداد معینی بار، سود قابل توجهی در زمان ایجاد نمی کند. علاوه بر این، کیفیت تصویر از بین می رود. اکثریت قریب به اتفاق تحقیقات در زمینه فشرده سازی فراکتال در حال حاضر با هدف کاهش زمان آرشیو مورد نیاز برای به دست آوردن یک تصویر با کیفیت بالا است.

    تعریف.

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

    تعریف. دگرگونی، قابل نمایش در شکل

    که در آن a، b، c، d، e، f، p، q، r، s، t، u اعداد حقیقی هستند و به آن تبدیل سه بعدی می گویند.

    تعریف. اجازه دهید یک تبدیل در فضای X باشد. نقطه ای مانند نامیده می شود نقطه ثابت(جذب) دگرگونی.

    تعریف. تبدیل در فضای متریک (X, d) در صورت وجود یک عدد انقباضی گفته می شود s:، طوری که

    اظهار نظر:به طور رسمی، ما می‌توانیم از هر نقشه انقباضی برای فشرده‌سازی فراکتال استفاده کنیم، اما در واقعیت فقط از تبدیل‌های آفین سه بعدی با محدودیت‌های نسبتاً قوی در ضرایب استفاده می‌شود.

    قضیه. (درباره تبدیل فشرده سازی)

    اجازه دهید در یک فضای متریک کامل (X, د). سپس دقیقاً یک نقطه ثابت از این تبدیل و برای هر نقطه دنباله وجود دارد همگرا می شود به .

    فرمول کلی تر این قضیه همگرایی را تضمین می کند.

    تعریف. تصویریک تابع S است که بر روی مربع واحد تعریف شده و مقادیر از 0 تا 1 یا را می گیرد

    اجازه دهید تبدیل سه بعدی وابسته به صورت نوشته شود

    و بر روی یک زیر مجموعه فشرده از مربع دکارتی x تعریف شده است. سپس بخشی از سطح را ترجمه می کند اسبه منطقه واقع با شیفت (e,f)و چرخش داده شده توسط ماتریس

    با این حال، اگر مقدار را تفسیر کنیم اسهمانطور که روشنایی نقاط مربوطه کاهش می یابد پبار (تبدیل باید انقباضی باشد) و به یک تغییر تغییر خواهد کرد q.

    تعریف. جمعیت محدود دبلیوانقباض تبدیل های سه بعدی وابسته تعریف شده در حوزه هایی به گونه ای که و ، نامیده میشود سیستم توابع تکراری ( IFS).

    یک سیستم از توابع تکرار شده به طور منحصر به فرد با یک نقطه ثابت - یک تصویر مرتبط است. بنابراین، فرآیند فشرده سازی شامل یافتن ضرایب سیستم است و فرآیند رفع فشرده سازی شامل تکرار سیستم تا زمانی که تصویر حاصل تثبیت شود (نقطه ثابت IFS) است. در عمل، 7-16 تکرار کافی است. مناطق به عنوان نامیده خواهد شد رتبه بندی، و مناطق دامنه.

    ساخت الگوریتم

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

    که در نسخه آموزشی الگوریتم ، در زیر بیان شده است، محدودیت های زیر در منطقه ایجاد شده است:

    1. همه مناطق مربع هایی با اضلاع موازی با اضلاع تصویر هستند.این محدودیت کاملاً شدید است. در واقع، ما قصد داریم تمام انواع اشکال هندسی را فقط با مربع تقریبی کنیم.
    2. هنگام تبدیل ناحیه دامنه به دامنه رتبه، اندازه آن کاهش می یابد دقیقا دوبار. این کار هم کمپرسور و هم کمپرسور را بسیار ساده می کند. وظیفه مقیاس بندی مناطق کوچک غیر ضروری است.
    3. همه بلوک های دامنه مربع هستند و دارای اندازه ثابت. تصویر توسط یک شبکه یکنواخت به مجموعه ای از بلوک های دامنه تقسیم می شود.
    4. مناطق دامنه گرفته شده است "از طریق یک نقطه" در هر دو X و Y، که بلافاصله جستجو را ضریب 4 کاهش می دهد.
    5. هنگام تبدیل دامنه به رتبه یک، مکعب را می توان چرخاند فقط در 0 0، 90 0، 180 0 یا 270 0. آینه کاری نیز مجاز است. تعداد کل تبدیل های ممکن (شمارش خالی) 8 است.
    6. پوسته پوسته شدن (فشرده سازی) به صورت عمودی (روشنایی) انجام می شود تعداد دفعات ثابت- در 0.75.
    این محدودیت ها اجازه می دهد:
    1. الگوریتمی بسازید که به تعداد نسبتاً کمی عملیات حتی روی تصاویر به اندازه کافی بزرگ نیاز دارد.
    2. نمایش داده هایی که باید در یک فایل نوشته شوند بسیار فشرده است. ما برای هر تبدیل افین در IFS نیاز داریم:
    • دو عدد برای تنظیم افست بلوک دامنه. اگر محدود کنیم تصاویر ورودیاندازه 512x512، سپس 8 بیت برای هر عدد کافی خواهد بود.
    • سه بیت برای تعیین تبدیل تقارن هنگام تبدیل یک بلوک دامنه به یک بلوک رتبه.
    • 7-9 بیت به منظور تنظیم تغییر در روشنایی در طول ترجمه.
    اطلاعات اندازه بلوک را می توان در هدر فایل ذخیره کرد. بنابراین، ما کمتر از 4 بایت در هر تبدیل affine صرف کردیم. بسته به اندازه بلوک، می توانید محاسبه کنید که چند بلوک در تصویر وجود دارد. بنابراین، می توانیم تخمینی از درجه فشرده سازی به دست آوریم.

    به عنوان مثال، برای یک فایل در مقیاس خاکستری با 256 رنگ 512x512 پیکسل، با اندازه بلوک 8 پیکسل، تبدیل های افین 4096 (512/8x512/8) خواهد بود. هر کدام به 3.5 بایت نیاز دارند. بنابراین، اگر فایل اصلی 262144 (512x512) بایت (به استثنای هدر) را اشغال کرده باشد، فایل با ضرایب 14336 بایت خواهد بود. ضریب بایگانی - 18 برابر. در عین حال، ما در نظر نمی گیریم که یک فایل با ضرایب نیز می تواند افزونگی داشته باشد و با استفاده از روش بایگانی بدون ضرر، مانند LZW، بایگانی شود.

    جنبه های منفی محدودیت های پیشنهادی:

    1. از آنجایی که همه مناطق مربع هستند، استفاده از شباهت اجسامی که از نظر شکل از مربع دور هستند (که در تصاویر واقعی کاملاً رایج است) غیرممکن است.
    2. به همین ترتیب، ما نمی توانیم از شباهت اشیاء در تصویر استفاده کنیم که ضریب شباهت بین آنها با 2 بسیار متفاوت است.
    3. الگوریتم قادر به استفاده از شباهت اشیاء در تصویر که زاویه بین آنها مضرب 90 0 نیست، نخواهد بود.
    این هزینه برای سرعت فشرده سازیو برای سهولت در بسته بندی ضرایب در یک فایل.

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

    برای (همه بلوک های محدوده) (
    min_distance = حداکثر فاصله;
    آر ij= image->CopyBlock(i,j);
    برای (همه بلوک های دامنه) ( // با چرخش و نگ.
    فعلی = مختصات فعلی تحولات؛
    D=image->CopyBlock(current);
    جریان_فاصله = R ij L2distance(D);
    if(current_dance< min_distance) {
    // اگر بهترین شانس بدتر باشد:
    حداقل_فاصله = فاصله_ فعلی;
    بهترین = فعلی;
    }
    ) //محدوده بعدی
    Save_Coefficients_to_file(best);
    ) //دامنه بعدی

    همانطور که از الگوریتم بالا مشاهده می شود، برای هر بلوک رتبه ای آن را با تمام بلوک های دامنه ممکن (از جمله آنهایی که دچار تبدیل تقارن شده اند) بررسی می کنیم، واریتی را با کوچکترین اندازه L پیدا می کنیم. 2 (کمترین انحراف معیار) و ضرایب این تبدیل را در یک فایل ذخیره کنید. ضرایب عبارتند از (1) مختصات بلوک یافت شده، (2) عددی از 0 تا 7 که تبدیل تقارن (چرخش، انعکاس بلوک) را مشخص می کند، و (3) تغییر در روشنایی برای این جفت بلوک. تغییر درخشندگی به صورت زیر محاسبه می شود:

    ,

    جایی که r ij- مقادیر پیکسل بلوک رتبه بندی ( آر)، آ د ij- مقادیر پیکسل بلوک دامنه ( D). در این مورد، اندازه گیری به صورت زیر در نظر گرفته می شود:

    .

    ما جذر L را محاسبه نمی کنیم 2 اندازه گیری کنید و آن را تقسیم نکنید nاز آنجایی که داده‌های تبدیل یکنواخت هستند و ما را از یافتن اکستریم باز نمی‌دارند، با این حال، می‌توانیم دو عملیات کمتر برای هر بلوک انجام دهیم.

    بیایید تعداد عملیاتی را که برای فشرده سازی یک تصویر نیاز داریم در مقیاس خاکستری 256 رنگ 512x512 پیکسل با اندازه بلوک 8 پیکسل محاسبه کنیم:

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

    نمودار الگوریتم رفع فشرده سازی تصویر

    رفع فشرده سازی الگوریتم فشرده سازی فراکتال بسیار ساده است. لازم است چندین تکرار از تبدیل های سه بعدی سه بعدی انجام شود که ضرایب آن در مرحله فشرده سازی به دست آمده است.

    مطلقاً هر تصویری (مثلاً کاملاً سیاه) را می توان به عنوان تصویر اولیه در نظر گرفت، زیرا دستگاه ریاضی مربوطه همگرایی توالی تصاویر بدست آمده در طول تکرارهای IFS را به یک تصویر ثابت (نزدیک به تصویر اصلی) تضمین می کند. معمولا 16 تکرار برای این کار کافی است.

    ضرایب تمام بلوک ها را از فایل بخوانید.
    بیایید ایجاد کنیم تصویر سیاهاندازه مناسب؛
    تا (تصویر ثابت نمی ماند)(
    برای (هر محدوده (R))(
    D=image->CopyBlock(D_coord_for_R);
    برای(هر پیکسل( من، ج) در بلوک (
    آر ij = 0.75 D ij + o R;
    ) //پیکسل بعدی
    ) //بلوک بعدی
    )//تا پایان

    از آنجایی که ما ضرایب بلوک ها را ثبت کردیم آر ij(که همانطور که تصریح کردیم در مورد خاص ما مربع هایی هم اندازه هستند) به طور متوالی، معلوم می شود که تصویر را با استفاده از یک تبدیل افین به طور متوالی توسط مربع های شبکه پارتیشن پر می کنیم.

    همانطور که می توان محاسبه کرد، تعداد عملیات در هر پیکسل تصویر خاکستری در طول بازیابی به طور غیرمعمول کم است (N عملیات "+"، 1 عملیات "*"، که در آن N تعداد تکرار است، یعنی 7-16). به همین دلیل، فشرده سازی تصویر برای الگوریتم فراکتال سریعتر از رفع فشرده سازی است، به عنوان مثال، برای الگوریتم JPEG، که در آن 64 "+" و 64 "؟ ” (به استثنای مراحل RLE و کدگذاری هافمن!). در همان زمان، برای الگوریتم فراکتال، ضرب با یک عدد گویا، یک برای هر بلوک اتفاق می‌افتد. این بدان معناست که ما می‌توانیم ابتدا از محاسبات منطقی اعداد صحیح استفاده کنیم که به طور قابل ملاحظه‌ای سریع‌تر از محاسبات ممیز شناور است. ثانیاً، ضرب یک بردار در عدد یک عملیات ساده‌تر و سریع‌تر است که اغلب در معماری پردازنده (پردازنده‌های SGI، Intel MMX...) تعبیه شده است، تا حاصل ضرب اسکالر دو بردار، که در مورد JPEG ضروری است. برای یک تصویر تمام رنگی، وضعیت از نظر کیفی تغییر نمی کند، زیرا هر دو الگوریتم از تبدیل به فضای رنگی دیگر استفاده می کنند.

    برآورد تلفات و راه های تنظیم آنها

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

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

    ویژگی های الگوریتم فراکتال :

    نسبت فشرده سازی: 2-2000 (تعریف شده توسط کاربر)

    کلاس تصویر:تصاویر تمام رنگی 24 بیتی یا خاکستری بدون تغییر رنگ واضح (عکس). مطلوب است که نواحی با اهمیت بیشتر (برای ادراک) متضاد تر و واضح تر و مناطق با اهمیت کمتر - کنتراست کم و تار باشند.

    تقارن: 100-100000

    مشخصات:می‌تواند آزادانه تصویر را در هنگام باز کردن زیپ مقیاس‌بندی کند و آن را 2 تا 4 برابر افزایش دهد، بدون اینکه «افکت راه پله» ظاهر شود. با افزایش سطح فشرده‌سازی، یک افکت بلوکی در مرز بلوک‌های تصویر ظاهر می‌شود.

    الگوریتم بازگشتی (موج).

    نام انگلیسی فشرده سازی بازگشتی موجک است. به روسی به عنوان فشرده سازی موج و به عنوان فشرده سازی با استفاده از انفجار ترجمه شده است. این نوع آرشیو از دیرباز شناخته شده است و مستقیماً از ایده استفاده از انسجام مناطق ناشی می شود. این الگوریتم بر روی تصاویر رنگی و سیاه و سفید با انتقال صاف متمرکز شده است. ایده آل برای عکس هایی مانند اشعه ایکس. نسبت تراکم تنظیم شده است و بین 5-100 متغیر است. هنگامی که سعی می کنید ضریب بالاتری را روی لبه های تیز تنظیم کنید، به خصوص آنهایی که به صورت مورب عبور می کنند، یک "اثر راه پله" ظاهر می شود - مراحل با روشنایی متفاوت در اندازه چندین پیکسل.

    ایده الگوریتم این است که ما تفاوت را در فایل ذخیره می کنیم - تعداد بین مقادیر متوسط ​​بلوک های همسایه در تصویر، که معمولاً مقادیر نزدیک به 0 را می گیرد.

    پس دو عدد آ 2منو آ 2من +1 همیشه می تواند به عنوان نشان داده شود ب 1 i=(آ 2من +آ 2من +1 )/2 و ب 2 من=(آ 2من -آ 2من +1 )/2. به طور مشابه دنباله آ منرا می توان به صورت جفت به یک دنباله ترجمه کرد ب 1.2 آی.

    بیایید به یک مثال خاص نگاه کنیم: بیایید یک رشته از مقادیر روشنایی 8 پیکسل را فشرده کنیم ( آ من): (220، 211، 212، 218، 217، 214، 210، 202). دنباله های زیر را دریافت خواهیم کرد ب 1 i، و ب 2 من: (215.5، 215، 215.5، 206) و (4.5، -3، 1.5، 4). توجه داشته باشید که مقادیر ب 2 منبه اندازه کافی نزدیک به 0. اجازه دهید عملیات را با در نظر گرفتن تکرار کنیم ب 1 iچگونه آ من. این عمل به صورت بازگشتی انجام می شود، از این رو نام الگوریتم است. ما از (215.5، 215، 215.5، 206): (215.25، 210.75) (0.25، 4.75) می گیریم. ضرایب به دست آمده را که به اعداد صحیح گرد کرده و فشرده شده اند، برای مثال با استفاده از الگوریتم هافمن با جداول ثابت، می توانیم در یک فایل قرار دهیم.

    توجه داشته باشید که ما فقط دو بار تبدیل خود را به زنجیره اعمال کردیم. در واقعیت، ما می توانیم تبدیل موجک را 4-6 بار اعمال کنیم. علاوه بر این، فشرده سازی اضافی را می توان با استفاده از جداول الگوریتم گام غیریکنواخت هافمن به دست آورد (یعنی باید کد هافمن را برای نزدیکترین مقدار در جدول ذخیره کنیم). این تکنیک ها به شما این امکان را می دهد که به نسبت تراکم قابل توجهی دست یابید.

    ورزش:ما زنجیره (215، 211) (0، 5) (5، -3، 2، 4) را از فایل بازیابی کردیم (به مثال مراجعه کنید). رشته‌ای از هشت مقدار روشنایی پیکسل بسازید که الگوریتم فشرده‌سازی موج دوباره ایجاد کند.

    الگوریتم داده های دو بعدی نیز به روشی مشابه پیاده سازی شده است. اگر مربع 4 نقطه با روشنایی داشته باشیم آ 2i، 2j,آ 2 i +1 , 2 j,آ 2i، 2j+1، و آ 2 i +1 , 2 j +1، آن

    اولیه B1 B2
    تصویر B3 B4

    با استفاده از این فرمول ها، برای یک تصویر 512x512 پیکسل، پس از اولین تبدیل، 4 ماتریس با اندازه 256x256 عنصر بدست می آوریم:

    -- اولین مورد، همانطور که ممکن است حدس بزنید، یک کپی کاهش یافته از تصویر را ذخیره می کند. در دوم - تفاوت میانگین جفت مقادیر پیکسل در امتداد افقی. در سوم - تفاوت میانگین جفت مقادیر پیکسل در امتداد عمودی. در چهارم - تفاوت میانگین در مقادیر پیکسل در امتداد مورب. با قیاس با حالت دو بعدی، می توانیم تبدیل خود را تکرار کنیم و به جای ماتریس اول، 4 ماتریس به اندازه 128x128 بدست آوریم. با تکرار تبدیل خود برای بار سوم، در نهایت به 4 ماتریس 64x64، 3 ماتریس 128x128 و 3 ماتریس 256x256 خواهیم رسید. در عمل، هنگام نوشتن روی یک فایل، مقادیر به دست آمده در خط آخر () معمولاً نادیده گرفته می‌شوند (فوراً افزایشی در حدود یک سوم اندازه فایل - 1- 1/4 - 1/16 - 1/64 بدست می‌آید. ...).

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

    بر خلاف JPEG و الگوریتم فراکتال، این روش با بلوک ها، به عنوان مثال، پیکسل های 8x8 عمل نمی کند. به طور دقیق تر، ما با بلوک های 2x2، 4x4، 8x8 و غیره کار می کنیم. با این حال، با توجه به این واقعیت که ما ضرایب این بلوک ها را به طور مستقل ذخیره می کنیم، می توانیم به راحتی از تقسیم تصویر به مربع های "موزاییک" جلوگیری کنیم.

    ویژگی های الگوریتم موج:

    نسبت فشرده سازی: 2-200 (تعریف شده توسط کاربر)

    کلاس تصویر:مانند فراکتال و JPEG.

    تقارن: ~1.5

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

    نتیجه

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

    الگوریتم ویژگی های تصویر که به دلیل آن فشرده سازی رخ می دهد
    RLE رنگهای یکسان متوالی: 2 2 2 2 2 2 15 15 15
    LZW رشته های فرعی مشابه: 2 3 15 40 2 3 15 40
    هافمن فرکانس رنگ های مختلف: 2 2 3 2 2 4 3 2 2 2 4
    CCITT-3 غلبه رنگ سفید در تصویر، مناطق بزرگ پر از یک رنگ
    بازگشتی انتقال رنگ صاف و بدون لبه های تیز
    JPEG بدون مرزهای واضح
    فراکتال شباهت بین عناصر تصویر
    الگوریتم فشرده سازی K-You تقارن در زمان برای چی
    جهت دار
    تلفات بعد، ابعاد، اندازه
    RLE 32, 2, 0.5 1 3.4 بیتی خیر 1D
    LZW 1000, 4, 5/7 1.2-3 1-8 بیت خیر 1D
    هافمن 8, 1.5, 1 1-1.5 8 بیت خیر 1D
    CCITT-3 213(3), 5, 0.25 ~1 1 بیتی خیر 1D
    JBIG 2-30 بار ~1 1 بیتی خیر 2 بعدی
    JPEG بدون اتلاف 2 بار ~1 خاکستری 24 بیتی خیر 2 بعدی
    JPEG 2-20 بار ~1 خاکستری 24 بیتی آره 2 بعدی
    فشرده سازی بازگشتی 2-200 بار 1.5 خاکستری 24 بیتی آره 2 بعدی
    فراکتال 2-2000 بار 1000-10000 خاکستری 24 بیتی آره 2.5 بعدی

    (تلفظ "japeg" توسط Joint Photographic Experts Group، پس از نام سازمان توسعه دهنده) یکی از فرمت های گرافیکی محبوبی است که برای ذخیره تصاویر عکاسی و تصاویر مشابه استفاده می شود. فایل‌های حاوی داده‌های JPEG معمولا دارای پسوندهای .jpeg، .jfif، .jpg، .JPG یا JPE. هستند. با این حال، از این میان، jpg. محبوب ترین پسوند در همه پلتفرم ها است.

    1. گروه مشترک کارشناسان عکاسی.

    2. یک روش فشرده سازی تصویر که توسط این گروه توسعه یافته و یک قالب گرافیکی مربوطه که معمولاً در WWW استفاده می شود. با فشرده بودن فایل ها و بر این اساس، انتقال سریع و همچنین "از دست دادن" کیفیت تصویر مشخص می شود. این عمدتا برای عکس ها استفاده می شود، زیرا از دست دادن کیفیت برای آنها کمتر مهم است. تنظیمات رنگ را در مدل رنگ RGB ذخیره می کند.

    JPEG(تلفظ شده " jpeg"، انگلیسی. گروه مشترک کارشناسان عکاسی، با نام سازمان توسعه دهنده) یکی از فرمت های گرافیکی محبوبی است که برای ذخیره تصاویر عکاسی و تصاویر مشابه استفاده می شود. فایل های حاوی داده های JPEG معمولا دارای پسوند هستند jpeg, .jfif, .jpg, .JPG، یا .jpe. با این حال، از این .jpgمحبوب ترین افزونه در تمام پلتفرم ها. نوع MIME تصویر/jpeg است.

    الگوریتم JPEG یک الگوریتم فشرده سازی داده با اتلاف است.

    منطقه برنامه

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

    از سوی دیگر، JPEG برای فشرده‌سازی نقاشی‌ها، متن و گرافیک نشانه‌ها کاربرد چندانی ندارد، جایی که کنتراست شدید بین پیکسل‌های مجاور منجر به مصنوعات قابل‌توجهی می‌شود. توصیه می شود چنین تصاویری را در فرمت های بدون اتلاف مانند TIFF، GIF، PNG یا RAW ذخیره کنید.

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

    JPEG نباید در مواردی استفاده شود که حتی حداقل تلفات غیرقابل قبول است، مانند فشرده سازی تصاویر نجومی یا پزشکی. در چنین مواردی، حالت فشرده سازی JPEG Lossless ارائه شده توسط استاندارد JPEG (که متاسفانه توسط اکثر کدک های معروف پشتیبانی نمی شود) یا استاندارد فشرده سازی JPEG-LS را می توان توصیه کرد.

    فشرده سازی

    هنگامی که فشرده می شود، تصویر از فضای رنگی RGB به YCbCr (YUV) تبدیل می شود. لازم به ذکر است که استاندارد JPEG (ISO / IEC 10918-1) انتخاب YCbCr را به هیچ وجه تنظیم نمی کند و به انواع دیگر تبدیل (به عنوان مثال، با تعدادی مؤلفه غیر از سه) و فشرده سازی بدون تبدیل اجازه می دهد. (مستقیماً به RGB)، با این حال، مشخصات JFIF (فرمت تبادل فایل JPEG، پیشنهاد شده در سال 1991 توسط C-Cube Microsystems، و در حال حاضر استاندارد واقعی) شامل استفاده از تبدیل RGB-> YCbCr است.

    پس از تبدیل RGB->YCbCr، برای کانال های تصویر Cb و Cr که مسئول رنگ هستند، می توان "decimation" (subsampling) را انجام داد، که شامل این واقعیت است که هر بلوک 4 پیکسل (2x2) از کانال روشنایی Y اختصاص داده می شود. مقادیر متوسط ​​Cb و Cr (طرح کاهش "4:2:0"). در همان زمان، برای هر بلوک 2x2، به جای 12 مقدار (4 Y، 4 Cb و 4 Cr)، تنها 6 مورد استفاده می شود (4 Y و هر یک Cb و Cr متوسط). اگر شرایط بالاتری برای کیفیت تصویر بازیابی شده پس از فشرده سازی وجود داشته باشد، نازک شدن را می توان فقط در یک جهت انجام داد - به صورت عمودی (طرح "4:4:0") یا افقی ("4:2:2")، یا انجام نشده است. اصلاً ("4:4:4").

    این استاندارد همچنین اجازه می دهد تا با میانگین Cb و Cr نه برای یک بلوک 2x2، بلکه برای چهار پیکسل متوالی (عمودی یا افقی)، یعنی برای بلوک های 1x4، 4x1 (طرح 4:1:1) و همچنین 2x4 و 4x2. همچنین می توان از انواع مختلفی از decimation برای Cb و Cr استفاده کرد، اما در عمل از چنین طرح هایی بسیار نادر استفاده می شود.

    علاوه بر این، مولفه روشنایی Y و اجزای مسئول رنگ Cb و Cr به بلوک های 8x8 پیکسل تقسیم می شوند. هر بلوک از این قبیل در معرض تبدیل کسینوس گسسته (DCT) قرار می گیرد. ضرایب DCT حاصل کوانتیزه می شوند (ماتریس های کوانتیزاسیون مختلف معمولاً برای Y، Cb و Cr استفاده می شوند) و با استفاده از کدهای هافمن بسته بندی می شوند. استاندارد JPEG همچنین امکان استفاده از کدگذاری حسابی بسیار کارآمدتر را می دهد، اما به دلیل محدودیت های ثبت اختراع (پتنت رمزگذار QM حسابی که در استاندارد JPEG توضیح داده شده متعلق به IBM است)، در عمل از آن استفاده نمی شود.

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

    هنگامی که یک تصویر را به عنوان یک فایل JPEG ذخیره می کنید، یک تنظیم کیفیت را در برخی واحدهای دلخواه تعیین می کنید، مانند 1 تا 100 یا 1 تا 10. عدد بزرگتر معمولاً به معنای کیفیت بهتر (و یک فایل فشرده بزرگتر) است. با این حال، حتی در صورت استفاده از بالاترین کیفیت (مرتبط با یک ماتریس کوانتیزاسیون متشکل از واحدها)، تصویر بازسازی شده دقیقاً مطابق با تصویر اصلی نخواهد بود، که هم با دقت محدود اجرای DCT و هم با نیاز به گرد کردن مقادیر مرتبط است. از Y، Cb، Cr و ضرایب DCT به نزدیکترین عدد صحیح. حالت فشرده‌سازی JPEG بدون اتلاف، که از DCT استفاده نمی‌کند، تطابق دقیقی بین تصاویر بازسازی‌شده و اصلی ارائه می‌کند، با این حال، راندمان پایین آن (نسبت فشرده‌سازی به ندرت از ۲ بیشتر می‌شود) و عدم پشتیبانی توسعه‌دهندگان نرم افزاربه محبوبیت Lossless JPEG کمکی نکرد.

    انواع طرح های فشرده سازی JPEG

    استاندارد JPEG دو راه اصلی برای نمایش داده های کدگذاری شده ارائه می دهد.

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

    در مورد JPEG پیشرونده، داده های فشرده شده به عنوان مجموعه ای از اسکن ها در جریان خروجی نوشته می شوند که هر کدام کل تصویر را با جزئیات بیشتر توصیف می کنند. این امر یا با ثبت مجموعه کاملی از ضرایب DCT، بلکه فقط برخی از آنها در هر اسکن به دست می‌آید: اول - فرکانس پایین، در اسکن‌های بعدی - فرکانس بالا (روش انتخاب طیفی، به عنوان مثال، نمونه‌های طیفی)، یا با استفاده متوالی. از اسکن به اسکن، اصلاح ضرایب DCT (روش "تقریبا متوالی"، یعنی تقریب های متوالی). این نمایش تدریجی داده ها به ویژه هنگام انتقال تصاویر فشرده با استفاده از کانال های ارتباطی کم سرعت مفید است، زیرا به شما امکان می دهد پس از انتقال بخش کوچکی از فایل JPEG، نمای کل تصویر را دریافت کنید.

    هر دو طرح توصیف شده (هم ترتیبی و هم پیش رونده JPEG) بر اساس DCT هستند و اساساً اجازه به دست آوردن یک تصویر بازسازی شده کاملاً یکسان با تصویر اصلی را نمی دهند. با این حال، این استاندارد همچنین فشرده‌سازی را مجاز می‌کند که از DCT استفاده نمی‌کند، بلکه بر اساس یک پیش‌بینی‌کننده خطی ساخته شده است (بدون تلفات، به‌عنوان «بی ضرر»، JPEG)، که تطابق کامل و بیت به بیت را بین نسخه اصلی و بیت تضمین می‌کند. تصاویر بازیابی شده در عین حال، نسبت فشرده سازی برای تصاویر عکاسی به ندرت به 2 می رسد، اما عدم تضمین اعوجاج در برخی موارد مورد تقاضا است. نسبت‌های فشرده‌سازی بسیار بالاتری را می‌توان با استفاده از روش فشرده‌سازی JPEG-LS که توسط ISO/IEC 14495-1 توصیف شده است، بدست آورد، که با وجود شباهت در نام‌ها، ارتباط مستقیمی با JPEG ISO/IEC 10918-1 ندارد (توصیه ITU T.81 ) استاندارد (توصیه ITU T.87).

    نحو و ساختار فرمت JPEG

    فایل JPEG شامل دنباله است نشانگرهاکه هر کدام با یک بایت 0xFF شروع می شود که نشانگر شروع نشانگر و یک بایت شناسه است. برخی از نشانگرها فقط از این جفت بایت تشکیل شده اند، در حالی که برخی دیگر حاوی داده های اضافی متشکل از یک فیلد دو بایتی با طول بخش اطلاعات نشانگر (شامل طول این فیلد، منهای دو بایت ابتدای نشانگر هستند. ، یعنی 0xFF و شناسه) و خود داده ها.

    نشانگرهای اصلی JPEG
    نشانگر بایت ها طول هدف