kwantyzacja
Transkrypt
kwantyzacja
Beata Szymańska Wojciech Topolski Marcin Tomasik KWANTYZACJA WEKTOROWA 1 SPIS TREŚCI 1. Idea kwantyzacji wektorowej.........................................................................................3 1.1 Kwantyzacja..........................................................................................................3 1.2 Kwantyzacja wektorowa.......................................................................................3 1.3 Cechy kwantyzacji wektorowej............................................................................3 2. Fazy pracy kwantyzatora wektorowego.........................................................................4 2.1 Etap wstępny.........................................................................................................4 2.2 Faza klasteryzacji..................................................................................................4 2.3 Faza właściwa.......................................................................................................4 3. Generalizacja książki kodowej.......................................................................................5 3.1 Algorytm k-średnich..............................................................................................5 3.2 Algorytm LBG......................................................................................................6 3.3. Inicjalizacja książki kodowej................................................................................6 3.3.1. Metoda losowania........................................................................................6 3.3.2 Metoda grupowania......................................................................................6 3.3.3 Metoda rozdzielania.....................................................................................6 4. Problem pustych komórek..............................................................................................6 5. Algorytm opisowy programu z fragmentami kodu........................................................7 6. Bibliografia.....................................................................................................................8 2 1. Idea kwantyzacji wektorowej 1.1 Kwantyzacja Zanim przejdziemy do omawiania kwantyzacji wektorowej, wyjaśnijmy co rozumiemy przez kwantyzacje. Kwantyzacja polega na reprezentowaniu dużego zbioru wartości (być może nieskończonego) za pomocą wartości ze zbioru mniejszego. W kwantyzacji dążymy do osiągnięcia: • minimalnych zniekształceń • maksymalnego stopnia kompresji. 1.2 Kwantyzacja wektorowa Kwantyzacja wektorowa polega na grupowaniu danych wejściowych (pojedynczych próbek) w n-wymiarowe wektory lub bloki. Następnie dokonujemy kwantyzacji tych wektorów. Dekompozycja danych na wektory n-wymiarowe oraz sama konstrukcja takich wektorów zależy od rodzaju danych wejściowych i zachodzących pomiędzy nimi korelacji. 1.3 Cechy kwantyzacji wektorowej Metoda wektorowej kwantyzacji jest silnie niesymetryczna jako metoda kompresji. Czas kompresji, ze względu na konieczność wielokrotnego przeszukiwania książki kodów (słownika) jest znacznie dłuższy od czasu dekompresji, w której na podstawie odczytywanych indeksów pobierane są kolejno ze słownika odpowiednie wektory kodu. W porównaniu z kwantyzacją skalarną, kwantyzacja wektorowa prowadzi do zmniejszenia zniekształceń przy ustalonej średniej bitowej. 3 2. Fazy pracy kwantyzatora wektorowego 2.1 Etap wstępny Ze względu na to, że w kwantyzacji wektorowej kwantyzowanych jest jednocześnie kilka wartości (co najmniej dwie), w etapie wstępnym dokonujemy formatowania danych wejściowych do postaci N wektorów n-wymiarowych. 2.2 Faza klasteryzacji Konstrukcja książki kodowej (słownika) zawierającej K „najlepszych” reprezentantów całego zbioru danych, tzw. wektorów kodowych. Każdemu wektorowi kodowemu przypisany jest binarny indeks. 2.3 Faza właściwa (indeksacja) Odwzorowanie wektorów wejściowych X danych na wektory kodowe Y słownika. Najodpowiedniejszy wektor jest dobierany na podstawie zdefiniowanej reguły minimalnego zniekształcenia. Miara tego zniekształcenia powinna być z jednej strony prosta obliczeniowo, z drugiej zaś dobrze odpowiadać rzeczywistej degradacji informacji w procesie zastępowania danego wektora poprzez wybrany wektor kodu. 3. Generacja książki kodowej 6.1 Algorytm k-średnich Dane wejściowe: duży zbiór wektorów wygenerowanych przez źródło, zwany zbiorem uczącym, początkowy zbiór k reprezentatywnych wzorców. Dane wyjściowe: k grup wektorów zgromadzonych wokół punktów wyjściowych. Algorytm polega na przyporządkowaniu każdemu elementowi ze zbioru uczącego najbliższy mu wzorzec. Po przypisaniu wzorców wszystkim elementom ze zbioru uczącego, każdy wzorzec jest zastępowany przez środek ciężkości obliczony ze wszystkich elementów przypisanych do tego wzorca. 4 Algorytm działa w następujący sposób: { } 1. Wybierz dowolnie początkowy zbiór rekonstruowanych wartości y i ( 0 ) k = 0 , D ( 0 ) = 0 . Wybierz próg ε. 2. Znajdź granice decyzyjne: y (jk+ )1 + y (jk ) (k) bj = 2 M i= 1 . Ustal j=1,2,....M-1 3. Oblicz zniekształcenie: D (k) M ∑∫ = bi( k ) bi(−k1) i=1 ( x − y i ) 2 fx ( x ) dx. 4. Jeśli D ( k ) − D ( k − 1) < ε , zakończ obliczenia: w przeciwnym przypadku kontynuuj. 5. Przyjmij k = k + 1 . Oblicz nowe rekonstruowane wartości y (k ) j = ∫ b (j k −1 ) k −1 ) b (j − 1 ∫ xfx ( x ) dx b (j k −1 ) fx ( x ) dx k −1 b (j − 1 Wróć do kroku 2. 6.2 Algorytm LBG Uogólnienie algorytmu Lloyda (k-średnich). Wartości wejściowe nie muszą być skalarami. Algorytm działa w następujący sposób: { } 1. Wybierz dowolnie początkowy zbiór rekonstruowanych wartości Yi ( 0 ) k = 0 , D ( 0 ) = 0 . Wybierz próg ε. M i= 1 . Ustal 2. Znajdź obszary kwantyzacji: Vi ( k ) = { X : d ( X ,Y i) < d ( X , Y j )∀ j ≠ i} i=1,2,....M-1 3. Oblicz zniekształcenie: D (k) = M ∑∫ i=1 Vi ( k ) X − Yi ( k ) 2 fx ( X ) dX . 5 D ( k ) − D ( k − 1) < ε , zakończ obliczenia: w przeciwnym przypadku kontynuuj. 4. Jeśli D (k ) M 5. Przyjmij k = k + 1 . Znajdź nowe rekonstruowane wartości Yi ( k ) i = 1 , które są { } ( k − 1) środkami ciężkości {Vi } . Wróć do kroku 2. 3.3. Inicjalizacja książki kodowej 3.3.1. Metoda losowania Sprowadza się do wylosowania w jednym kroku całej książki kodowej o zadanym rozmiarze K. 3.3.2. Metoda grupowania Inaczej nazywana metodą par najbliższych sąsiadów polega na tym, że konstrukcja książki rozpoczyna się od książki o rozmiarze K=N zawierającej wszystkie wektory zbioru uczącego. Stopniowo redukuje się rozmiar książki przez grupowanie par wektorów sąsiednich. 3.3.3. Metoda rozdzielania Konstrukcja rozpoczyna się od pojedynczego wektora – centroidu zbioru uczącego. W m-tym kroku dokonywany jest (w drodze dodawania zaburzenia) podział każdego z wektorów kodowych na dwa wektory. Po takim rozdzieleniu uzyskana konfiguracja regionów decyzyjnych jest optymalizowana przez algorytm LBG, po czym dokonywany jest kolejny podział. 4. Problem pustych komórek Pusta komórka może się pojawić wtedy, kiedy wektor nie jest wyznaczony z danych wejściowych. Taka sytuacja może się zdarzyć, jeśli szczególne słowo kodowe komórki jest bardzo daleko oddalone od wektora danych wejściowych. Pusta komórka nie przyczynia się do poprawy rezultatów, dlatego powinna być usunięta. Zróżnicowanie heurystycznych rozwiązań podpowiada, aby zajmować się problemem pustych komórek. Jedno z przykładowych rozwiązań jest takie, aby podzielić największą komórkę na dwie komórki przez dodanie odpowiedniego słowa kodowego z losową liczbą mającą małą niezgodność, generującą tą drogą dwie oddzielne wersje oryginalnego słowa kodowego. 6 5. Algorytm opisowy programu z fragmentami kodu (1) Wczytanie obrazu (BMP) do pamięci za pomocą biblioteki libSDL. Po wczytaniu możliwy jest dostęp do każdego piksela tworzącego obraz (jego wartości RGB). (2) Podział wczytanego obrazu na wektory uczące (z założenia wielkości dwa na dwa piksele): I. Wektory uczące (kwadraty) mają współrzędne (x, y) które oznaczają położenie prawego górnego rogu wektora. II. Wysokość i szerokość wektora są ustawione domyślnie na dwa piksele. (3) Obliczanie wartości dla wektorów uczących. Wartości te są uśrednieniem wartości R, G, B ze wszystkich czterech pikseli wchodzących w skład wektora uczącego. I. Jeżeli (x, y) wektora znajduje się bliżej niż dwa piksele od prawej strony, lub od dołu obrazu średnią obliczamy z dostępnych pikseli. (4) Niech 'k' oznacza ilość wektorów słownika. Ustawiamy k na 1 i tworzymy pierwszy wektor słownika. Jako że jest to jedyny wektor podpinamy pod niego wszytkie wektory uczące. Poczym uśrednioną wartość R, G, B z podpiętych wektorów uczących traktujemy jako nowe położenie wektora słownika. (5) Podwajamy ilość wektorów słownika, tak aby każdy wektor słownika miał swojego „klona”. Aby wybrać najepszą pozycje dla nowego wektora stosujemy następującą metode: I. Wyznaczamy sześć nowych tymczasowych wektorów słownika losowo wybierając jego położenie w przestrzeni. II. Dla każdego z nowych tymczasowych wektorow słownika obliczamy ilość wektorów uczących znajdujących się w ustalonym promięniu od niego samego. III. Jako docelowy wektor wybieramy ten który posiada najwięcej wektorów uczących w swoim zasięgu, natomiast pozostałe pięć usuwamy. (6) Mając nową ilość wektorów słownika przepinamy wektory uczące do wektorów słownika dbając o to aby zachować zasadę: Vi ( k ) = { X : d ( X ,Y i) < d ( X , Y j )∀ j ≠ i} i=1,2,....M-1 (7) Każdy wektor słownika ma swoją pule wektorów uczących. Nalezy teraz zsumować wartości R, G, B wszystkich wektorów uczących podpiętych do swojego wektora słownika, a średnią arytmetyczną traktować jako nowe położenie wektora słownika. D ( k ) − D ( k − 1) < ε , gdzie D (k ) Jeśli warunek ten nie jest spełniony powracamy do (8) Obliczamy ogólną utrate jakości obrazu kożystając z zasady: naszym e jest wartość stała. punktu 5. 7 (9) Sprawdzamy wektory słownika pod kątem pustych komórek, jeśli którykolwiek wektor słownika nie ma podpiętego choć jednego wektora uczącego usuwamy go ze zbioru wektorów słownika. (10)Zamieniamy w obrazie wszystkie wektory uczące na ich odpowiedniki ze słownika i zapisujemy nowy obraz jako BMP (kożystając z biblioteki SDL) (11)Zczytujemy informacje o „treści” obrazu oryginalnego i obrazu wyjściowego, czyli wartości R, G, B każdego z pikseli. Te informacje zapisujemy do pliku w celu późniejszej kompresji bezstratnej. Kompresje wykonujemy programem „zip”. 6. Bibliografia [1] Khalid Sayood – „Kompresja danych wprowadzenie” [2] http://www.ire.pw.edu.pl/~arturp/Dydaktyka/koda/skrypt.hmtl 8