Strona główna Algorytmy i Struktury Danych Kompresja obrazu DCT (zasada JPEG)

🖼️ Kompresja obrazu DCT (zasada JPEG)

Dyskretna transformata kosinusowa kompresuje blok 8×8 pikseli tak jak JPEG. DCT-II: X_k = 2·Σx_n·cos(π(2n+1)k/2N). Kwantyzuj współczynniki wysokich częstotliwości. Zobacz stopień kompresji na tle jakości.

Algorytmy i Struktury Danych2DŁatwy60 FPS
dct-compression ↗ Otwórz osobno
Interfejs samej symulacji jest w języku angielskim.

Jak to działa

JPEG dzieli obraz na bloki pikseli 8×8, przesuwa wartości, odejmując 128, a następnie stosuje dwuwymiarowe DCT-II. Wynikowe 64 współczynniki są dzielone przez macierz kwantyzacji (skalowaną przez współczynnik jakości) i zaokrąglane do liczb całkowitych. Odwrotne DCT rekonstruuje blok — z przybliżeniem stratnym. Współczynnik DC reprezentuje średnią bloku; współczynniki AC kodują zawartość częstotliwości przestrzennej.

DCT-II: X[u][v] = (2/N) c(u)c(v) ΣΣ f[x][y] cos(π(2x+1)u/2N) cos(π(2y+1)v/2N) c(0) = 1/√2, c(k) = 1 dla k>0 Jakość → skala: s = (100−Q)/50 jeśli Q<50, inaczej 50/Q Skwantowany: Q[u][v] = round(X[u][v] / (step[u][v] · s))

Standardowa macierz kwantyzacji luminancji JPEG przypisuje niskie kroki niskim częstotliwościom (lewy górny róg) i wysokie kroki wysokim częstotliwościom (prawy dolny róg). Przy niskiej jakości większość współczynników AC staje się zerem, dając artefakty blokowe, ale mały rozmiar pliku.

Najczęściej zadawane pytania

Czym jest dyskretna transformata kosinusowa (DCT)?

DCT wyraża sekwencję wartości w postaci funkcji bazowych kosinusa o różnych częstotliwościach. DCT-II jest używana w JPEG: X_k = 2·Σ x_n·cos(π(2n+1)k/2N) dla k=0…N-1.

Dlaczego JPEG używa bloków 8×8?

Bloki 8×8 balansują koszt obliczeniowy i korelację: sąsiednie piksele są silnie skorelowane, więc 64-współczynnikowe DCT efektywnie koncentruje energię w składnikach niskoczęstotliwościowych. Większe bloki zwiększają artefakty przy niskiej jakości.

Czym jest kwantyzacja w JPEG?

Kwantyzacja dzieli każdy współczynnik DCT przez krok i zaokrągla do liczby całkowitej. Współczynniki wysokoczęstotliwościowe używają większych kroków, więc stają się zerem — główne źródło kompresji stratnej. Niższa jakość → większe kroki → więcej zer.

Czym są artefakty kompresji JPEG?

Artefakty blokowe pojawiają się na granicach bloków, ponieważ sąsiednie bloki 8×8 są kompresowane niezależnie. Artefakty dzwonienia (zjawisko Gibbsa) pojawiają się w pobliżu ostrych krawędzi, gdy współczynniki wysokoczęstotliwościowe są odrzucane.

Dlaczego DCT koncentruje energię lepiej niż DFT?

DCT niejawnie zakłada parzyste symetryczne rozszerzenie sygnału, eliminując nieciągłość na granicach bloku, którą widziałaby DFT. Czyni to bazę DCT niemal optymalną transformatą Karhunena-Loève'a dla typowych statystyk obrazu.

Czym jest współczynnik DC?

Współczynnik DC (k=0) jest proporcjonalny do średniej wartości pikseli w bloku. Jest to największy współczynnik i jest zwykle kodowany za pomocą DPCM (różnica względem DC poprzedniego bloku) w JPEG.

Czym jest skanowanie zygzakowate w JPEG?

Po kwantyzacji macierz współczynników 8×8 jest odczytywana w kolejności zygzakowatej od niskiej do wysokiej częstotliwości. Grupuje to niezerowe współczynniki niskoczęstotliwościowe na początku i tworzy długie serie zer do kodowania entropijnego.

Jak podpróbkowanie chrominancji poprawia kompresję JPEG?

Ludzki wzrok jest bardziej wrażliwy na luminancję (Y) niż chrominancję (Cb, Cr). JPEG konwertuje RGB na YCbCr i podpróbkowuje Cb/Cr (np. 4:2:0 zmniejsza o połowę oba wymiary), redukując dane jeszcze przed uruchomieniem DCT.

Jaka jest różnica między JPEG a JPEG 2000?

JPEG używa DCT na blokach 8×8; JPEG 2000 używa transformaty falkowej (DWT) na całym obrazie. JPEG 2000 unika artefaktów blokowych, wspiera tryb bezstratny i zapewnia lepszą jakość przy wysokich współczynnikach kompresji, ale jest wolniejsze.

Jaki współczynnik jakości powinienem użyć dla obrazów webowych?

Jakość 75–85 jest standardem dla zastosowań webowych, oferując dobrą równowagę między rozmiarem pliku a jakością wizualną. Jakość poniżej 60 powoduje widoczne artefakty blokowe. Dla miniatur jakość 50–65 jest często akceptowalna.

O tej symulacji

Ta symulacja uruchamia dokładny rdzeń kompresji JPEG na pojedynczym bloku pikseli 8×8: dwuwymiarową transformatę DCT-II, dzielenie przez standardową macierz kwantyzacji luminancji JPEG przeskalowaną przez wybrany współczynnik jakości oraz odwrotne DCT, by zrekonstruować stratny wynik. Przełączanie typów wzorców pokazuje, jak gradienty, krawędzie, szachownice i losowy szum kompresują się zupełnie inaczej przy tym samym ustawieniu jakości.

🔬 Co pokazuje

Cztery panele 8×8 obok siebie — Oryginał, Współczynniki DCT (skala logarytmiczna), Zrekonstruowany i Błąd×5 — lub, po przełączeniu widoku, czerwono-niebieska mapa cieplna samych skwantowanych współczynników z ich wartościami całkowitymi wydrukowanymi na każdej komórce.

🎮 Jak korzystać

Wybierz wzorzec bloku z listy rozwijanej, przeciągnij suwak Współczynnika jakości od 1 do 100, by na żywo obserwować kompromis między współczynnikiem kompresji a PSNR, dostosuj Zoom dla bliższego widoku i naciśnij Przełącz widok (lub klawisz I), by bezpośrednio zbadać siatkę skwantowanych współczynników.

💡 Czy wiesz, że?

Wzorzec losowego szumu jest najgorszym przypadkiem dla całego tego schematu — ponieważ DCT dobrze koncentruje energię tylko wtedy, gdy sąsiednie piksele są skorelowane, szum rozprasza mniej więcej równą energię na wszystkie 64 współczynniki, więc nawet przy wysokich ustawieniach jakości współczynnik kompresji ledwo się poprawia, w przeciwieństwie do wzorca gradientu, gdzie niemal cały blok zapada się do pojedynczego współczynnika DC.

Najczęściej zadawane pytania

Dlaczego wzorzec Ostrej krawędzi tworzy widoczne artefakty „Błąd×5”, których nie tworzy Gradient?

Twarda krawędź wewnątrz bloku ma energię rozłożoną na wielu wysokoczęstotliwościowych współczynnikach DCT, a to dokładnie te współczynniki, przez które macierz kwantyzacji dzieli przy użyciu największych kroków — po skwantowaniu do zera odwrotne DCT nie może odzyskać ostrego przejścia, tworząc widoczne w panelu błędu dzwonienie podobne do zjawiska Gibbsa.

Dlaczego obniżenie suwaka Jakości tak mocno zwiększa kompresję „Niezerowych współczynników”?

Czynnik skali kwantyzacji rośnie gwałtownie poniżej jakości 50 (skala = 5000/Q), mnożąc każdy wpis macierzy kwantyzacji JPEG i popychając coraz więcej mniejszych współczynników AC do zaokrąglenia dokładnie do zera — statystyki Niezerowe współczynniki i Kompresja aktualizują się na żywo, pokazując mniej ocalałych współczynników przy niskiej jakości.

Co dokładnie mierzy tutaj liczba PSNR?

PSNR (szczytowy stosunek sygnału do szumu) jest obliczany bezpośrednio z błędu średniokwadratowego między oryginalnym a zrekonstruowanym blokiem 8×8 za pomocą 10·log10(255²/MSE) — wyższe PSNR oznacza wierniejszą rekonstrukcję, i możesz obserwować, jak rośnie ku nieskończoności w miarę podnoszenia jakości, gdy MSE kurczy się ku zeru.

Dlaczego tylko garstka komórek na mapie cieplnej współczynników ma duże liczby?

Dla wzorców strukturalnych dwuwymiarowe DCT koncentruje większość energii bloku w niskoczęstotliwościowych współczynnikach blisko lewego górnego rogu (u=0, v=0 to człon DC), co jest dokładnie powodem, dla którego macierz kwantyzacji JPEG przypisuje tym komórkom małe kroki — duże ocalałe liczby, które widzisz, są niemal zawsze skupione właśnie tam.

Dlaczego wzorzec Szachownicy zachowuje się tak inaczej niż Gradient przy tej samej jakości?

Szachownica zmienia się na każdym pikselu, co jest najwyższą możliwą częstotliwością przestrzenną i mapuje się niemal całkowicie na pojedynczą najwyższą częstotliwościowo funkcję bazową DCT, a nie na człon DC — więc przy niskiej jakości ten współczynnik zostaje całkowicie skwantowany do zera, a rekonstrukcja zapada się do płaskiego szarego bloku, w przeciwieństwie do gradientu, który przetrwa, ponieważ jego energia leży w niskich, dobrze zachowanych częstotliwościach.

Podobne symulacje