Bagian kadua:
Raster naon waé gambar bisa digambarkeun salaku matriks dua diménsiLamun datang ka kelir, ide bisa dimekarkeun ku tempo gambar salaku matriks tilu diménsi, nu dimensi tambahan dipaké pikeun nyimpen data pikeun tiap warna.
Lamun urang nganggap warna ahir salaku kombinasi tina nu disebut warna primér (beureum, héjo jeung bulao), dina matrix tilu diménsi urang nangtukeun tilu planes: kahiji pikeun beureum, kadua pikeun héjo sarta panungtungan pikeun biru.
Urang bakal nelepon unggal titik dina matrix ieu piksel (unsur gambar). Unggal piksel ngandung émbaran ngeunaan inténsitas (biasana salaku nilai numerik) unggal warna. Salaku conto, piksel beureum ngandung harti yén éta ngandung 0 héjo, 0 biru jeung beureum maksimum. Piksel pink bisa ngawujud ku ngagabungkeun tilu kelir. Ngagunakeun rentang numerik ti 0 nepi ka 255, piksel pink dihartikeun salaku Beureum = 255, Héjo = 192 и Bulao = 203.
Tulisan ieu diterbitkeun kalayan dukungan EDISON.Kami ngembang , sarta ogé kami kalibet .
Métode alternatif pikeun ngodekeun gambar warna
Aya loba model sejen pikeun ngagambarkeun kelir nu nyieun hiji gambar. Contona, Anjeun bisa make hiji palette indéks, nu merlukeun ngan hiji bait keur ngagambarkeun unggal piksel, tinimbang tilu diperlukeun ku model RGB. Modél ieu ogé ngamungkinkeun anjeun ngagunakeun matriks 2D tinimbang matriks 3D pikeun ngagambarkeun unggal warna. Ieu ngaheéat mémori, tapi hasil dina gamut warna nu leuwih leutik.

RGB
Contona, tingali gambar di handap ieu. Beungeut kahiji pinuh warna. Anu sanésna nyaéta pesawat beureum, héjo, sareng bulao (inténsitas warna anu sami dipidangkeun dina skala abu).

Kami ningali yén nada beureum dina aslina aya di tempat anu sami dimana bagian anu paling terang tina raray kadua katingali. Samentara éta, kontribusi biru utamana katingali ngan dina panon Mario urang (rupa final) jeung elemen papakéan na. Catet yén dimana sadaya tilu pesawat warna nyumbang paling saeutik (bagian anu paling poék dina gambar) aya dina kumis Mario.
Nyimpen inténsitas unggal warna merlukeun sajumlah bit - nilai ieu disebut jero bitHayu urang nyebutkeun 8 bit (dumasar kana nilai ti 0 nepi ka 255) spent dina hiji pesawat warna. Lajeng urang boga jero warna 24 bit (8 bit * 3 R / G / B planes).
sipat séjén gambar éta resolusi, nyaéta jumlah piksel dina hiji diménsi. Mindeng dilambangkeun salaku lebar × jangkungna, sapertos di handap dina conto gambar 4 ku 4.

sipat sejen urang nungkulan nalika gawé bareng gambar / video nyaeta rasio aspék, nu ngajelaskeun hubungan sabanding normal antara rubak jeung jangkungna hiji gambar atawa piksel.
Nalika jalma nyarios yén pilem atanapi gambar anu tangtu nyaéta 16 ku 9, aranjeunna biasana hartosna rasio aspék tampilan (Dar - tina Rasio Aspék Témbongkeun). Sanajan kitu, sakapeung meureun aya bentuk béda tina piksel individu - dina hal ieu urang ngobrol ngeunaan rasio piksel (tara - tina Rasio Aspék Piksel).


Catetan ka ibu rumah tangga: DVD соответствует DAR 4 nepi ka 3
Sanajan resolusi sabenerna DVD nyaéta 704 × 480, éta tetep ngajaga rasio aspék 4:3 sabab tara 10:11 (704 × 10 / 480 × 11).
Muhun, tungtungna, urang bisa nangtukeun видео salaku runtuyan n pigura pikeun période waktu, nu bisa dianggap hiji diménsi tambahan. A n mangka éta laju pigura atawa jumlah pigura per detik (FPS - tina Pigura per Detik).

Jumlah bit per detik diperlukeun pikeun mintonkeun video nyaeta na speed transmisi - bitrate.
bitrate = lebar * jangkungna * bit jero * pigura per detik
Contona, video 30 fps, 24 bit per piksel, 480x240 resolusi bakal merlukeun 82,944,000 bit per detik atawa 82,944 Mbps (30x480x240x24) - tapi éta lamun euweuh metoda komprési dipaké.
Lamun laju transmisi ampir konstan, mangka disebut laju mindahkeun konstan (CBR - tina laju bit konstan). Tapi ogé bisa rupa-rupa, bisi nu disebut laju bit variabel (VBR - tina laju bit variabel).
Grafik ieu nembongkeun VBR kawates, dimana teu loba teuing bit anu wasted dina kasus pigura lengkep poék.

Mimitina, insinyur ngembangkeun metode pikeun ngagandakeun laju pigura anu ditanggap tina tampilan pidéo tanpa nganggo rubakpita tambahan. Metoda ieu katelah video interlaced; dasarna, eta ngirimkeun satengah layar dina munggaran "pigura" jeung satengah sejenna dina salajengna "pigura".
Kiwari, rendering pamandangan biasana dilakukeun nganggo téknologi scanning progresifIeu mangrupikeun metode pikeun ningalikeun, nyimpen, atanapi ngirimkeun gambar anu gerak dimana sadaya garis dina unggal pigura digambar sacara berurutan.

Muhun, éta! Ayeuna urang terang kumaha gambar diwakilan sacara digital, kumaha warnana terstruktur, sabaraha bit per detik anu diperyogikeun pikeun nampilkeun pidéo, naha éta dina laju bit konstan (CBR) atanapi laju bit variabel (VBR). Kami ogé diajar ngeunaan résolusi anu dipasihkeun nganggo laju pigura anu dipasihkeun, sareng kami parantos akrab sareng seueur istilah sanésna, sapertos pidéo interlaced, PAR, sareng sababaraha anu sanés.
Ngahapus redundansi
Éta ogé dipikanyaho yén pidéo anu teu dikomprés teu mungkin dianggo leres. Pidéo lila-jam dina résolusi 720p sareng 30 pigura per detik bakal nyandak 278 GB. Nilai ieu kahontal ku cara ngalikeun 1280 x 720 x 24 x 30 x 3600 (lebar, jangkungna, bit per piksel, FPS, jeung waktu dina detik).
pamakean algoritma komprési lossless, kawas DEFLATE (dipaké dina PKZIP, Gzip, jeung PNG), moal cukup ngurangan rubakpita diperlukeun. Métode komprési pidéo sanés kedah dipendakan.
Jang ngalampahkeun ieu, urang bisa ngamangpaatkeun peculiarities visi urang. Urang ngabedakeun kacaangan hadé ti warna. Pidéo nyaéta sakumpulan gambar berurutan anu diulang deui dina waktosna. Beda antara pigura padeukeut tina adegan tunggal leutik. Saterusna, unggal pigura ngandung loba wewengkon ngagunakeun warna anu sarua (atawa sarupa).
Warna, kacaangan sareng panon urang
Panon urang langkung peka kana kacaangan tibatan warna. Anjeun tiasa ningali ieu nyalira ku ningali gambar ieu.

Upami anjeun henteu ningali yén warna kuadrat dina satengah kénca gambar A и B Lamun kuadrat sabenerna idéntik, éta normal. Otak urang ngajantenkeun urang langkung nengetan cahaya sareng kalangkang tibatan warna. Di sisi katuhu, di antara kuadrat, aya sasak tina warna anu sarua-jadi urang (otak urang) gampang nangtukeun yen aranjeunna sabenerna warna anu sarua.
Hayu urang nempo saderhana kumaha panon urang jalan. Panon mangrupa organ kompléks nu diwangun ku sababaraha bagian. Nanging, urang paling resep kana rod sareng congcot. Panon ngandung kira 120 juta rod jeung 6 juta congcot.
Hayu urang nganggap persepsi warna jeung kacaangan salaku fungsi misah tina bagian husus panon (dina kanyataanana, hal anu rada leuwih kompleks, tapi urang bakal simplify). Sél rod utamana jawab kacaangan, sedengkeun sél congcot jawab warna. Congcot dibagi jadi tilu rupa, gumantung kana pigmén anu dikandungna: S-cones (biru), M-cones (héjo), jeung L-cones (beureum).
Kusabab urang boga leuwih loba rod (luminance) ti congcot (warna), bisa dicindekkeun yén urang téh hadé bisa ngabedakeun transisi antara poék jeung lampu ti kelir.
Fungsi sensitipitas kontras
Panaliti dina psikologi ékspérimén sareng seueur widang sanésna parantos ngembangkeun seueur téori ngeunaan visi manusa. Salah sahijina disebut fungsi sensitipitas kontrasAranjeunna aya hubunganana sareng katerangan spasial sareng temporal. Pondokna, aranjeunna nujul kana sabaraha parobahan diperlukeun saméméh panitén notices eta. Catetan bentuk jamak tina kecap "fungsi". Ieu kusabab urang tiasa ngukur pungsi sensitipitas kontras sanés ngan ukur pikeun gambar hideung-bodas tapi ogé pikeun gambar warna. Hasil tina percobaan ieu nunjukkeun yén, dina kalolobaan kasus, panon urang leuwih sénsitip kana luminance ti warna.
Kusabab dipikanyaho yén urang langkung sénsitip kana kacaangan gambar, urang tiasa nyobian nganggo kanyataan ieu.
Model warna
Kami parantos nutupan sakedik cara damel sareng gambar warna nganggo rohangan warna RGB. Aya model sejen, teuing. Hiji model anu misahkeun luminance ti chrominance katelah YCbCrKu jalan kitu, aya model sejen anu nyieun division sarupa, tapi urang ngan bakal mertimbangkeun ieu.
Dina modél warna ieu Y — mangrupikeun perwakilan kacaangan, sareng dua saluran warna dianggo: Cb (biru euyeub) jeung Cr (beureum jenuh). YCbCr bisa diturunkeun tina RGB, sarta transformasi sabalikna oge mungkin. Ngagunakeun modél ieu, urang bisa nyieun gambar full-warna, sakumaha katingal di handap:

Ngarobih antara YCbCr sareng RGB
Aya anu tiasa ngabantah: kumaha tiasa kéngingkeun sadaya warna upami héjo henteu dianggo?
Pikeun ngajawab patarosan ieu, urang bakal ngarobah RGB kana YCbCr. Urang bakal ngagunakeun koefisien diadopsi dina standar. BT.601, anu disarankeun ku unit ITU-RDivisi ieu nangtukeun standar video digital. Contona: naon 4K? Naon kedahna laju pigura, résolusi, sareng modél warna?
Kahiji, hayu urang ngitung luminance nu. Urang bakal nganggo konstanta anu diusulkeun ku ITU sareng ngagentos nilai RGB.
Y = 0.299R + 0.587G + 0.114B
Sakali kami gaduh kacaangan, urang misahkeun warna biru sareng beureum:
Cb = 0.564(B - Y)
Cr = 0.713(R - Y)
Sareng urang ogé tiasa ngarobih deui sareng janten héjo nganggo YCbCr:
R = Y + 1.402Cr
B = Y + 1.772Cb
G = Y - 0.344Cb - 0.714Cr
Ilaharna, tampilan (monitor, TV, layar, jsb) ngan ngagunakeun model RGB. Sanajan kitu, model ieu bisa diatur ku cara béda:

Subsampling warna
Kalayan gambar anu digambarkeun salaku kombinasi luminance sareng chrominance, urang tiasa ngamangpaatkeun sensitipitas sistem visual manusa anu langkung ageung kana luminance tibatan chrominance ku cara ngahapus inpormasi sacara selektif. Chroma subsampling nyaéta métode encoding gambar anu ngagunakeun résolusi nu leuwih handap pikeun chrominance ti pikeun luminance.

Sabaraha anu ditampi pikeun ngirangan résolusi warna?! Tétéla tos aya sababaraha skéma anu ngajelaskeun kumaha carana ngadamel résolusi sareng ngahiji (Warna Akhir = Y + Cb + Cr).
schemes ieu katelah sistem subsampling sarta dinyatakeun salaku rasio 3-melu - a:x:y, nu nangtukeun jumlah sampel luminance jeung sinyal béda warna.
a - standar sampling horizontal (biasana sarua jeung 4)
x - Jumlah sampel warna dina baris kahiji piksel (resolusi horizontal relatif ka a)
y - Jumlah parobahan dina sampel warna antara baris kahiji jeung kadua piksel.
Pangecualian nyaéta 4:1:0, nyadiakeun hiji sampel kroma dina unggal blok résolusi luminance 4x4.
Skéma umum anu dianggo dina codec modéren:
- 4:4:4 (tanpa subsampling)
- 4:2:2
- 4:1:1
- 4:2:0
- 4:1:0
- 3:1:1
YCbCr 4:2:0 - conto ngagabungkeun
Ieu mangrupikeun sempalan gambar anu dihijikeun nganggo YCbCr 4:2:0. Catet yén kami ngan ukur nganggo 12 bit per piksel.
Ieu mangrupikeun gambar anu sami anu disandikeun sareng jinis utama subsampling kroma. Baris kahiji nyaéta YCbCr final, baris handap nembongkeun resolusi chroma. Ieu mangrupikeun hasil anu cukup terhormat, nimbangkeun kaleungitan sakedik dina kualitas.

Inget kumaha urang ngitung 278 GB spasi disk diperlukeun pikeun nyimpen hiji file video lila-jam dina resolusi 720p sarta 30 fps? Upami urang nganggo YCbCr 4:2:0, ukuran éta bakal dipotong satengah janten 139 GB. Masih jauh tina katarima.
Anjeun tiasa ngahasilkeun histogram YCbCr sorangan nganggo FFmpeg. Dina gambar ieu, biru leuwih dominan ti beureum, nu jelas katempo dina histogram sorangan.

Warna, Caang, sareng Warna Gamut - Review Video
Abdi nyarankeun pisan ningali pidéo anu saé ieu. Ieu ngécéskeun naon kacaangan jeung bener meunang sagala titik sakuliah. ё ngeunaan kacaangan sareng warna.
Jinis pigura
Hayu urang ngaléngkah. Hayu urang cobaan pikeun ngaleungitkeun redundancy temporal. Tapi ke heula, hayu urang ngartikeun sababaraha terminologi dasar. Anggap urang gaduh pilem sareng 30 pigura per detik. Ieu opat pigura munggaran:

Kami ningali seueur pengulangan dina pigura: contona, latar biru, anu tetep sami ti pigura ka pigura. Pikeun alamat ieu, urang abstrak bisa mengklasifikasikan kana tilu jenis pigura.
I-frame (Intro Frame)
Hiji I-pigura (pigura rujukan, keyframe, atawa intraframe) nyaeta timer ngandung. Henteu paduli naon anu kedah ditingali, pigura-I dasarna mangrupikeun poto statik. Pigura kahiji biasana mangrupa I-pigura, tapi urang bakal rutin ningali I-pigura dina pigura tebih ti mimiti.

Pigura P (PBingkai diredik)
Pigura-P (pigura prediktif) ngamangpaatkeun kanyataan yén gambar ayeuna ampir salawasna bisa dihasilkeun maké pigura saméméhna. Contona, dina pigura 2, hijina robah nyaéta bal maju. Urang bisa ménta pigura 2 ku saukur ngaropéa pigura 1 rada, ngagunakeun ukur bédana antara dua pigura. Pikeun ngawangun pigura 2, urang ngarujuk kana pigura 1 sateuacana.
← 
Pigura B (Bi-predictive Frame)
Kumaha upami ngarujuk henteu ngan ukur pigura katukang, tapi ogé pigura ka hareup, pikeun mastikeun komprési anu langkung saé?! Ieu dasarna naon a B-pigura (pigura bidirectional).
←
→ 
Kaluaran panengah
Jenis pigura ieu dipaké pikeun mastikeun komprési pangalusna. Urang bakal ngabahas kumaha ieu jalanna dina bagian salajengna. Pikeun ayeuna mah, dicatet yén I-pigura anu paling memori-intensif, P-pigura nyata langkung mirah, sarta B-pigura mangrupa pilihan pang éfisiénna pikeun video.

Redundansi temporal (prediksi interframe)
Hayu urang pertimbangkeun pilihan anu sayogi pikeun urang pikeun ngaminimalkeun pangulangan waktos. Urang bakal alamat tipe redundansi ieu ngagunakeun métode prediksi silih.
Hayu urang cobian nyéépkeun sakedik-gancang pikeun ngodekeun réntétan pigura 0 sareng 1.

Urang bisa ngahasilkeun pangurangan, Urang saukur subtract pigura 1 ti pigura 0. Simkuring meunang pigura 1, tapi urang ngan ngagunakeun bédana antara eta jeung pigura saméméhna, sarta dina kanyataanana urang ngan encode sésana hasilna.

Tapi kumaha upami kuring nyarioskeun ka anjeun yén aya metode anu langkung saé, anu ngagunakeun bit anu langkung sakedik?! Kahiji, hayu urang megatkeun pigura 0 kana grid rapih tina blok. Lajeng, hayu urang coba mun cocog blok ti pigura 0 jeung pigura 1. Dina basa sejen, hayu urang estimasi gerak antara pigura.
Ti Wikipédia - santunan gerak blok
Kompensasi gerak blok ngabagi pigura ayeuna kana blok anu henteu tumpang tindih sareng vektor kompensasi gerak nyarioskeun ti mana blok asalna (salah anggapan umum nyaéta yén saméméhna Pigura dibagi kana blok non-tumpang tindih, sarta vektor santunan gerak nunjukkeun dimana blok ieu pindah. Kanyataanna, sabalikna bener-éta lain pigura saméméhna anu dianalisis, tapi nu salajengna, nangtukeun teu dimana blok pindah, tapi ti mana asalna. Ilaharna, blok aslina tumpang tindih dina pigura aslina. Sababaraha algoritma komprési vidéo ngumpul pigura ayeuna ti bagian teu ngan hiji, tapi sababaraha pigura saméméhna dikirimkeun.

Dina prosés évaluasi urang ningali yén bal geus pindah ti (x= 0, y=25) dina (x= 6, y=26), peunteun x и y nangtukeun véktor gerak. Léngkah séjén anu tiasa urang lakukeun pikeun ngahémat bit nyaéta ngan ukur ngodekeun bédana véktor gerak antara posisi blok anu terakhir sareng anu diprediksi, janten véktor gerak ahirna nyaéta (x=6-0=6, y=26-25=1).
Dina kaayaan nyata bal ieu bakal dibagi kana n blok, tapi ieu teu ngarobah hakekat zat.
Objék dina pigura gerak dina tilu diménsi, ku kituna balna ngalir, éta bisa muncul leuwih leutik (atawa leuwih badag lamun nuju ka arah panempo). Biasana pikeun blok-blok henteu sajajar. Ieu gambar komposit perkiraan kami sareng lukisan anu saleresna.

Tapi urang nempo yén lamun urang ngagunakeun estimasi gerak, aya nyata kirang data pikeun encoding ti nalika ngagunakeun métode basajan tina ngitung délta antara pigura.

Naon bakal santunan gerak nyata kasampak kawas?
Téhnik ieu dilarapkeun ka sadaya blok sakaligus. Mindeng, bal gerak imajinér urang bakal dibeulah jadi sababaraha blok sakaligus.

Anjeun tiasa ngalaman konsép ieu diri ngagunakeun .
Pikeun ningali vektor gerak, anjeun tiasa nyiptakeun pidéo nganggo prediksi éksternal .

Anjeun oge bisa make (Éta mayar, tapi aya uji coba gratis anu dugi ka ngan sapuluh pigura munggaran).

Redundansi spasial (ramalan internal)
Lamun urang nganalisis unggal pigura dina video, urang bakal manggihan loba wewengkon interconnected.

Hayu urang leumpang ngaliwatan conto ieu. Adegan ieu lolobana biru jeung bodas.

Ieu hiji I-pigura. Urang teu bisa make pigura saméméhna keur prediksi, tapi urang bisa niiskeun eta. Urang bakal encode pilihan blok beureum urang. Upami urang ningali tatanggana, urang perhatikeun sababaraha tren warna di sakurilingna.

Urang nganggap yén kelir dina pigura disebarkeun vertikal. Ieu ngandung harti yén warna piksel anu teu dipikanyaho bakal ngandung nilai tatanggana.

Prediksi ieu tiasa janten lepat. Éta pisan sababna naha urang kedah nerapkeun métode ieu (prediksi internal) lajeng ngurangan nilai sabenerna. Ieu bakal masihan urang blok sésa-sésa, anu bakal ngahasilkeun matriks anu langkung dikomprés dibandingkeun sareng aslina.

Upami anjeun hoyong latihan sareng prediksi intra, anjeun tiasa nyiptakeun pidéo nganggo blok makro sareng prediksina nganggo ffmpeg. Pikeun ngartos harti unggal warna blok, anjeun kedah konsultasi kana dokuméntasi ffmpeg.

Atanapi anjeun tiasa nganggo Intel Video Pro Analyzer (sakumaha anu kuring disebutkeun di luhur, versi percobaan gratis dugi ka 10 pigura anu munggaran, tapi éta bakal cekap pikeun anjeun ngamimitian).

Bagian kadua:
sumber: www.habr.com



