Hranice zmenšování velikosti JPG souboru

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Komprimace
« Odpověď #30 kdy: 22. 03. 2017, 05:10:23 »
Pokud dat není nekonečně mnoho, vždy lze nalézt rovnici, která je generuje.
Mas pravdu, ale rovnica vacsia ako data je na komprimaciu nevhodna.

Dat není nekonečně mnoho, protože počet všech možných obrazů třeba na displeji je sice veliký, ale konečný. Všechny další možnosti uspořádání pixelů je už opakování. Když se to vztahne na sítnici oka, tak v našem vesmíru můžeme nafotit jen konečný počet fotek. Při dalším focení už nafotíme jen ty samý fotky, vesmír by se z našeho pohledu začal opakovat, pokud by byl dostatečně velký:)
No... když vezmu hodně blbý rozlišení 640x480 a 24 bitů, dostaneme se k tomu, že každý obrázek je zakódován jako 7372800 bitová informace, což nám dává cca 8,95*10^2219433 možností... hmmmm, tudy cesta nepovede... Nicméně mě to přivedlo k tomu, že obyčejná fotka z telefonu nebo webkamery je za "normálních světelných podmínek" hodně slušným zdrojem entropie :D


Ivan Nový

Re:Hranice zmenšování velikosti JPG souboru
« Odpověď #31 kdy: 22. 03. 2017, 06:42:34 »
Taky je cesta kdy dekompresni algoritmus ma databazi fragmentu. Treba takova obloha nebo trava. Samotny soubor obrazku by mel jen nejaka metadata, ze tahle vrstva je obloha typu YYY a tohle trava typu XXX. Pri dekompresi by algoritmus ty vrstvy dogeneroval. A ta databaze muze mit klidne treba 1GB, to zvladnou i telefony. Vzhledem na to, ze 99% obrazku na vebu je konzumniho charakteru, tedy jednou kouknes a uz nikdy vice, tak to jestli vidis tu oblohu dogenerovanou nebo originalni nemuze hrat roli. Samozrejme by tam byl nejaky fallback na dodatecne stazeni originalniho obrazku pro pripad potreby.

To je fajn nápad, dalo by se to využít i pro generování obrázků do grafiky webu bez nutnosti používat fotografie z reálného světa.

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Komprimace
« Odpověď #32 kdy: 22. 03. 2017, 09:34:31 »
No... když vezmu hodně blbý rozlišení 640x480 a 24 bitů, dostaneme se k tomu, že každý obrázek je zakódován jako 7372800 bitová informace, což nám dává cca 8,95*10^2219433 možností... hmmmm, tudy cesta nepovede... Nicméně mě to přivedlo k tomu, že obyčejná fotka z telefonu nebo webkamery je za "normálních světelných podmínek" hodně slušným zdrojem entropie :D
Pokud by to někoho trochu zajímalo, udělal jsem drobný experiment, napsal si na o prográmek, pořídil nějaké fotky mobilem a výsledek se zdá být značně uspokojivý...
Kód: [Vybrat]
F/je+WRalxYnnKZICcqqns+tHaUbpcvXTPzxZBTM70Wbgq1UMd/ALT68+9tK/xmKgFFkmLI8El63
RC05HC1pzL0nsDAfytSbnCbN3qCWkIDC7kVJ5lSOQpqHqackEcPInPwM1K+vsADQztT+gmPXAYB5
cMrBdE3oCf9q4OjtiOJ7D6oxj7uBOxoq9Jhwe1UGGACiUNXz74w3Wv6vxgvibNSAruTlei4t+rN9
UEoYAvZGXack6PKkORhn1yh01p4zvHnsNfOVFAIDP/4OWtlafsH/3CVOrBoNxSOnJT+/kYUv+hQh
zP7sZF8G3xv98/XMMYCCgDFQSh9IqswA+ZvtTw==
Kód: [Vybrat]
QhY3g5hHSd9A+E+Hezgule3RXlS5g465i4TK5J9kAzX9E858dq/gQ0JNYrCyqIq1052meqs7LB/i
9MjoMjlsGNTopZiAh/yL+PDbQo3APZ46SeLLr+xOHkg/fkdMex9fo2VSf6pRX718y/j3SBkDwcFv
lk15s/FOGGvjWau7Yp9C0/fRf/+eTW0tA/To4tyendQJKntXwJ7WTfFjuTz/EroB1XcLm/MwozJR
qzo13w+bM3ePHHb2zjUxqPsUAmMYRDqHyskJ2URfkeNRPaGXmhTDvQCruRhuTcQPT97hnWnOy/MC
d+Brisap72EfgAyQ8fWWDblNLetLkQ09GBausg==
Kód: [Vybrat]
3DL98q3cNm89DTGul5xUQzlj6KRLlz6lkprRIOQHBFRJOLQuk3rhzOExdpqSQXhwlICm65TNfNw3
/YY/euEZv9OmCzUqKuv5rWOPa1L35XMyZfmxcNaOjNBZSf2kcNXVeKgG2qOdSJe9tvxoFli13ikX
24QCj0MOtw1bUPHukn2p9zyLGN+DPJa1Zi9JYC8Z0a4wpBr153un+uwcUH1ZoiU4rEgAaSE5uSOF
95/2iliuEcasDgo5NJ4pHoaQMKE/ucx6a57AhunnTDC/Qw+f3tQt/mHutEQBUPaTtkCFUf9uRiiR
phh1xGIkjo8qPiYt3mlaROMl3b9tXtwJ6sBgHQ==

jedná se o base64 enkódované 2048 bitů dlouhé řetězce, přičemž první dva jsou téměř ty samé fotky pořízené cca vteřinu po sobě, to poslední je fotka čistě bílé zdi. Fotky jsem vzal, uložil do BMP a program je  po uříznutí hlavičky zpracoval tak, že vzal původní data a dokud byla alespoň dvojnásobná něž požadovaná délka (2048 bitů), vzal vždy dva sousední bity a XORem z nich udělal jeden, čímž data zmenšil na polovinu. Dokud byl výsledek alespoň dvojnásobný, než 2048bitů, postup opakoval. Z konečného výsledku usekl rovnoměrně začátek i konec, tak, aby požadovaná data o délce 2048 bitů byla ze středu a to uložil. Poté jsem to jen překódoval do base64, aby to bylo hezky vidět.
No co vy na to? :)

dw

Re:Komprimace
« Odpověď #33 kdy: 22. 03. 2017, 16:56:58 »
Jinak nápad je to skvělý, upravit komprimovaný soubor před komprimací tak, aby se usnadnila komprimace a zároveň se využila dekompresní kapacita lidského mozku, která si odstraněné detaily domyslí a vyrovná.

Tak funguje i stary dobry JPEG...

No myslím, že starý dobrý JPEG tolik nepočítá s funkcí mozku, ale data vyhodnocuje statisticky na základě histogramu a jeho naivního ořezání.

To ne, prvni krok, tj. prevod z RGB na YCbCr a nasledny krok podvzorkovani barev je zalozen na vnimani obrazu clovekem. Nejaky jiny tvor, ktery vnima spis odstiny a mene svetlost (resp. rozdily svetlosti), by potreboval uplne jinou transormaci.

YCbCr nie je ludske vnimanie. Clovek vnima RGB - https://cs.wikipedia.org/wiki/%C4%8C%C3%ADpek_(oko)#Funkce

YCbCr je dedicstvo z analogovej televizie ked bolo treba k jasovemu signalu Y pridat farbu. Aby signal s pridanou farbou bol mozny pozerat aj na CB televizii tak bol zvoleny tento model, z ktoreho sa RGB lahko dopocita (stacia k tomu 2 tranzistory a par rezistorov).

netvrdil jsem, ze oko vnima YCbCr, ale do tohoto prostoru se prevadi proto, ze clovek vic rozlisuje jas (tedy Y slozku) a mnohem min odstiny (tedy rozdilove Cb Cr). Proto JPEG muze Cb Cr podvzorkovat a to tak, ze hodne (2x v kazde ose).

Proc to tak je se doctes, kdyz si roklepnes odkaz na Tycinky z te Tebou odkazovane wiki stranky:
"V lidské sítnici se nachází asi 120 milionů tyčinek, tedy dvacetkrát více než čípků"

Tudiz mame dva systemy videni - Y + RGB, pricemz Y ma radove vetsi rozliseni

Je to naozaj len koli spatnej kompatibilite, ciernobiela TV musela vediet zobrazit PAL/SECAM obraz. A kedze je JPEG odvodeny od MPEG, tak prebera tu jeho vlastnost ze zobrazovacia jednotka bude v zaciatkoch prave analog TV... Naviac sa to lepsie komprimuje ako povodne RGB...

Ked tak trocha podrobnejsie: cb vysielanie je analogovo modulovany signal, PAL k nemu pridava kvadraturne modulovany signal na nosnej frekvencii vyssej ako je nosna frekvencia jasu. Tym padom cb tv PAL signal zobrazi normalne ako cb obraz bez toho aby sa do povodneho cb prijimaca muselo zasahovat. A naopak PAL prijimac zobrazi cb vysielanie ako ciernobiele, pretoze ma informaciu o jase.

YUV s tycinkami alebo capikmi nema spolocneho nic...

phi

Re:Komprimace
« Odpověď #34 kdy: 22. 03. 2017, 17:45:45 »
No... když vezmu hodně blbý rozlišení 640x480 a 24 bitů, dostaneme se k tomu, že každý obrázek je zakódován jako 7372800 bitová informace, což nám dává cca 8,95*10^2219433 možností... hmmmm, tudy cesta nepovede... Nicméně mě to přivedlo k tomu, že obyčejná fotka z telefonu nebo webkamery je za "normálních světelných podmínek" hodně slušným zdrojem entropie :D
Pokud by to někoho trochu zajímalo, udělal jsem drobný experiment, napsal si na o prográmek, pořídil nějaké fotky mobilem a výsledek se zdá být značně uspokojivý...
Kód: [Vybrat]
F/je+WRalxYnnKZICcqqns+tHaUbpcvXTPzxZBTM70Wbgq1UMd/ALT68+9tK/xmKgFFkmLI8El63
RC05HC1pzL0nsDAfytSbnCbN3qCWkIDC7kVJ5lSOQpqHqackEcPInPwM1K+vsADQztT+gmPXAYB5
cMrBdE3oCf9q4OjtiOJ7D6oxj7uBOxoq9Jhwe1UGGACiUNXz74w3Wv6vxgvibNSAruTlei4t+rN9
UEoYAvZGXack6PKkORhn1yh01p4zvHnsNfOVFAIDP/4OWtlafsH/3CVOrBoNxSOnJT+/kYUv+hQh
zP7sZF8G3xv98/XMMYCCgDFQSh9IqswA+ZvtTw==
Kód: [Vybrat]
QhY3g5hHSd9A+E+Hezgule3RXlS5g465i4TK5J9kAzX9E858dq/gQ0JNYrCyqIq1052meqs7LB/i
9MjoMjlsGNTopZiAh/yL+PDbQo3APZ46SeLLr+xOHkg/fkdMex9fo2VSf6pRX718y/j3SBkDwcFv
lk15s/FOGGvjWau7Yp9C0/fRf/+eTW0tA/To4tyendQJKntXwJ7WTfFjuTz/EroB1XcLm/MwozJR
qzo13w+bM3ePHHb2zjUxqPsUAmMYRDqHyskJ2URfkeNRPaGXmhTDvQCruRhuTcQPT97hnWnOy/MC
d+Brisap72EfgAyQ8fWWDblNLetLkQ09GBausg==
Kód: [Vybrat]
3DL98q3cNm89DTGul5xUQzlj6KRLlz6lkprRIOQHBFRJOLQuk3rhzOExdpqSQXhwlICm65TNfNw3
/YY/euEZv9OmCzUqKuv5rWOPa1L35XMyZfmxcNaOjNBZSf2kcNXVeKgG2qOdSJe9tvxoFli13ikX
24QCj0MOtw1bUPHukn2p9zyLGN+DPJa1Zi9JYC8Z0a4wpBr153un+uwcUH1ZoiU4rEgAaSE5uSOF
95/2iliuEcasDgo5NJ4pHoaQMKE/ucx6a57AhunnTDC/Qw+f3tQt/mHutEQBUPaTtkCFUf9uRiiR
phh1xGIkjo8qPiYt3mlaROMl3b9tXtwJ6sBgHQ==

jedná se o base64 enkódované 2048 bitů dlouhé řetězce, přičemž první dva jsou téměř ty samé fotky pořízené cca vteřinu po sobě, to poslední je fotka čistě bílé zdi. Fotky jsem vzal, uložil do BMP a program je  po uříznutí hlavičky zpracoval tak, že vzal původní data a dokud byla alespoň dvojnásobná něž požadovaná délka (2048 bitů), vzal vždy dva sousední bity a XORem z nich udělal jeden, čímž data zmenšil na polovinu. Dokud byl výsledek alespoň dvojnásobný, než 2048bitů, postup opakoval. Z konečného výsledku usekl rovnoměrně začátek i konec, tak, aby požadovaná data o délce 2048 bitů byla ze středu a to uložil. Poté jsem to jen překódoval do base64, aby to bylo hezky vidět.
No co vy na to? :)
Dobry. Kdysi jsem cetl bakalarku ktera resila pouziti sumu z digitalnich fotografii coby zdroje entropie. Celkem to tomu studentovi i vychazelo, vytezil nejaky zlomek bitu na pixel.


phi

Re:Hranice zmenšování velikosti JPG souboru
« Odpověď #35 kdy: 22. 03. 2017, 17:46:51 »
Bily sum mame v matlabu uz pres 20 let :)
nejaky urcite :)

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Komprimace
« Odpověď #36 kdy: 22. 03. 2017, 19:49:43 »
Dobry. Kdysi jsem cetl bakalarku ktera resila pouziti sumu z digitalnich fotografii coby zdroje entropie. Celkem to tomu studentovi i vychazelo, vytezil nejaky zlomek bitu na pixel.
No a proč ne. Pixelů je při nějakým běžným nižším rozlišení celkem dost. Kolik má běžnej mobil z Číny? 8mpix? A šum je tam obrovskej :D Pro generování řekněme 1024 bitů na snímek je to asi nejlepčí entropie, která se dá z běžnýho dementoanndroidu vytáhnout :D

tisnik

Re:Komprimace
« Odpověď #37 kdy: 23. 03. 2017, 08:09:21 »
Je to naozaj len koli spatnej kompatibilite, ciernobiela TV musela vediet zobrazit PAL/SECAM obraz. A kedze je JPEG odvodeny od MPEG, tak prebera tu jeho vlastnost ze zobrazovacia jednotka bude v zaciatkoch prave analog TV... Naviac sa to lepsie komprimuje ako povodne RGB...

Dulezita je ta posledni veta - komprimuje se to lip proto, ze Cb a Cr slozky podvzorkujes v pomeru 1:2 nebo i 1:4 a v podstate se to nepozna. Snizeni objemu dat - i kdyby se nedelala navazna DCT+vahovani+Huffman/aritmeticke kodovani, bude na 66% nebo i na 50%
https://www.root.cz/clanky/ztratova-komprese-obrazovych-dat-pomoci-jpeg#k04

Dalsim duvodem je to, ze i po DCT se Cb a Cr kanaly vahuji s mensimi koeficienty (zjednodusene: aby vyslo co nejvic nul), protoze to opet neni tak viditelne.

dw

Re:Komprimace
« Odpověď #38 kdy: 23. 03. 2017, 10:54:48 »
Je to naozaj len koli spatnej kompatibilite, ciernobiela TV musela vediet zobrazit PAL/SECAM obraz. A kedze je JPEG odvodeny od MPEG, tak prebera tu jeho vlastnost ze zobrazovacia jednotka bude v zaciatkoch prave analog TV... Naviac sa to lepsie komprimuje ako povodne RGB...

Dulezita je ta posledni veta - komprimuje se to lip proto, ze Cb a Cr slozky podvzorkujes v pomeru 1:2 nebo i 1:4 a v podstate se to nepozna. Snizeni objemu dat - i kdyby se nedelala navazna DCT+vahovani+Huffman/aritmeticke kodovani, bude na 66% nebo i na 50%
https://www.root.cz/clanky/ztratova-komprese-obrazovych-dat-pomoci-jpeg#k04

Dalsim duvodem je to, ze i po DCT se Cb a Cr kanaly vahuji s mensimi koeficienty (zjednodusene: aby vyslo co nejvic nul), protoze to opet neni tak viditelne.

njn, ale s fyziologiou ludskeho oka to nema nic spolocne :) btw, to co tu cely cas pisem mas popisane v 3 kapitole toho clanku co si pripojil...