Waveletova transformace a kvantovani: ===================================== Mallatuv rozklad - viz dokumenty z 4.9.2000 (jen s tim rozdilem, ze slozky Cb a Cr se rozkladaji stejnym systemem jako Y - maje tedy take 14 bloku): Yinput 720 x 288 = 207360 Y0 360 x 288 = 103680 (H) Y1,Y2,Y3 180 x 144 = 25920 (HHV) Y4,Y5,Y6 90 x 72 = 6480 (HHVHV) Y7,Y8,Y9 45 x 36 = 1620 (HHVHVHV) Y10,Y11,Y12,Y13 23 x 18 = 414 (HHVHVHVHV) C = Cb nebo Cr Cinput 360 x 288 = 103680 C0 180 x 288 = 51840 (H) C1,C2,C3 90 x 144 = 12960 (HHV) C4,C5,C6 45 x 72 = 3240 (HHVHV) C7,C8,C9 23 x 36 = 828 (HHVHVHV) C10,C11,C12,C13 12 x 18 = 216 (HHVHVHVHV) Pro liche rozmery se pred transformaci prida jedna radka / jeden sloupec. Nejlepe kopie krajni radky / sloupce, ale mohou to byt i nuly. Kvantovani: =========== Kvantovani se dela pomoci nasobeni (cislem Q <= 1.0) nasledovanym ZAOKROUHLENIM (tj. prictenim 0.5 a odriznutim desetinnych bitu). Kvantovaci (multiplikativni) hodnota Q se spocita jako prevracena hodnota dekvantovaci hodnoty deQ. Tedy: Q = 1.0 / deQ Vstup kvantovace: cele cislo v presnosti 10.0, vystup: cele cislo 10.0. Pocet desetinnych bitu kvantovaci a de-kvantovaci nasobicky je nutne zvolit tak, aby nedochazelo k velkym zkreslenim - melo by to byt co nejpodobnejsi linearnimu kvantovaci bez mrtve zony ("dead-zone"). Strucne receno: Je-li rekonstrukcni hodnota rovna "K * deQ", mely by se na ni zobrazit (kvantovanim a naslednym de-kvantovanim) vstupni hodnoty "(K - 0.5) * deQ" az "(K + 0.5) * deQ". Pozn: "deQ" odpovida "BW" (bin width) z manualu ADV601, "Q" odpovida "1/BW". Pripravil jsem tabulky de-kvantovacich hodnot pro stupen "zkresleni" (distortion) od 1.00 do 22.62 (jednotlive hodnoty jsou v logaritmicke skale s krokem sqrt(2)). Vztah zkresleni, kvality rekonstrukce a kompresniho pomeru je ukazan na prikladu mych testovacich 260 obrazku v tabulce "performance.txt" (prevod RMSE -> PSNR je v souboru RMSE-PSNR.txt). Uvadeny jsou delky zkomprimovanych obrazku (vzdy obe pole dohromady) a RMSE pro jas i barevne slozky. RMSE do cca 8.0 (PSNR = 20dB) jsou vizualne vetsinou jen malo rozeznatelne, ve videu by se asi dalo koukat i na RMSE = 15.0 (PSNR = 25dB). Rozsah zkresleni 1.00 az 22.62 jsem zvolil "od ruky", zdalo se mi, ze to by mohla byt rozumna sada tabulek, ktere by se v koderu prepinaly externim procesorem (zpetnou vazbou podle dosazeneho kompresniho pomeru). Pro tuto sadu zkresleni jsem optimalizoval Huffmanovy kodeky - pri jine volbe (nebo pri hodne odlisnem charakteru vstupnich dat) by bylo potreba zopakovat tu optimalizaci (to jsem schopen udelat tak za odpoledne - krome CPU casu pocitace se tam musi delat i netrivialni rucni zasahy - souvisi to s delkou Huffmanova kodu omezenou na 8 bitu). Pomery de-kvantovacich hodnot: ------------------------------ K tomu vedly vypocty zalozene na energii jednotlivych Mallatovych bloku a vizualni dulezitosti ruznych frekvenci (podle tabulek z doporuceni JPEG): Pro zkresleni (distortion) D = 1.00: ---------------- Blok deQ ---------------- Y00 104.63378 Y01 8.77963 Y02 37.00000 Y03 6.40317 Y04 1.27502 Y05 4.74747 Y06 0.86738 Y07 0.32030 Y08 0.94476 Y09 0.22591 Y10 0.05340 Y11 0.19150 Y12 0.05339 Y13 0.00000 ---------------- ---------------- Blok deQ ---------------- C00 125.14014 C01 9.56581 C02 31.02000 C03 5.22421 C04 1.27193 C05 5.09769 C06 1.22301 C07 0.31952 C08 1.33211 C09 0.31853 C10 0.07529 C11 0.27002 C12 0.07528 C13 0.00000 ---------------- C = Cb nebo Cr Pro jine zkresleni "D" se cisla deQ timto zkreslenim "D" VYNASOBI. Pokud je deQ mensi nez 1.00, MUSI SE NAHRADIT cislem 1.00. Vzdy musi byt "deQ >= 1.00" a naopak "Q <= 1.00". Na pozadani bude mozne treba i uplne vynechat nejakou slozku (Mallatuv blok) nastavenim prislusneho Q = deQ = 0.0. Napriklad dolni propust na 1/2 pixeloveho kmitoctu se udela potlacenim bloku Y0, Cb0 a Cr0.. De-kvantovani: ============== Opet nasobeni (cislem deQ >= 1.0) s naslednym zaokrouhlenim. Vstup a vystup de-kvantovace: cele cislo v presnosti 10.0. De-kvantovaci konstanty deQ se budou ukladat na disk spolu s komprimovanymi daty pulsnimku. Tak bude zajistena kompatibilita dekoderu s koderem i pro pripad, ze by se pozdeji zmenil algoritmus vyberu Q.