JPEG. Sıxılma alqoritmi

Birdaha salam! Bu məqaləni 2019-cu ilin may ayında yenidən yazılmış tapdım. Bu, WAVE və JPEG haqqında bir sıra məqalələrin davamıdır, burada ilk. Bu nəşrə təsvirin kodlaşdırılması alqoritmi və bütövlükdə formatın özü haqqında məlumat daxil olacaq.

Bir çimdik tarix

Bir qaşıq Vikipediya məqaləsi:

JPEG (Joint Photographic Experts Group) fotoşəkilləri və oxşar şəkilləri saxlamaq üçün istifadə edilən məşhur rastr qrafika formatlarından biridir.

Bu standart şəkilin effektiv sıxılması üçün 1991-ci ildə Birgə Fotoqrafik Ekspertlər Qrupu tərəfindən hazırlanmışdır.

Şəkillər xamdan JPEG-ə necə keçir?

Bəzi insanlar JPEG şəkillərinin Huffman metodu ilə sıxılmış xam məlumat olduğunu düşünür, lakin bu doğru deyil. Nəzarət sıxılmadan əvvəl məlumatlar uzun bir yol qət edir.

Əvvəlcə rəng modeli RGB-dən YCbCr-ə dəyişdirilir. Bunun üçün hətta xüsusi bir alqoritm də var - burada. Y toxunulmur, çünki parlaqlıqdan məsuldur və onun dəyişməsi nəzərə çarpacaq.

Şəkil ilə ediləcək ilk şey "nazikləşmə" (alt seçmə). Bunu başa düşmək asandır: 2x2 piksel massivi alınır, sonra Cb və Cr götürülür - bu 4 pikselin YCbCr komponentlərinin hər birinin orta dəyərləri. Belə ki, 6 bayt qazandıq, 4 Y, 4 Cb, 4 Cr əvəzinə 4 Y və hər biri üçün eyni Cb və Cr aldıq (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). Hətta 2x2 miqyasda 2:1 sıxılma nisbəti ilə itkili sıxılma möhkəm səslənir. Bu, bütün təsvirə aiddir. Və beləliklə - onlar yarım ölçüdə düşdülər. Və biz rəng qavrayışımız sayəsində bu texnikadan istifadə edə bilərik. Bir insan, kiçik bir piksel bloku üzərində orta hesabla götürülərsə, parlaqlıqdakı fərqi asanlıqla fərq edər, lakin rəngdə deyil. İncəlmə, üfüqi və şaquli olaraq 4 piksel olmaqla bir xəttdə də edilə bilər. Birinci seçim daha tez-tez istifadə olunur. Şəkil keyfiyyəti vacibdirsə, decimasiya ümumiyyətlə həyata keçirilmir.
İncəlmənin vizual təsviri (Habr mənə gif daxil etməyə icazə vermədi) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

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

Dkp

İndi ən çətin və ən zəruri hissə gəlir. Bütün şəkil 8x8 bloklara bölünür (əgər rezolyusiya blok tərəfinin qatından çox deyilsə, doldurma istifadə olunur).

İndi hər bloka müraciət edin DCT (Discrete Cosine Transform). Bu hissədə lazımsız hər şey şəkildən çıxarılır. DCT-dən istifadə edərək, verilmiş blokun (8×8) təsvirin hər hansı monoton hissəsini təsvir edib-etmədiyini başa düşməlisiniz: səma, divar; ya da mürəkkəb strukturu (saç, simvol və s.) ehtiva edir. Oxşar rəngli 64 pikseli yalnız 1 ilə təsvir etmək məntiqlidir, çünki blokun ölçüsü artıq məlumdur. Sıxılma üçün çox şey: 64-ə 1.

DCT bloku bir spektrə çevirir və oxunuşların kəskin şəkildə dəyişdiyi yerdə əmsal müsbət olur və keçid nə qədər kəskin olarsa, çıxış bir o qədər yüksək olacaqdır. Əmsalın daha yüksək olduğu yerdə, şəkil rəng və parlaqlıqda aydın keçidləri, daha aşağı olduğu yerlərdə - blokdakı YCbCr komponentlərinin dəyərlərində zəif (hamar) dəyişiklikləri göstərir.

Kvantlaşdırma

Sıxılma parametrləri artıq burada tətbiq olunub. 8x8 matrislərin hər birindəki əmsalların hər biri müəyyən bir ədədə bölünür. Bütün modifikasiyalardan sonra görüntü keyfiyyətini azaltmayacaqsan, onda bölücü bir olmalıdır. Bu fotoşəkilin tutduğu yaddaş sizin üçün daha vacibdirsə, bölən 1-dən böyük olacaq və hissə yuvarlaqlaşdırılacaq. Belə çıxır ki, yuvarlaqlaşdırdıqdan sonra çoxlu sıfırlarla nəticələnirsiniz.

Kvantlaşdırma daha böyük sıxılma imkanı yaratmaq üçün edilir. y = sin(x) qrafikinin kvantlaşdırılması nümunəsindən istifadə etməklə belə görünür:

JPEG. Sıxılma alqoritmi

Sıxılma

Əvvəlcə matrisi ziq-zaq şəklində keçirik:

JPEG. Sıxılma alqoritmi

Rəqəmlərlə bir ölçülü massiv alırıq. Görürük ki, içində çoxlu sıfırlar var, onları silmək olar. Bunun üçün çoxlu sıfırların ardıcıllığı yerinə 1 sıfır və ondan sonra ardıcıllıqla onların sayını göstərən rəqəm daxil edirik. Bu yolla siz bütün massivin ölçüsünü 1/3-ə sıfırlaya bilərsiniz. Və sonra biz sadəcə Huffman metodundan istifadə edərək bu massivi sıxırıq və onu faylın özünə yazırıq.

Harada istifadə etmək

Hər yerdə. PNG kimi, JPEG də kameralarda, OS-lərdə (şirkət loqoları, proqram nişanları, miniatürlər kimi) və şəkillərin səmərəli saxlanması lazım olan bütün mümkün sahələrdə istifadə olunur.

Buraxılış

Hal-hazırda, JPEG haqqında bilik indi yalnız təhsil məqsədləri üçün dəyərlidir, çünki o, artıq hər yerdə qurulub və insanların böyük qrupları tərəfindən optimallaşdırılıb, lakin elmin qraniti hələ də dadlıdır.

İnformasiya qaynaqları

Vikipediyada YCbCr haqqında məqalə
JPEG-də Vikipediya məqaləsi
Pikabu postundan PrEP haqqında bir az
PrEP haqqında Wikipedia məqaləsi

Mənbə: www.habr.com

Добавить комментарий