İkinci hissə:
Hər bir raster şəkil iki ölçülü matris şəklində təqdim oluna bilər iki dimensional матрица. Rənglərdən danışarkən, bu ideya şəkli üç ölçülü matris, burada əlavə ölçülər hər bir rəng üçün məlumatların saxlanması üçün istifadə olunur.
Əgər nəticə rəngini əsas rənglərin (qırmızı, yaşıl və mavi) kombinasiyası kimi düşünsək, bu üç ölçülü matrisdə üç səthi müəyyən edirik: birincisi qırmızı rəng, ikincisi yaşıl və sonuncusu mavi.
Bu matrisdəki hər bir nöqtəyə piksel (şəklin elementi) deyəcəyik. Hər piksel hər bir rəngin intensivliyi haqqında məlumat saxlayır (adətən ədədi dəyər şəklində). Məsələn, qırmızı piksel cəmi 0 yaşıl, 0 mavi və maksimum qırmızı olması deməkdir. Çəhrayı piksel üç rəngin kombinasiya ilə formalaşa bilər. 0-dan 255-ə qədər olan ədədi aralıqdan istifadə edərək, çəhrayı piksel aşağıdakı şəkildə müəyyən edilir: Qırmızı = 255, Yaşıl = 192 və Mavi = 203.
Məqalə EDISON şirkətinin dəstəyi ilə nəşr edilmişdir.Videomüşahidə, axın video , eyni zamanda .
Şəkilin tərkibində olan rəngləri təqdim etmək üçün daha çox model var. Məsələn, RGB modelindən istifadə etdikdə tələb olunan üç yerinə, yalnız bir bayt tələb edən indeksli palitrası istifadə edə bilərik. Bu modeldə hər bir rəngi təqdim etmək üçün 2D matris istifadə etmək mümkündür. Bu, yaddaşı qənaət edir, lakin daha az rəng genişliyi təqdim edir.
RGB

Məsələn, aşağıdakı şəkilə baxın. Birinci üz tamamilə boyanıb. Digərləri isə qırmızı, yaşıl və mavi səthlərdir (müvafiq rəngin intensivliyi boz tonlarda göstərilir).
Görürük ki, orijinaldakı qırmızı kölgələr, ikinci üzün ən parlaq hissələrini müşahidə edəcəyimiz yerlərdə olacaq. Mavi rəngin töhfəsi isə əsasən Mario-nun gözlərində (sonuncu üz) və onun geyimində görünür. Üç rəng səthinin ən az töhfə verdiyi yerlərə diqqət yetirin (şəkillərin ən qaranlıq hissələri) — bu Mario-nun bığlarıdır.

Hər rəngin intensivliyini saxlamaq üçün müəyyən miqdarda bitlər tələb olunur — bu ölçü
bit dərinliyi . Tutaq ki, bir rəng səthi üçün 8 bit (0-dan 255-ə qədər dəyərə əsaslanaraq) istifadə olunur. Onda 24 bit dərinlik əldə edirik (8 bit * 3 səthi R/G/B).Şəklin digər bir xüsusiyyəti -
həll разрешение, piksel sayısını bir boyutta temsil eder. Genellikle olarak genişlik × yükseklik, aşağıda 4'e 4 olan örnek resimde olduğu gibi.

Görüntülerle / videolarla çalışırken karşılaştığımız bir diğer özellik ise en boy oranı, bir görüntünün veya pikselin genişliği ile yüksekliği arasındaki genellikle orantılı ilişkidir.
Bir filmin veya görüntünün 16'ya 9 boyutlarında olduğu söylendiğinde, genellikle söz konusu olana ekranın en boy oranı (DAR — Display Aspect Ratio). Ancak bazen ayrı piksel formları olabilir — bu durumda söz konusu olan piksel oranı (PAR — Pixel Aspect Ratio).


Hanımlara not: DVD oxu-yazı məlumatları DAR 4'e 3
Gerçek DVD çözünürlüğü 704×480 olmasına rağmen, 4:3 en boy oranını korumaktadır, çünkü PAR değeri 10:11 (704×10 / 480×11) olarak alınmıştır.
Ve nihayet, tanımlayabiliriz də bir sıranın n dönem zamanı, ilave bir ölçü olarak kabul edilebilir. O zaman — bu, karelerin saniyedeki sıklığı veya n kare hızı ya da saniyede kaç kareFPS — Frames per Second).

Bir videonun gösterimi için gerektiği bit sayısı, veri transferi — bit hızı.
bit hızı = genişlik * yükseklik * bit derinliği * kareler/sn
Örneğin, saniyede 30 kare, piksel başına 24 bit ve 480×240 çözünürlüğe sahip bir video için 82,944,000 bit/saniye ya da 82,944 Mbit/s (30x480x240x24) gerekecektir — bu sıkıştırma yöntemleri kullanılmadığında.
Eğer veri transferi yaklaşık sabitse, buna sabit veri transfer hızı (CBR — constant bit rate). Ancak değişebilir, bu durumda değişken veri transfer hızı (VBR — variable bit rate).
Bu grafik, tamamen karanlık bir karede fazla bit harcanmadan sınırlı VBR'yi gösterir.

Başlangıçta mühendisler, ekrandaki algılanan kare hızını ek bir bant genişliği kullanmadan iki katına çıkarma yöntemi geliştirdiler. Bu yöntem yarı satıh videodur; esasen, ekranın yarısını ilk 'karede', diğer yarısını ise sonraki 'karede' gönderir.
Günümüzde sahnelerin görselleştirilmesi esas olarak ilerlemeli tarama teknolojisikullanılarak gerçekleştirilmektedir. Bu, her bir karenin tüm satırlarının ardışık olarak çizildiği görüntülerin gösterimi, depolanması veya iletimi yöntemidir.

Eh, artık görüntünün dijital olarak nasıl temsil edildiğini, renklerinin nasıl yapılandığını, sabit (CBR) veya değişken (VBR) bir veri transfer hızında video gösterimi için kaç bit harcandığını biliyoruz. Belirli bir kare hızında belirli bir çözünürlük ile tanıştık ve yarı satıh video, PAR gibi birçok başka terimle de tanıştık.
Artıq yükü aradan qaldırma
Bilinir ki, sıxılmamış video normalda istifadə oluna bilmir. 720p və 30 kadr/san tezlikli bir saatlıq video 278 GB yer tutacaq. Bu dəyərə 1280 x 720 x 24 x 30 x 3600 (genişlik, hündürlük, piksel başına bit, FPS və zaman) vurduqda gəlmiş oluruq.
İstifadəsi itkisiz sıxılma alqoritmləri, məsələn, PKZIP, Gzip və PNG-də istifadə olunan DEFLATE kimi, tələb olunan bant genişliyini kifayət qədər azaltdırmayacaq. Video sıxmaq üçün başqa yollar axtarmaq lazım gəlir.
Bunun üçün görmə qabiliyyətimizdən istifadə edə bilərik. Biz, rənglərdən daha çox parıltını ayırd edə bilirik. Video, zamanla təkrar olunan ardıcıl görüntülər toplusudur. Eyni səhnənin bitişik kadrları arasında fərqliliklər azdır. Bundan əlavə, hər kadr, eyni (və ya bənzər) rənglərin çox sayda sahəsini ehtiva edir.
Rəng, parıltı və gözlərimiz
Gözlərimiz parıltıya, rəngdən daha həssasdır. Bu təsdiq edə bilərsiniz, bu şəkil üzərinə baxdığınızda.

Əgər şişənin sol yarısında kvadratların rənglərini görmürsünüzsə A və B əslində eynidir, bu normaldır. Beynimiz işıq və kölgəyə, yoxsa rəngə daha çox diqqət verərək fəaliyyət göstərir. Sağ tərəfdə işarələnmiş kvadratlar arasında eyni rəngdən bir köprü var — buna görə də (yəni, beynimiz) orada əslində eyni rəng olduğunu asanlıqla müəyyən edirik.
Gəlin (sadə şəkildə) gözlərimizin necə işlədiyini araşdıraq. Göz, bir çox hissədən ibarət mürəkkəb bir organdır. Lakin bizi daha çox maraqlandıran konus və çubuqdır. Göz, təxminən 120 milyon çubuq və 6 milyon konus ehtiva edir.
Rəng və parıltı hissini gözün müəyyən hissələrinin ayrı-ayrı funksiyaları kimi nəzərdən keçirək (əslində, vəziyyət bir qədər daha mürəkkəbdir, lakin biz onu sadələşdirəcəyik). Çubuq hüceyrələri əsasən parıltıya, konus hüceyrələri isə rəngə cavabdehdir. Konuslar, tərkibindəki piqmentə görə üç növə bölünür: S-konuslar (mavi rəng), M-konuslar (yaşıl rəng) və L-konuslar (qırmızı rəng).
Çünki bizdə konuslardan (rəng) çox daha çox çubuq var (parıltı), buna görə də qaranlıq və işıq arasındakı keçidləri rəngdən daha yaxşı ayırd edə biləcəyimiz qənaətinə gələ bilərik.
Kontrast həssaslığı funksiyaları
Eksperimental psixologiya və digər nəzəri sahələrdə araşdırma aparan mütəxəssislər insan görmə qabiliyyəti ilə əlaqəli bir çox nəzəriyyə inkişaf etdirmişlər. Və bunlardan biri kontrast həssaslığı funksiyalarıdır.. Onlar zaman və məkan işıqlandırması ilə bağlıdır. Qısacası, müşahidəçinin onları görməsi üçün nə qədər dəyişikliyin edilməsinin lazım olduğundan bəhs edilir. "Funksiya" sözünün çoxlu formasına diqqət yetirin. Bu, bizə kontrasta olan həssaslıq funksiyalarını yalnız qara-ağ görüntü ilə deyil, həm də rəngli görüntü ilə ölçməyə imkan verdiyi ilə əlaqədardır. Bu eksperimentlərin nəticələri göstərir ki, əksər hallarda gözlərimiz işıqlığa rəngdən daha həssasdır.
İşıqlılığa qarşı daha həssas olduğumuz məlumdursa, bu faktı istifadə etməyə çalışa bilərik.
Rəng model
Rəngli görüntülərlə RGB sxemasından istifadə etməyi bir az başa düşdük. Başqa modellər də mövcuddur. Həmçinin, parıltını rəngdən ayıran bir model var və bu, adətən YCbCr. Qeyd edək ki, bənzər ayrılma həyata keçirən digər modellər də var, lakin biz yalnız bunu nəzərdən keçirəcəyik.
Bu rəng modelində Y — parıltının təmsilidir, həmçinin iki rəng kanalı istifadə olunur: Cb (doğru mavi) və Cr (doğru qırmızı). YCbCr RGB-dən alınabilir, eyni zamanda əks çevrilmə də mümkündür. Bu modeldən istifadə edərək aşağıda gördüyümüz kimi tam rəngli görüntülər yarada bilərik:

YCbCr və RGB arasında çevrilmə
Bəziləri etiraz edə bilər: yaşıl istifadə olunmadan bütün rəngləri necə əldə etmək mümkündür?
Bu sualı cavablandırmaq üçün RGB-nin YCbCr-ə çevrilməsini həyata keçirəcəyik. BT.601 standartında qəbul edilmiş əmsallardan istifadə edəcəyik. BT.601, bu, İTÜ-Rtərəfindən tövsiyə olunan bir bölmədir. Bu bölmə rəqəmsal videonun standartlarını müəyyən edir. Məsələn: 4K nədir? Hər hansı bir kadr tezliyi, ayrıntı, rəng modeli necə olmalıdır?
İlk növbədə parıltını hesablayacağıq. İTÜ tərəfindən təklif olunan sabitlərdən istifadə edərək RGB dəyərlərini dəyişdirəcəyik.
Y = 0.299R + 0.587G + 0.114B
Parıltını əldə etdikdən sonra, mavi və qırmızı rəngi ayıracağıq:
Cb = 0.564(B — Y)
Cr = 0.713(R — Y)
Həmçinin YCbCr ilə geri çevirmək və hətta yaşıl əldə etmək də mümkündür:
R = Y + 1.402Cr
B = Y + 1.772Cb
G = Y — 0.344Cb — 0.714Cr
Adətən, ekranlar (monitorlar, televizorlar, ekranlar və s.) yalnız RGB modelini istifadə edir. Lakin bu model müxtəlif formalarda təşkil oluna bilər:

Rəng subdağıtılması
Parıltı və rəngdən ibarət görüntü ilə, insan görmə sisteminin parıltıya olan daha yüksək həssaslığını rəngə nisbətən istifadə edə biləcəyimiz üçün məlumatı seçici şəkildə aradan qaldırsaq, qeyri-aşkar vaxt qısaldaraq daha az rezolyusiyanı rəng üçün istifadə edə bilirik. Rəng subdağıtılması — bu, parıltı üçün renkli məlumatın daha aşağı rezolyusiyaya sahib olması üçün şəkillərin kodlaşdırma üsuludur.

Rəngin rezolyusiyasını azaltmaq nə dərəcədə qəbul ediləndir?! Görünür, artıq rezolyusiyanı və birləşməni (Nəticə rəngi = Y + Cb + Cr) işlətmənin necə olacağı ilə bağlı bəzi sxemlər var.
Bu sxemlər subdağıtma sistemləri kimi tanınır. və 3 qatlı nisbət şəklində ifadə olunur — a:x:cavab verin. Sonra istifadəçi ilə interaktiv sessiyanı, hansı ki, parlaqlıq və rəng fərqliliyi siqnallarının sayını müəyyən edir.
a — üfüqi seçimin standartı (adətən 4-ə bərabərdir)
x — pikselərin birinci sətirindəki rəng seçmə sayının sayı (üfüqi həll etmə ilə bağlı a)
cavab verin. Sonra istifadəçi ilə interaktiv sessiyanı — pikselərin birinci və ikinci sətirləri arasında rəng seçmələrinin dəyişiklikləri sayıdır.
İstisna təşkil edir 4:1:0, hər parlaqlıq 4 x 4 həlli blokunda bir rəng seçməsi təmin edir.
Müasir kodlayıcılarda istifadə olunan ümumi sxemlər:
- 4:4:4 (sübdissretizasiya olmadan)
- 4:2:2
- 4:1:1
- 4:2:0
- 4:1:0
- 3:1:1
YCbCr 4:2:0 — birləşmə nümunəsi
Budur, YCbCr 4:2:0 istifadə edilərək birləşdirilmiş bir görüntü parçası. Görün ki, piksel başına yalnız 12 bit sərf edirik.
Budur eyni görüntünün əsas rəng sübdissretizasiya tipləri ilə kodlaşdırılmış görünüşü. İlk sətir, son YCbCr-ni göstərir, aşağıdakı sətir isə rəng həllini nümayiş etdirir. Kiçik keyfiyyət itkisinə baxmayaraq, olduqca yaxşı nəticələrdir.

Yada salaq ki, biz 720p və 30 kadr sürəti olan bir saatlıq video faylını saxlamaq üçün 278 GB disk sahəsi hesablamışdıq? YCbCr 4:2:0-dan istifadə etsək, bu ölçü yarıya düşəcək — 139 GB. Hələ də qəbul edilən nəticəyə uzağıq.
Özünüz YCbCr histogramını FFmpeg ilə əldə edə bilərsiniz. Bu görüntüdə mavi, qırmızıdan daha üstünlük təşkil edir, bu da histogramda açıq-aşkar görünür.

Rənglik, parlaqlıq, rəng spektri — video icmalı
Bu möhtəşəm videonu izləməyinizi tövsiyə edirəm. Burada parlaqlığın nə olduğunu açıqlayır və bütün nöqtələri aydınlaşdırır. la parlaqlıq və rəng haqqında.
Kadr tipləri
Irəliləyirik. İndiki zaman atıb aşırı gedişdən qurtarmağa çalışaq. Ancaq əvvəlcə bəzi əsas terminologiyanı müəyyənləşdirək. Təsəvvür edin ki, 30 kadr/s surətində bir filmimiz var, budur onun ilk 4 kadri:

Kadrlarda çoxlu təkrarlanma görürük: məsələn, kadrdan-kadra dəyişməyən mavi fond. Bu problemi həll etmək üçün onları üç tip kadr olaraq sərbəst sinifləşdirə bilərik.
I-kadr (Intro Frame)
I-kadr (bağlantı kadrı, açar kadr, daxili kadr) müstəqildir. Nəyi vizuallaşdırmaq lazım olduğundan asılı olmayaraq, I-kadr əslində statik bir fotoşəkildir. İlk kadr adətən I-kadr olur, lakin çox vaxt əvvələ aid olmayan I-kadrlara da rast gələcəyik.

P-kadr (Predicted Frame)
P-çerçivə (proqnozlaşdırılmış çərçivə) cari görüntünün demək olar ki, həmişə əvvəlki çərçivə ilə bərpa oluna biləcəyinin üstünlüyündən istifadə edir. Məsələn, ikinci çərçivədə yeganə dəyişiklik irəliləyən topdur. Biz ikinci çərçivəni 1-ci çərçivəni bir az dəyişdirərək əldə edə bilərik, yalnız bu çərçivələr arasında olan fərqdən istifadə edərək. İkinci çərçivəni yaratmaq üçün əvvəlki çərçivə 1-ə istinad edirik.
← 
B-çərçivə (Bi-proqnozlaşdırılmış Çərçivə)
Bəs keçmiş çərçivələrə deyil, eyni zamanda gələcək çərçivələrə istinad etməyimiz haqqında nə demək olar? Bu, daha yaxşı sıxılma təmin etmək üçün B-çərçivəni (iki istiqamətli çərçivə) əsas məsələdir.
←
→ 
Aralıq nəticə
Bu çərçivə növləri ən yaxşı sıxılmanı təmin etmək üçün istifadə edilir. Bu prosesi növbəti bölmədə araşdıracağıq. Hələlik qeyd edək ki, ən "bahalı" yaddaş istifadəsi I-çərçivədədir, P-çərçivə əhəmiyyətli dərəcədə daha ucuzdur, amma B-çərçivə videolar üçün ən sərfəli variantdır.

Zaman redundansı (çərçivələrarası proqnozlaşdırma)
Gələcəkdə təkrarlamaların azaldılması üçün hansı imkanlarımız olduğunu nəzərdən keçirək. Bu redundans tipini qarşılıqlı proqnozlaşdırma metodları ilə həll edəcəyik.
0 və 1 çərçivələrinin kodlaşdırılması üçün mümkün qədər az bit sərf etməyə çalışaq.

Biz edə bilərik çıxarma, sadəcə olaraq 1-ci çərçivəni 0-cı çərçivədən çıxarırıq. 1-ci çərçivəni əldə edirik, yalnız onun və əvvəlki çərçivə arasındakı fərqi istifadə edərək, faktiki olaraq yalnız yaranan qalıqı kodlayırıq.

Bəs, mən sizə daha yaxşı bir metod olduğunu, daha az bit istifadə edən, desəm?! İlk öncə 0-cı çərçivəni bloklardan ibarət dəqiq bir şəbəkəyə ayıraq. Sonra isə 0-cı çərçivənin bloklarını 1-ci çərçivə ilə müqayisə etməyə çalışaq. Başqa sözlə, çərçivələr arasındakı hərəkəti qiymətləndirək.
Vikipediyadan — blok hərəkətinin kompensasiya
Blok hərəkətinin kompensiyası cari çərçivəni kəsişməyən bloklara bölür və hərəkət kompensasiya vektoru blokların mənşəyini bildirim edir (yaygın bir yanlış anlama odur ki, əvvəlki çərçivə kəsişməyən bloklara bölünür, hərəkət kompensasiya vektorları isə bu blokların hara keçdiyini bildirir. Əslində əksinədir — əvvəlki çərçivə deyil, sonrakı çərçivə analiz edilir, bloklarının hara keçdiyi deyil, haradan gəldiyi araşdırılır). Adətən başlanğıc blokları cari çərçivədə üst-üstə düşür. Bəzi video sıxılma alqoritmləri cari çərçivəni bir neçə əvvəlki çərçivədən parçalar yığaraq tərtib edir.

Qiymətləndirmə prosesi zamanı görürük ki, top (x=0, cavab verin. Sonra istifadəçi ilə interaktiv sessiyanı=25) yerini (x=6, cavab verin. Sonra istifadəçi ilə interaktiv sessiyanı=26) dəyişib. x və cavab verin. Sonra istifadəçi ilə interaktiv sessiyanı hərəkət vektorunu müəyyən edir. Bizi bitləri saxlamaq üçün atmağı düşündüyümüz bir addım — bloku ilə son mövqeyi və proqnozlaşdırılmış arasındakı hərəkət vektorlarının fərqini kodlaşdırmaqdır, bu səbəbdən son hərəkət vektoru (x=6-0=6, y=26-25=1) olacaq.
Əsl halda, bu top bloklara bölünəcəkdi, n amma bunun mahiyyətinə təsir etmir.
Kadrdakı obyektlər üç ölçüdə hərəkət edir, beləliklə topun hərəkət etdiyi zaman vizual olaraq kiçiləcək (ya da tamaşaçıya doğru hərəkət edərsə böyüyəcək). Bloklar arasında mükəmməl uyğunluq olmayacağını gözləmək normaldır. Budur, proqnoz bizim qiymətləndirməmiz və əsl görüntü ilə birləşdirilmiş görünüşüdür.

Amma görə bilirik ki, hərəkət qiymətləndirdiyimiz zaman, kodlaşdırma üçün məlumatlar daha sadə bir metoddan istifadə edildiyindən əhəmiyyətli dərəcədə azdır.

Həqiqi hərəkət kompensasiyası necə görünəcək
Bu metodika eyni anda bütün bloklara tətbiq edilir. Çox zaman bizim şərti hərəkətli topumuz eyni anda bir neçə bloka bölünəcək.

Bu konsepsiyaları özünüz hiss edə bilərsiniz, .
Hərəkət vektorlarını görmək üçün xarici proqnozla video yarada bilərsiniz .

Daha bir variant olaraq, (pulsuz deyil, amma yalnız ilk on kadrla məhdudlaşdırılan pulsuz sınaq versiyası var).

Məkan artıqçılığı (daxili proqnoz)
Videodakı hər kadrı analiz etsək, bir çox qarşılıqlı sahələri kəşf edərik.

Bu nümunəyə nəzər salaq. Bu səhnə əsasən mavi və ağ rənglərdən ibarətdir.

Bu I-kadrdır. Proqnozlaşdırmaq üçün əvvəlki kadrları istifadə edə bilmirik, amma onu sıxa bilərik. Qırmızı blokun seçimini kodlaşdıraq. Ətrafındakı qonşuları nəzərdən keçirsək, onun ətrafında müəyyən rəng meylləri olduğunu görürük.

Kadrda rənglərin şaquli şəkildə yayıldığını qəbul edirik. Yəni, bilinməyən pikselərin rəng dəyərləri qonşularının dəyərlərini ehtiva edəcək.

Bu proqnoz da yanlış ola bilər. Məhz bu səbəbdən bu metodu tətbiq etmək (daxili proqnoz) və sonra həqiqi dəyərləri çıxarmaq lazımdır. Bu bizə qalıq blok verəcək ki, bu da orijinala nisbətən daha sıx bir matris əldə edəcəyik.

Daxili proqnozlar ilə praktika etmək istəyirsinizsə, ffmpeg ilə makrobloklar və onların proqnozları ilə bir video yarada bilərsiniz. Hər blokun rənginin mənasını başa düşmək üçün ffmpeg-in sənədinə baxmağınız lazım olacaq.

Yaxud, Intel Video Pro Analyzer-dən istifadə edə bilərsiniz (yuxarıda dediyim kimi, pulsuz sınaq versiyasında ilk 10 kadrla məhdudiyyət var, amma ilkin mərhələdə bununla kifayətlənəcəksiniz).

İkinci hissə:
Mənbə: habr.com



