JPEG

З Вікіпедыі, свабоднай энцыклапедыі
Выява лагатыпа
Пашырэнне .jpg, .jpeg, .JPG, .JPEG, .jpe або .JPE
Тып фармату растравая графіка: фатаграфія і скрыншоты

JPEG (вымаўляецца «джейпег»[1], англ.: Joint Photographic Experts Group, па назве арганізацыі-распрацоўніка) — адзін з папулярных растравых графічных фарматаў, які ўжываецца для захоўвання фотавыяў і падобных ім відарысаў. Файлы, якія змяшчаюць даныя JPEG, звычайна маюць пашырэння (суфіксы) .jpg, .jfif, .jpe або .jpeg. Аднак з іх .jpg з’яўляецца самым папулярным на ўсіх платформах. MIME-тыпам з’яўляецца image/jpeg.

Фатаграфія заходу ў фармаце JPEG з памяншэннем ступені сціску злева направа

Алгарытм JPEG дазваляе сціскаць відарыс як са стратамі, так і без страт (рэжым lossless сціску JPEG). Падтрымліваюцца відарысы з лінейным памерам не больш за 65535 × 65535 пікселяў.

У 2010 годзе, з мэтай захавання для нашчадкаў інфармацыі аб папулярных у пачатку XXI стагоддзя лічбавых фарматах, навукоўцы з праекту PLANETS заклалі інструкцыі па чытанні фармату JPEG у спецыяльную капсулу, якую змясцілі ў спецыяльнае сховішча ў швейцарскіх Альпах[2][3].

Вобласць прымянення[правіць | правіць зыходнік]

Алгарытм JPEG ў найбольшай ступені прыдатны для сціску фатаграфій і відарысаў, якія змяшчаюць рэалістычныя сцэны з плаўнымі пераходамі яркасці і колеру. Найбольшае распаўсюджванне JPEG атрымаў у лічбавай фатаграфіі і для захоўвання і перадачы відарысаў з выкарыстаннем сеткі Інтэрнэт.

Фармат JPEG ў рэжыме сціску са стратамі малапрыдатны для сціску чарцяжоў, тэкставай і знакавай графікі, дзе рэзкі кантраст паміж суседнімі пікселямі прыводзіць да з’яўленню прыкметных артэфактаў. Такія выявы мэтазгодна захоўваць у фарматах без страт, такіх як JPEG-LS, TIFF, GIF, PNG або выкарыстоўваць рэжым Lossless сціску JPEG.

JPEG (як і іншыя фарматы сціску са стратамі) не падыходзіць для сціску відарысаў пры шматэтапнай апрацоўцы, так як скажэнні ў відарысе будуць уносіцца кожны раз пры захаванні прамежкавых вынікаў апрацоўкі.

JPEG не павінен выкарыстоўвацца і ў тых выпадках, калі недапушчальны нават мінімальныя страты, напрыклад, пры сціску астранамічных або медыцынскіх выяў. У такіх выпадках можа быць рэкамендаваны прадугледжаны стандартам JPEG рэжым Lossless сціску JPEG (які, аднак, не падтрымліваецца большасцю папулярных кодэкаў) або стандарт сціску JPEG-LS.

Сціск[правіць | правіць зыходнік]

Пры сціску відарыс пераўтворыцца з каляровай прасторы RGB у YCbCr. Варта адзначыць, што стандарт JPEG (ISO/IEC 10918-1) ніяк не рэгламентуе выбар менавіта YCbCr, дапускаючы і іншыя віды пераўтварэння (напрыклад, з лікам кампанентаў[4], выдатным ад трох), і сціск без пераўтварэння (непасрэдна ў RGB), аднак спецыфікацыя JFIF (JPEG File Interchange Format, прапанаваная ў 1991 годзе спецыялістамі кампаніі C-Cube Microsystems, і якая стала ў цяперашні час стандартам дэ-факта) прадугледжвае выкарыстанне пераўтварэнні RGB->YCbCr.

Пасля пераўтварэнні RGB->YCbCr для каналаў відарыса Cb і Cr, якія адказваюць за колер, можа выконвацца «прарэджванне» (subsampling[5]), якое заключаецца ў тым, што кожнаму блоку з 4 кропак (2х2) яркаснага канала Y ставяцца ў адпаведнасць усярэдненыя значэнні Cb і Cr (схема прарэджвання «4:2:0»[6]). Пры гэтым для кожнага блока 2х2 замест 12 значэнняў (4 Y, 4 Cb і Cr 4) выкарыстоўваецца ўсяго 6 (4 Y і па адным з сярэднім Cb і Cr). Калі да якасці адноўленага пасля сціску відарыса прад’яўляюцца павышаныя патрабаванні, прарэджванне можа выконвацца толькі ў нейкім адным кірунку — па вертыкалі (схема «4:4:0») або па гарызанталі («4:2:2»), ці не выконвацца зусім («4:4:4»).

Стандарт дапускае таксама прарэджванне з усярэдненасцю Cb і Cr не для блока 2х2, а для чатырох размешчаных паслядоўна (па вертыкалі або па гарызанталі) кропак, то ёсць для блокаў 1х4, 4х1 (схема «4:1:1»), а таксама 2х4 і 4х2 (схема «4:1:0»). Дапускаецца таксама выкарыстанне розных тыпаў прарэджвання для Cb і Cr, але на практыцы такія схемы прымяняюцца выключна рэдка.

Далей яркасны кампанент Y і кампаненты Cb і Cr, якія адказваюць за колер, разбіваюцца на блокі 8х8 кропак. Кожны такі блок падвяргаецца дыскрэтнаму касінуснаму пераўтварэнню (ДКП). Атрыманыя каэфіцыенты ДКП квантуюцца (для Y, Cb і Cr у агульным выпадку выкарыстоўваюцца розныя матрыцы квантавання) і пакуются з выкарыстаннем кадзіравання серый і кодаў Хафмана. Стандарт JPEG дапускае таксама выкарыстанне значна больш эфектыўнага арыфметычнага кадзіравання, аднак з-за патэнтавых абмежаванняў (патэнт на апісаны ў стандарце JPEG арыфметычны QM-кодэр належыць IBM) на практыцы яно выкарыстоўваецца рэдка. У папулярную бібліятэку libjpeg апошніх версій уключана падтрымка арыфметычнага кадзіравання, але з праглядам сціснутых з выкарыстаннем гэтага метаду відарысаў могуць узнікнуць праблемы, паколькі многія праграмы прагляду не падтрымліваюць іх дэкадзіраванне.

Матрыцы, якія выкарыстоўваюцца для квантавання каэфіцыентаў ДКП, захоўваюцца ў загаловачнай частцы JPEG-файлаў. Звычайна яны будуюцца так, што высокачастотныя каэфіцыенты падвяргаюцца больш моцнаму квантаванню, чым нізкачастотныя. Гэта прыводзіць да агрубленння дробных дэталяў на відарысе. Чым вышэй ступень сціску, тым больш моцнаму квантаванню падвяргаюцца ўсе каэфіцыенты.

Пры захаванні відарыса ў фармаце JPEG-файла ўказваецца параметр якасці, які задаюць у некаторых умоўных адзінках, напрыклад, ад 1 да 100 альбо ад 1 да 10. Большая колькасць звычайна адпавядае лепшай якасці (і большаму памеру сціснутага файла). Аднак нават пры выкарыстанні найвышэйшай якасці (адпаведна матрыцы квантавання, якая складаецца з адных толькі адзінак) адноўлены відарыс не будзе ў дакладнасці супадаць з зыходным, што звязана як з канчатковай дакладнасцю выканання ДКП, так і з неабходнасцю акруглення значэнняў Y, Cb, Cr і каэфіцыентаў ДКП да бліжэйшага цэлага. Рэжым Lossless сціску JPEG, які не выкарыстоўвае ДКП, забяспечвае дакладнае супадзенне адноўленага і зыходнага відарысаў, аднак яго малая эфектыўнасць (каэфіцыент сціску рэдка перавышае 2) і адсутнасць падтрымкі з боку распрацоўшчыкаў праграмнага забеспячэння не спрыялі папулярнасці Lossless JPEG.

Разнавіднасці схем сціску JPEG[правіць | правіць зыходнік]

Стандарт JPEG прадугледжвае два асноўных спосабу прадстаўлення кадаваных дадзеных.

Найбольш распаўсюджаным, падтрыманага большасцю даступных кадэкаў, з’яўляецца паслядоўнае (sequential JPEG) прадстаўленне дадзеных, якое прадугледжвае паслядоўны абыход кадуемай выявы разраднасцю 8 біт на кампаненту (або 8 біт на піксель для чорна-белых паўтонавых малюнкаў) паблочно злева направа, зверху ўніз. Над кожным кадуемым блокам выявы ажыццяўляюцца апісаныя вышэй аперацыі, а вынікі кадавання змяшчаюцца ў выходны струмень у выглядзе адзінага «скана», то ёсць масіва кадаваць дадзеных, адпаведнага паслядоўна пройдзеным («прасканаванай») выяве. Асноўны або «базавы» (baseline) рэжым кадавання дапускае толькі такое ўяўленне (і хаффмановское кадаваньне квантованных каэфіцыентаў ДКП). Пашыраны (extended) рэжым разам з паслядоўным дапускае таксама прагрэсіўнае (progressive JPEG) прадстаўленне дадзеных, кадаванне выяў разраднасцю 12 біт на кампаненту/піксель (сціск такіх выяў спецыфікацыяй JFIF не падтрымліваецца) і арыфметычнае кадаванне квантованных каэфіцыентаў ДКП.

У выпадку progressive JPEG сціснутыя дадзеныя запісваюцца ў выходны струмень у выглядзе набору сканаў, кожны з якіх апісвае выяву цалкам з усё большай ступенню дэталізацыі. Гэта дасягаецца альбо шляхам запісу ў кожны скан не поўнага набору каэфіцыентаў ДКП, а толькі нейкай іх часткі: спачатку — нізкачастотных, у наступных сканах — высокастотных (метад «spectral selection» тое ёсць спектральных выбарак), альбо шляхам паслядоўнага, ад скана да скану, удакладнення каэфіцыентаў ДКП (метад «successive approximation», то ёсць паслядоўных набліжэнняў). Такое прагрэсіўнае ўяўленне дадзеных аказваецца асабліва карысным пры перадачы сціснутых малюнкаў з выкарыстаннем нізкахуткасных каналаў сувязі, паколькі дазваляе атрымаць уяўленне пра ўсю выяву ўжо пасля перадачы нязначнай часткі JPEG-файлаў.

Абедзве апісаныя схемы (і sequential, і progressive JPEG) грунтуюцца на ДКП і прынцыпова не дазваляюць атрымаць адноўленую выяву абсалютна ідэнтычнай зыходнай. Аднак стандарт дапускае таксама сціск, не якое выкарыстоўвае ДКП, а пабудаванае на аснове лінейнага прадказальніка (lossless, гэта значыць «без страт», JPEG), якое гарантуе поўнае, біт-у-біт, супадзенне зыходнага і адноўленага малюнкаў. Пры гэтым каэфіцыент сціску для фатаграфічных выяў рэдка дасягае 2, але гарантаванае адсутнасць скажэнняў у некаторых выпадках аказваецца запатрабаваным. Прыкметна вялікія ступені сціску могуць быць атрыманы пры выкарыстанні не мае, нягледзячы на падабенства ў назвах, непасрэднага дачынення да стандарце JPEG ISO/IEC 10918-1 (ITU T. 81 Recommendation) метаду сціску JPEG-LS, апісванага стандартам ISO/IEC 14495-1 (ITU T. 87 Recommendation).

Сінтаксіс і структура[правіць | правіць зыходнік]

Файл JPEG змяшчае паслядоўнасць маркераў, кожны з якіх пачынаецца з байтаў 0xFF, які сведчыць аб пачатку маркера, і байта-ідэнтыфікатара. Некаторыя маркеры складаюцца толькі з гэтай пары байтаў, іншыя ж ўтрымліваюць дадатковыя дадзеныя, якія складаюцца з двухбайтового поля з даўжынёй інфармацыйнай частцы маркера (уключаючы даўжыню гэтага поля, але за вылікам двух байтаў пачатку маркера, то ёсць 0xFF і ідэнтыфікатара) і ўласна дадзеных. Такая структура файла дазваляе хутка адшукаць маркер з неабходнымі дадзенымі (напрыклад, з даўжыней радка, лікам радкоў і лікам каляровых кампанентаў сціснутай выявы).

Асноўныя маркеры JPEG[7]
Маркер Байты Даўжыня Прызначэнне Каментары
SOI 0xFFD8 няма Пачатак выявы
SOF0 0xFFC0 пераменны памер Пачатак фрэйма (базавы, ДКП) Паказвае, што выява кадавалася ў базавым рэжыме з выкарыстаннем ДКП і кода Хафман. Маркер змяшчае лік радкоў і даўжыню радка выявы (двухбайтавыя паля са зрушэннем адпаведна 5 і 7 адносна пачатку маркера), колькасць кампанентаў (байтавая поле са зрушэннем 9 адносна пачатку маркера), лік біт на кампанент — строга 8 (байтавая поле са зрушэннем 4 адносна пачатку маркера), а таксама суадносіны кампанентаў (напрыклад, 4:2:0).
SOF1 0xFFC1 пераменны памер Пачатак фрэйма (пашыраны, ДКП, код Хафман) Паказвае, што выява кадавалася ў пашыраным (extended) рэжыме з выкарыстаннем ДКП і кода Хафман. Маркер змяшчае лік радкоў і даўжыню радка выявы, колькасць кампанентаў, лік біт на кампанент (8 або 12), а таксама суадносіны кампанентаў (напрыклад, 4:2:0).
SOF2 0xFFC2 пераменны памер Пачатак фрэйма (прагрэсіўны, ДКП, код Хафман) Паказвае, што выява кадавалася ў прагрэсіўным рэжыме з выкарыстаннем ДКП і кода Хафман. Маркер змяшчае лік радкоў і даўжыню радка малюнка, колькасць кампанентаў, лік біт на кампанент (8 або 12), а таксама суадносіны кампанентаў (напрыклад, 4:2:0).
DHT 0xFFC4 пераменны памер Ўтрымлівае табліцы Хафман Задае адну або больш табліц Хафман.
DQT 0xFFDB пераменны памер Ўтрымлівае табліцы квантавання Задае адну або больш табліц квантавання.
DRI 0xFFDD 4 байта Паказвае даўжыню рэстарт-інтэрвалу Задае інтэрвал паміж маркерамі RST n у макроблоках. Пры адсутнасці DRI з’яўленне ў патоку кадаваць дадзеных маркераў RSTn недапушчальна і лічыцца памылкай. Калі пры кадаванні маркеры RST n не прымяняюцца, маркер DRI альбо не выкарыстоўваецца зусім, альбо інтэрвал паўтораў у ім паказваецца роўным 0.
SOS 0xFFDA пераменны памер Пачатак сканавання Пачатак першага або чарговага скана выявы з напрамкам абходу злева направа зверху ўніз. Калі выкарыстоўваўся базавы рэжым кадавання, выкарыстоўваецца адзін скан. Пры выкарыстанні прагрэсіўных рэжымаў выкарыстоўваецца некалькі сканов. Маркер SOS з’яўляецца раздзяляюць паміж інфарматыўнай (загалоўкам) і закадаванай (уласна сціснутымі дадзенымі) часткамі выявы.
RSTn 0xFFDn няма Перазапуск Маркеры перазапуску выкарыстоўваюцца для сегментаванне кадаваць энтропийным кодером дадзеных. У кожным сегменце дэкадуе дадзеныя незалежна, што дазваляе распараллелить працэдуру дэкадавання. Пры пашкоджанні кадаваць дадзеных у працэсе перадачы або захоўвання JPEG-файла выкарыстанне маркераў перазапуску дазваляе абмежаваць страты (макроблоки з непашкоджаных сегментаў будуць адноўлены правільна). Ўстаўляецца ў кожным r-м макроблоке, дзе r — інтэрвал перазапуску DRI маркера. Не выкарыстоўваецца пры адсутнасці DRI маркера. n, малодшыя 3 біта маркера кода, цыклы ад 0 да 7.
APPn 0xFFEn пераменны памер Задаецца дадаткам Напрыклад, у EXIF JPEG-файла выкарыстоўваецца маркер APP1 для захоўвання метададзеных, размешчаных у структуры, заснаванай на TIFF.
COM 0xFFFE пераменны памер Каментар Змяшчае тэкст каментара.
EOI 0xFFD9 няма Канец закадаванай часткі выявы.

Вартасці і недахопы[правіць | правіць зыходнік]

Да недахопаў сціску па стандарце JPEG варта аднесці з’яўленне на адноўленых выявах пры высокіх ступенях сціску характэрных артэфактаў: малюнак рассыпаецца на блокі памерам 8x8 пікселяў (гэты эфект асабліва прыкметны на ўчасках выявы з плыўнымі зменамі яркасці), у ўчастках з высокай прасторавай частатой (напрыклад, на кантрасных контурах і межах малюнка) узнікаюць артэфакты ў выглядзе шумавых арэолаў. Варта адзначыць, што стандарт JPEG (ISO/IEC 10918-1, Annex K, п. K. 8) прадугледжвае выкарыстанне спецыяльных фільтраў для падаўлення блокавых артэфактаў, але на практыцы падобныя фільтры, нягледзячы на іх высокую эфектыўнасць, практычна не выкарыстоўваюцца. Аднак, нягледзячы на недахопы, JPEG атрымаў вельмі шырокае распаўсюджванне з-за дастаткова высокай (адносна існавалі ў час яго з’яўлення альтэрнатыў) ступені сціску, падтрымцы сціску поўнакаляровых выяў і адносна невысокай вылічальнай складанасці.

Прадукцыйнасць сціску па стандарце JPEG[правіць | правіць зыходнік]

Для паскарэння працэсу сціску па стандарце JPEG традыцыйна выкарыстоўваецца распаралельванне вылічэнняў, у прыватнасці — пры вылічэнні ДКП. Гістарычна адна з першых спроб паскорыць працэс сціску з выкарыстаннем такога падыходу апісана ў апублікаванай у 1993 годзе артыкуле Каспяровіча і Бабкіна[8], у якой прапаноўвалася арыгінальная апраксімацыя ДКП, якая робіць магчымым эфектыўнае распаралельванне вылічэнняў з выкарыстаннем 32-разрадных рэгістраў агульнага прызначэння працэсараў Intel 80386. Якія з’явіліся пазней больш прадукцыйныя вылічальныя схемы выкарыстоўвалі SIMD-пашырэння набору інструкцый працэсараў архітэктуры x86. Значна лепшых вынікаў дазваляюць дамагчыся схемы, якія выкарыстоўваюць вылічальныя магчымасці графічных паскаральнікаў (тэхналогіі NVIDIA CUDA і AMD FireStream) для арганізацыі паралельных вылічэнняў не толькі ДКП, але і іншых этапаў сціску JPEG (пераўтварэнне каляровых прастор, run-level, статыстычнае кадаваньне і да т. п.), прычым для кожнага блока 8х8 кадуемай або дэкадуемай выявы. У артыкуле[9] была прадстаўлена рэалізацыя распаралельвання ўсіх стадый алгарытму JPEG па тэхналогіі CUDA, што значна паскорыла прадукцыйнасць сціску і дэкадаванні па стандарце JPEG.

Гл. таксама[правіць | правіць зыходнік]

Зноскі

  1. Oxford Dictionary Архівавана 11 лістапада 2014.
  2. Emma Woollacott. Digital ark aims to preserve dead data formats (англ.)(недаступная спасылка). TG Daily (21 мая 2010). Архівавана з першакрыніцы 6 чэрвеня 2017. Праверана 1 верасня 2016.(англ.) . TG Daily (2010-05-21). Праверана 1 верасня 2016.
  3. Учёные законсервировали для потомков форматы JPEG и PDF(недаступная спасылка). «Руформатор». Финам (21 мая 2010). Архівавана з першакрыніцы 23 лютага 2014. Праверана 1 верасня 2016.
  4. В соответствии с ГОСТ 34.003-90 в области информационных технологий данный термин имеет мужской род
  5. ISO/IEC 10918-1 : 1993(E) p.28. Архівавана з першакрыніцы 22 жніўня 2011.
  6. Kerr, Douglas A. «Chrominance Subsampling in Digital Images»
  7. ISO/IEC 10918-1 : 1993(E) p.36. Архівавана з першакрыніцы 22 жніўня 2011.
  8. Kasperovich, L.V., Babkin, V.F. «Fast discrete cosine transform approximation for JPEG image compression»
  9. «Использование технологии CUDA для быстрого сжатия изображений по алгоритму JPEG»

Спасылкі[правіць | правіць зыходнік]