Sembarang raster gambar bisa diwakili ing wangun matriks rong dimensi. Nalika nerangake werna, idea bisa dikembangaké dening looking ing gambar minangka matriks telung dimensi, kang dimensi tambahan digunakake kanggo nyimpen data kanggo saben werna.
Yen kita nganggep warna pungkasan minangka kombinasi sing diarani. werna utami (abang, ijo lan biru), ing matriks telung dimensi kita nemtokake telung bidang: pisanan kanggo abang, kaloro kanggo ijo lan pungkasan kanggo biru.
Kita bakal nelpon saben titik ing matriks iki piksel (unsur gambar). Saben piksel ngemot informasi babagan intensitas (biasane minangka nilai numerik) saben werna. Tuladhane, piksel abang tegese ngandhut 0 ijo, 0 biru lan abang maksimum. Piksel pink bisa kawangun nggunakake kombinasi telung werna. Nggunakake sawetara angka saka 0 kanggo 255, piksel pink ditetepake minangka Abang = 255, Ijo = 192 и Biru = 203.
Artikel iki diterbitake kanthi dhukungan saka EDISON.
Ana akeh model liyane kanggo makili werna sing nggawe gambar. Contone, sampeyan bisa nggunakake palet sing diindeks, sing mbutuhake mung siji bait kanggo makili saben piksel, tinimbang telung sing dibutuhake nalika nggunakake model RGB. Ing model kasebut, bisa nggunakake matriks 2D tinimbang matriks 3D kanggo makili saben warna. Iki ngirit memori, nanging menehi gamut warna sing luwih cilik.
RGB
Contone, deleng gambar ing ngisor iki. Pasuryan pisanan wis rampung dicet. Sing liyane yaiku bidang abang, ijo lan biru (intensitas warna sing cocog ditampilake ing skala abu-abu).
Kita weruh yen warna abang ing asline bakal ana ing papan sing padha ing ngendi bagean paling padhang saka pasuryan kapindho diamati. Nalika kontribusi biru utamané bisa katon mung ing mripat Mario (pasuryan pungkasan) lan unsur sandhangané. Wigati ing ngendi kabeh telung warna pesawat nyumbang paling sithik (bagian paling peteng ing gambar) - kumis Mario.
Kanggo nyimpen intensitas saben werna, sawetara bit dibutuhake - jumlah kasebut diarani ambane dicokot. Ayo dadi ngomong 8 bit ngginakaken (adhedhasar nilai saka 0 kanggo 255) saben bidang werna. Banjur kita duwe ambane warna 24 bit (8 bit * 3 pesawat R / G / B).
Sifat liya saka gambar yaiku Résolusi, yaiku jumlah piksel ing siji dimensi. Asring dituduhake minangka jembar × dhuwur, kaya ing 4 dening 4 conto gambar ing ngisor iki.
Properti liyane sing ditindakake nalika nggarap gambar / video yaiku rasio aspek, nggambarake hubungan proporsional normal antarane jembar lan dhuwur saka gambar utawa piksel.
Nalika padha ngomong yen film utawa gambar tartamtu ukurane 16 dening 9, biasane tegese rasio aspek tampilan (DAR - saka Rasio Aspek Tampilan). Nanging, kadhangkala bisa uga ana macem-macem wujud piksel individu - ing kasus iki kita ngomong babagan rasio piksel (PAR - saka Rasio aspek piksel).
Cathetan kanggo nyonya rumah: DVD соответствует DAR 4 nganti 3
Sanajan resolusi DVD sing nyata yaiku 704x480, nanging isih njaga rasio aspek 4:3 amarga PAR 10:11 (704x10 / 480x11).
Lan pungkasanipun, kita bisa nemtokake видео kaya urutan saka n pigura kanggo periode wektu, sing bisa dianggep minangka ukuran tambahan. A n banjur iku frame rate utawa jumlah pigura per detik (fps - saka Bingkai saben Detik).
Jumlah bit per detik sing dibutuhake kanggo nampilake video yaiku kacepetan transmisi - bitrate.
bitrate = jembaré * dhuwur * ambane bit * pigura per detik
Contone, video 30 fps, 24 bps, 480x240 mbutuhake 82,944,000 bps utawa 82,944 Mbps (30x480x240x24) - nanging yen ora ana cara kompresi sing digunakake.
Yen kacepetan transfer meh pancet, banjur diarani kacepetan transmisi pancet (Ninja - saka bit rate pancet). Nanging bisa uga beda-beda, ing kasus iki diarani baud rate variabel (VBR - saka tingkat bit variabel).
Grafik iki nuduhake VBR winates, ing ngendi ora kakehan bit boroske ing cilik saka pigura rampung peteng.
Insinyur wiwitane ngembangake cara kanggo ngganda tingkat pigura sing dirasakake saka tampilan video tanpa nggunakake bandwidth tambahan. Cara iki dikenal minangka video interlaced; Sejatine, iku ngirim setengah layar ing "pigura" pisanan lan setengah liyane ing "pigura" sabanjuré.
Saiki, pemandangan biasane digawe nggunakake teknologi scanning progresif. Iki minangka cara kanggo nampilake, nyimpen utawa ngirim gambar obah ing ngendi kabeh garis saben pigura digambar kanthi urutan.
Inggih! Saiki kita ngerti kepiye gambar diwakili kanthi digital, kepiye warnane disusun, pirang-pirang bit per detik sing digunakake kanggo nuduhake video, yen tingkat bit konstan (CBR) utawa variabel (VBR). Kita ngerti babagan resolusi sing diwenehake nggunakake tingkat pigura sing diwenehake, kita kenal karo akeh istilah liyane, kayata video interlaced, PAR lan sawetara liyane.
Mbusak redundansi
Dikenal yen video tanpa kompresi ora bisa digunakake kanthi normal. Video dawa jam kanthi resolusi 720p lan 30 pigura per detik bakal njupuk 278 GB. Kita teka ing Nilai iki dening multiply 1280 x 720 x 24 x 30 x 3600 (jembaré, dhuwur, bit saben piksel, FPS lan wektu ing detik).
Gunakake algoritma kompresi lossless, kaya DEFLATE (digunakake ing PKZIP, Gzip lan PNG), ora bakal ngurangi bandwidth sing dibutuhake cukup. Kita kudu golek cara liya kanggo ngompres video.
Kanggo nindakake iki, sampeyan bisa nggunakake fitur saka sesanti kita. Kita luwih apik kanggo mbedakake padhang tinimbang warna. Video minangka seri gambar urutan sing bola-bali liwat wektu. Ana beda cilik antarane pigura jejer saka pemandangan padha. Kajaba iku, saben pigura ngemot akeh wilayah kanthi warna sing padha (utawa padha).
Werna, padhang lan mripat kita
Mripat kita luwih sensitif marang padhang tinimbang warna. Sampeyan bisa ndeleng dhewe kanthi ndeleng gambar iki.
Yen sampeyan ora weruh sing ing sisih kiwa gambar werna kothak A и B asline padha, banjur iku normal. Otak kita meksa supaya luwih fokus marang cahya lan iyub-iyub tinimbang warna. Ing sisih tengen antarane kothak sing ditemtokake ana jumper kanthi warna sing padha - supaya kita (yaiku otak kita) kanthi gampang nemtokake manawa, nyatane, padha warna.
Ayo ndeleng (kanthi cara sing disederhanakake) babagan cara kerja mata. Mripate minangka organ kompleks sing kasusun saka pirang-pirang bagean. Nanging, kita paling kasengsem ing cones lan rod. Mripate ngandhut kira-kira 120 yuta rod lan 6 yuta cones.
Ayo dadi nimbang pemahaman werna lan padhang minangka fungsi kapisah saka bagean tartamtu saka mripat (nyatane, kabeh iku Luwih rumit, nanging kita bakal nyederhanakake). Sel rod tanggung jawab utamane kanggo padhang, dene sel kerucut tanggung jawab kanggo warna. Cones dipérang dadi telung jinis, gumantung saka pigmen sing ana: S-cones (biru), M-cones (ijo), lan L-cones (abang).
Awit kita duwe luwih akeh rod (padhang) tinimbang cones (werna), kita bisa nyimpulake yen kita luwih bisa mbedakake transisi antarane peteng lan cahya tinimbang werna.
Fitur Sensitivitas Kontras
Peneliti ing psikologi eksperimen lan akeh bidang liyane wis ngembangake akeh teori babagan visi manungsa. Lan salah sijine diarani fungsi sensitivitas kontras. Padha ana hubungane karo katerangan spasial lan temporal. Cekakipun, punika bab carane akeh owah-owahan sing dibutuhake sadurunge pengamat sok dong mirsani. Wigati jamak saka tembung "fungsi". Iki amarga kasunyatan manawa kita bisa ngukur fungsi sensitivitas kontras ora mung kanggo gambar ireng lan putih, nanging uga kanggo warna. Asil eksperimen kasebut nuduhake yen ing pirang-pirang kasus mripat kita luwih sensitif marang padhang tinimbang warna.
Amarga kita ngerti yen kita luwih sensitif marang padhang gambar, kita bisa nyoba nggunakake kasunyatan iki.
Model warna
We figured metu sethitik carane bisa karo gambar werna nggunakake skema RGB. Ana uga model liyane. Ana model sing misahake luminance saka chroma lan dikenal minangka YCbCr. Miturut cara, ana model liyane sing nggawe divisi sing padha, nanging kita mung bakal nimbang iki.
Ing model werna iki Y minangka perwakilan padhang, lan uga nggunakake rong saluran warna: Cb (biru sugih) lan Cr (abang sugih). YCbCr bisa asalé saka RGB, lan konversi mbalikke uga bisa. Nggunakake model iki, kita bisa nggawe gambar warna lengkap kaya sing kita deleng ing ngisor iki:
Ngonversi antarane YCbCr lan RGB
Ana sing bakal mbantah: kepiye carane entuk kabeh warna yen ijo ora digunakake?
Kanggo njawab pitakonan iki, ayo ngowahi RGB dadi YCbCr. Ayo nggunakake koefisien sing diadopsi ing standar kasebut BT.601, kang dianjurake dening unit ITU-R. Divisi iki nyetel standar kanggo video digital. Contone: apa 4K? Apa sing kudu dadi frame rate, resolusi, model warna?
Pisanan ayo ngetung padhange. Ayo nggunakake konstanta sing diusulake dening ITU lan ngganti nilai RGB.
Y = 0.299R + 0.587G + 0.114B
Sawise padhang, kita bakal misahake warna biru lan abang:
Cb = 0.564(B - Y)
Cr = 0.713(R - Y)
Lan kita uga bisa ngowahi maneh lan malah dadi ijo nggunakake YCbCr:
R = Y + 1.402Cr
B = Y + 1.772Cb
G = Y - 0.344Cb - 0.714Cr
Biasane, tampilan (monitor, TV, layar, lsp) mung nggunakake model RGB. Nanging model iki bisa diatur kanthi cara sing beda:
Subsampling warna
Kanthi gambar sing dituduhake minangka kombinasi luminance lan chrominance, kita bisa ngeksploitasi sensitivitas sistem visual manungsa sing luwih gedhe kanggo luminance tinimbang chrominance kanthi mbusak informasi kanthi selektif. Chroma subsampling minangka cara ngodhe gambar kanthi resolusi kurang kanggo kroma tinimbang luminance.
Pira sing diidini nyuda resolusi warna?! Pranyata wis ana sawetara diagram sing njlèntrèhaké cara nangani résolusi lan gabung (Warna Asil = Y + Cb + Cr).
Skema kasebut dikenal minangka sistem downsampling lan dituduhake minangka rasio 3 kali lipat - a:x:y, sing nemtokake jumlah sampel luminance lan sinyal prabédan werna.
a - standar sampling horisontal (biasane padha karo 4) x — jumlah sampel kroma ing baris pisanan piksel (resolusi horisontal relatif marang a) y - jumlah owah-owahan ing conto kroma antarane baris pisanan lan kaloro piksel.
Pangecualian punika 4:1:0, nyedhiyakake siji sampel kroma ing saben blok resolusi luminance 4-by-4.
Skema umum sing digunakake ing codec modern:
4:4:4 (ora ana downsampling)
4:2:2
4:1:1
4:2:0
4:1:0
3:1:1
YCbCr 4:2:0 - conto fusi
Punika gambar gabungan nggunakake YCbCr 4:2:0. Elinga yen kita mung mbuwang 12 bit saben piksel.
Iki minangka gambar sing padha, dienkode karo jinis utama subsampling warna. Baris pisanan yaiku YCbCr pungkasan, baris ngisor nuduhake resolusi kroma. Asil banget prayoga, considering mundhut tipis ing kualitas.
Elinga nalika kita ngetung 278 GB ruang panyimpenan kanggo nyimpen file video sing dawane jam kanthi resolusi 720p lan 30 pigura per detik? Yen kita nggunakake YCbCr 4: 2: 0, banjur ukuran iki bakal suda setengah - 139 GB. Nganti saiki, isih adoh saka asil sing bisa ditampa.
Sampeyan bisa entuk histogram YCbCr dhewe nggunakake FFmpeg. Ing gambar iki, biru ndominasi abang, sing katon jelas ing histogram dhewe.
Werna, padhang, gamut warna - review video
Disaranake nonton video sing apik tenan iki. Iku nerangake apa padhange, lan umume kabeh titik burik ё bab padhang lan werna.
Jinis pigura
Ayo nerusake. Ayo dadi nyoba kanggo mbusak redundansi wektu. Nanging pisanan, ayo nemtokake sawetara terminologi dhasar. Contone, kita duwe film kanthi 30 frame per detik, iki 4 bingkai pertama:
Kita bisa ndeleng akeh pengulangan ing pigura: contone, latar mburi biru sing ora owah saka pigura menyang pigura. Kanggo ngatasi masalah iki, kita bisa abstrak klasifikasi menyang telung jinis pigura.
Aku-frame (Intro Frame)
I-frame (bingkai referensi, pigura kunci, pigura njero) mandhiri. Preduli saka apa sing pengin digambarake, pigura-I iku sejatine foto statis. Pigura pisanan biasane I-pigura, nanging kita bakal ajeg mirsani I-pigura malah antarane ora pigura pisanan.
Rangka P (PBingkai redicted)
Pigura P (bingkai prediktif) njupuk kauntungan saka kasunyatan sing meh tansah gambar saiki bisa maleh nggunakake pigura sadurungé. Contone, ing pigura kapindho mung owah-owahan werni maju. Kita bisa njaluk pigura 2 dening mung rada ngowahi pigura 1, mung nggunakake prabédan antarane pigura iki. Kanggo mbangun pigura 2, kita waca pigura 1 sadurunge.
←
Rangka B (Bi-predictive Frame)
Apa bab pranala ora mung kanggo kepungkur, nanging uga kanggo pigura mangsa kanggo nyedhiyani komprèsi malah luwih apik?! Iki Sejatine B-pigura (pigura bidirectional).
← →
Penarikan penengah
Jinis pigura iki digunakake kanggo nyedhiyakake kompresi sing paling apik. Kita bakal ndeleng kepiye kedadeyan kasebut ing bagean sabanjure. Saiki, ayo padha Wigati sing paling "larang" ing syarat-syarat memori migunakaken I-pigura, P-pigura katon luwih murah, nanging pilihan paling duwe bathi kanggo video punika B-pigura.
Redundansi temporal (prediksi antar-bingkai)
Ayo goleki opsi apa sing kudu diminimalisir pengulangan saka wektu. Kita bisa ngatasi jinis redundansi iki nggunakake metode prediksi silang.
Kita bakal nyoba nggunakake sawetara bit kanggo ngode urutan pigura 0 lan 1.
Kita bisa ngasilake pangurangan, kita mung nyuda pigura 1 saka pigura 0. We njaluk pigura 1, mung nggunakake prabédan antarane iku lan pigura sadurungé, nyatane kita mung encode seko asil.
Nanging apa yen aku ngandhani yen ana cara sing luwih apik sing nggunakake bit sing luwih sithik?! Pisanan, ayo ngrusak pigura 0 dadi kothak sing jelas sing kalebu blok. Banjur kita bakal nyoba kanggo cocog pamblokiran saka pigura 0 karo pigura 1. Ing tembung liyane, kita bakal ngira gerakan antarane pigura.
Saka Wikipedia - kompensasi gerakan blok
Kompensasi gerakan pamblokiran mbagi pigura saiki dadi blok sing ora tumpang tindih lan vektor kompensasi gerakan nyatakake asal-usul blok kasebut (misconception umum yaiku sadurunge pigura dipérang dadi pamblokiran non-tumpang tindih, lan vektor ganti rugi gerakan marang ngendi sing pamblokiran pindhah. Nanging nyatane, cara liya - dudu pigura sadurunge sing dianalisis, nanging sabanjure; ora jelas ing ngendi blok kasebut obah, nanging saka ngendi asale). Biasane pamblokiran sumber tumpang tindih ing pigura sumber. Sawetara algoritma komprèsi video nglumpukake pigura saiki saka bagean ora malah siji, nanging sawetara pigura sadurunge ditularaké.
Sajrone proses evaluasi, kita weruh yen bal wis pindhah saka (x= 0, y= 25) nganti (x= 6, y=26), nilai x и y nemtokake vektor gerakan. Langkah liya sing bisa ditindakake kanggo ngreksa bit yaiku ngode mung bedane vektor gerakan antarane posisi blok pungkasan lan sing diprediksi, dadi vektor gerakan pungkasan yaiku (x=6-0=6, y=26-25=1 ).
Ing kahanan nyata, bal iki bakal dipérang dadi n pamblokiran, nanging iki ora ngganti inti saka prakara.
Obyek ing pigura pindhah ing telung dimensi, supaya nalika werni gerakane, iku bisa dadi visual cilik (utawa luwih gedhe yen gerakane menyang panampil). Iku normal sing ora bakal ana match sampurna antarane pamblokiran. Punika tampilan gabungan perkiraan kita lan gambar nyata.
Nanging kita weruh yen kita nggunakake taksiran gerakan, ana data noticeably kurang kanggo coding saka nalika nggunakake cara prasaja kanggo ngitung delta antarane pigura.
Apa kompensasi gerakan nyata bakal katon kaya
Teknik iki ditrapake kanggo kabeh blok sekaligus. Asring bal obah kondisional kita bakal dipérang dadi sawetara blok bebarengan.
Sampeyan bisa ngrasakake konsep kasebut kanthi nggunakake dhewe jupyter.
Kanggo ndeleng vektor gerakan, sampeyan bisa nggawe video prediksi eksternal nggunakake ffmpeg.
Sampeyan uga bisa nggunakake Intel Video Pro Analyzer (iku mbayar, nanging ana nyoba gratis sing diwatesi mung kanggo sepuluh pigura pisanan).
Redundansi spasial (prakiraan internal)
Yen kita nganalisa saben pigura ing video, kita bakal nemokake akeh wilayah sing saling nyambungake.
Ayo dadi liwat conto iki. Pemandangan iki utamané kasusun saka werna biru lan putih.
Iki minangka I-frame. Kita ora bisa njupuk pigura sadurungé kanggo prediksi, nanging kita bisa compress. Ayo encode pilihan saka blok abang. Yen kita katon ing tanggi, kita sok dong mirsani sing ana sawetara tren werna watara.
Kita nganggep yen werna nyebar vertikal ing pigura. Tegese warna piksel sing ora dingerteni bakal ngemot nilai tetanggan.
Ramalan kasebut bisa uga salah. Mulane sampeyan kudu nggunakake metode iki (ramalan internal), banjur nyuda nilai nyata. Iki bakal menehi pemblokiran ampas, sing bakal ngasilake matriks sing luwih dikompres dibandhingake karo asline.
Yen sampeyan pengin latihan karo prediksi internal, sampeyan bisa nggawe video macroblocks lan prediksi nggunakake ffmpeg. Kanggo mangerteni makna saben werna blok, sampeyan kudu maca dokumentasi ffmpeg.
Utawa sampeyan bisa nggunakake Intel Video Pro Analyzer (kaya sing wis kasebut ing ndhuwur, versi nyoba gratis diwatesi ing 10 pigura pisanan, nanging iki bakal cukup kanggo sampeyan ing wiwitan).