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