JPEG. Sıxılma alqoritmi

Yenidən salam! 2019-cu ilin mayında yazılmış bu məqaləni tapdım. Bu, WAVE və JPEG haqqında məqalələr silsiləsinin davamıdır. Budur birinci. Bu nəşr görüntü kodlaşdırma alqoritmi və formatın özü haqqında məlumatı təqdim edəcək.

Bir az tarix

Vikipediya tərəfindən bir qaşıq məlumat:

JPEG (Birgə Fotoqrafiya Mütəxəssisləri Qrupu) - fotoşəkillərin və bənzər görüntülərin saxlanması üçün istifadə olunan məşhur raster qrafik formatlarından biridir.

Bu standart 1991-ci ildə şəkillərin səmərəli sıxılması üçün Fotoqrafiya üzrə Birgə Mütəxəssislər Qrupu tərəfindən hazırlanmışdır.

Görüntülər raw formada JPEG-ə necə keçir

Bəziləri JPEG şəkillərinin köhnəlmiş Haffman sıxılması xammal məlumatları olduğunu düşünür, lakin bu doğru deyil. Nəzarətli sıxılmadan əvvəl məlumat uzun bir prosesdən keçir.

İlk olaraq rəng modeli RGB-dən YCbCr-ə dəyişdirilir. Bunun üçün xüsusi bir alqoritm də var - burada. Y dəyəri dəyişmir, çünki bu, parlaqlıq üçün cavabdehdir və onun dəyişməsi müşahidə olunacaq.

Görüntü ilə edilən ilk iş - «nümunələşdirmə» (subsampling). Bu asandır: 2x2 piksel massivi götürülür, sonra Cb və Cr - bu 4 pikselin YCbCr komponentlərinin orta dəyərləri götürülür. Və beləcə, 6 bayt qazanmışıq, 4 Y, 4 Cb, 4 Cr əvəzinə 4 Y və hər biri üçün eyni olan Cb və Cr əldə edirik (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). Hətta 2×2 ölçüsündə itki ilə 2:1 sıxılma təsirli görünür. Bu, bütün görüntüyə tətbiq olunur. Beləcə - ölçünün yarısını itirdik. Və bu tərz, rəng hiss etməyimiz sayəsində mümkündür. İnsan parlaqlıq fərqini asanlıqla görə bilər, lakin eyni rəngdəki kiçik piksel blokunda bu fərqi hiss etmir. Həmçinin, nümunələşdirmə, 4 pikselin üfüqi və şaquli şəkildə işlənməsi ilə də həyata keçirilə bilər. Birinci variant daha çox istifadə olunur. Əgər görüntü keyfiyyəti vacibdirsə, nümunələşdirmə tamamilə həyata keçirilməmişdir.
Nümunələşdirmənin aydın təsviri (Habr gif daxil etməyə icazə vermədi) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Hazırlığın əsas hissəsi

DCT

İndi ən çətin və zəruri hissəyə gəlirik. Bütün şəkil 8x8 bloklarına bölünür (blokin tərəfinə nisbətən resolution uyğun gəlmədiyi halda doldurma istifadə edilir).

İndi hər bir blok üçün DCT (Diskret Kosinüs Transformasiyası)tətbiq olunur. Bu hissədə görüntüdən bütün lazımsız hissələr çıxarılır. DCT istifadə edərək, bu blokun (8x8) görüntünün hansısa monotona bir hissəsini: göy, divarlar və ya mürəkkəb bir struktur (saç, simvollar və s.) olduğunu başa düşmək lazımdır. Lojiqdir ki, 64 oxşar rəngli piksel yalnız 1-i ilə təsvir edilə bilər, çünki blokun ölçüsü artıq məlumdur. Bax, sığdırma: 64-ü 1-ə.

DCP bir blokdan spektr çıxarır və orada göstəricilər kəskin dəyişdiyində, əmsal müsbət olur, və keçid nə qədər kəskin olsa, nəticə o qədər yüksək olacaq. Əmsalın daha yüksək olduğu yerlərdə, şəkildədə rəng və parıltıda aydın keçidlər təsvir olunub, aşağı olduğu yerlərdə isə zəif (yumşaq) komponentlərin YCbCr-də dəyişməsi görünür.

Kvantizasiya

Burada sıxılma parametrləri tətbiq olunur. Hər bir əmsal 8×8 matrisində müəyyən bir ədədi bölünür. Əgər bütün dəyişikliklərdən sonra görüntü keyfiyyətini daha artıra bilməyəcəksinizsə, onda bölücü bir olmalıdır. Əgər bu fotografiya tərəfindən tutduğunuz yaddaş daha vacibdirsə, onda bölücü 1-dən böyük olacaq və nəticələr yuvarlaqlaşdırılacaq. Beləliklə, yuvarlaqlaşdırmadan sonra çoxlu sıfırlar hasil olur.

Kvantizasiya daha çox sıxılma imkanı yaratmaq üçün edilir. Bu, y = sin(x) qrafikinin kvantizasiyası nümunəsində necə görünür:

JPEG. Sıxılma alqoritmi

Sıxılma

Əvvəlcə matris üzrə zigzag şəkildə keçirirk:

JPEG. Sıxılma alqoritmi

Biz bir ölçülü ədəd massivini alırıq. Orada çoxlu sıfırlar var, onları aradan qaldıra bilərik. Bunu etmək üçün sıfırla dolu ardıcıllığın yerinə bir sıfır yazırıq və ardından ardıcıllıqda onların sayı göstərilir. Beləliklə, bütün massiv ölçüsü 1/3-ə qədər azaldıla bilər. Sonra bu massivi Huffman üsulu ilə sıxırıq və artıq fayla daxil edirik.

Harada istifadə olunur

Hər yerdə. PNG kimi, JPEG fotoaparatlar, əməliyyat sistemlərində (şirkət loqotipləri, tətbiq ikonları, thumbnail-lar kimi) və şəkilləri effektiv saxlamağa ehtiyac olan bütün sahələrdə istifadə olunur.

Çıktı

Hazırda JPEG haqqında biliklər yalnız təhsil məqsədlidir, çünki o artıq hər yerdə mövcuddur və böyük qruplar tərəfindən optimallaşdırılıb, lakin elm daşından hələ də çox dadlıdır.

Mənbələr

Wikipedia-da YCbCr haqqında məqalə
Wikipedia-da JPEG haqqında məqalə
Pikabu-dan DCP haqqında bir az
Wikipedia-da DCP haqqında məqalə

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster