IEPP22_r04 LZW.indd

Transkrypt

IEPP22_r04 LZW.indd
PRZYKŁAD 4.3.
Dla ciągu pikseli pokazanego na rysunku 4.20 utwórz algorytm słownikowy LZW.
Krok 1. Utwórz początkowy słownik, który składa się z trzech źródeł informacji o występujących kolorach:
1.
N
2.
C
3.
Z
Krok 2. p:=N (pierwszy piksel obrazu)
Krok 3. z:=N (kolejny piksel obrazu — drugi)
Krok 4. Sprawdzamy ciąg p+z, czyli NN. Takiego słowa nie ma jeszcze w słow-
niku. A zatem wypisz kod dla p=N, N znajduje się w słowniku na pozycji pierwszej (wypisz 1); dodaj ciąg p+z, czyli NN do słownika na
kolejnej pozycji (czwartej); przypisz p:=z, czyli p:=N.
Obecnie p ma wartość N, a słownik składa się z 4 pozycji:
1.
N
2.
C
3.
Z
4.
NN
Wynik wypisany: 1
Krok 3. z:=N; (kolejny piksel obrazu — trzeci)
Krok 4. Sprawdź, czy p+z znajduje się w słowniku. NN jest w słowniku. Przedłuż więc ciąg p, dodając z. p:=p+z, czyli p ma wartość NN.
Krok 3. z:=C; (kolejny piksel obrazu — czwarty)
Krok 4. Sprawdzamy ciąg p+z, czyli NNC. Takiego słowa nie ma jeszcze w słow-
niku. A zatem wypisz kod dla p=NN, NN znajduje się w słowniku (wypisz 4); dodaj ciąg p+z, czyli NNC do słownika na kolejnej pozycji
(piątej); przypisz p:=z, czyli p:=C.
Obecnie p ma wartość C, a słownik składa się z 5 pozycji:
1.
N
2.
C
3.
Z
4.
NN
5.
NNC
1
Wynik wypisany: 1, 4
Krok 3. z:=C; (kolejny piksel obrazu — piąty)
Krok 4. Sprawdzamy ciąg p+z, czyli CC. Takiego słowa nie ma jeszcze w słow-
niku. A zatem wypisz kod dla p=C, C znajduje się w słowniku na pozycji drugiej (wypisz 2); dodaj ciąg p+z, czyli CC do słownika na
kolejnej pozycji (szóstej); przypisz p:=z, czyli p:=C.
Obecnie p ma wartość C, a do słownika dodaj szósty wyraz o wartości CC.
6.
CC
Wynik wypisany: 1, 4, 2
Krok 3. z:=C; (kolejny piksel obrazu — szósty)
Krok 4. Sprawdzamy ciąg p+z, czyli CC. CC jest w słowniku. Przedłuż więc
ciąg p, dodając z. p:=p+z, czyli p ma wartość CC.
Krok 3. z:=C; (kolejny piksel obrazu — siódmy)
Krok 4. Sprawdzamy ciąg p+z, czyli CCC. Takiego słowa nie ma jeszcze w słow-
niku. A zatem wypisz kod dla p=CC, CC znajduje się w słowniku na
pozycji szóstej (wypisz 6); dodaj ciąg p+z, czyli CCC do słownika
na kolejnej pozycji (siódmej); przypisz p:=z, czyli p:=C.
Obecnie p ma wartość C, a do słownika na siódmej pozycji dopisz wyraz CCC.
7.
CCC
Wynik wypisany: 1, 4, 2, 6
Krok 3. z:=C; (kolejny piksel obrazu — ósmy)
Krok 4. Sprawdzamy ciąg p+z, czyli CC. CC jest w słowniku. Przedłuż więc
ciąg p, dodając z. p:=p+z, czyli p ma wartość CC.
Krok 3. z:=C; (kolejny piksel obrazu — dziewiąty)
Krok 4. Sprawdzamy ciąg p+z, czyli CCC. CCC jest w słowniku. Przedłuż więc
ciąg p, dodając z. p:=p+z, czyli p ma wartość CCC.
Krok 3. z:=C; (kolejny piksel obrazu — dziesiąty)
Krok 4. Sprawdzamy ciąg p+z, czyli CCCC. Takiego słowa nie ma jeszcze w słow-
niku. A zatem wypisz kod dla p=CCC, CCC znajduje się w słowniku na
pozycji siódmej (wypisz 7); dodaj ciąg p+z, czyli CCCC do słownika
na kolejnej pozycji (ósmej); przypisz p:=z, czyli p:=C.
Obecnie p ma wartość C, a do słownika na pozycji ósmej dodaj słowo CCCC.
8.
CCCC
Wynik wypisany: 1, 4, 2, 6, 7
Krok 3. z:=N; (kolejny piksel obrazu — jedenasty)
Krok 4. Sprawdzamy ciąg p+z, czyli CN. Takiego słowa nie ma jeszcze w słow-
niku. A zatem wypisz kod dla p=C, C znajduje się w słowniku na pozycji drugiej (wypisz 2); dodaj ciąg p+z, czyli CN do słownika na
kolejnej pozycji (dziewiątej); przypisz p:=z, czyli p:=N.
Obecnie p ma wartość N, a do słownika na pozycji dziewiątej dodaj słowo CN .
9.
2
CN
Wynik wypisany: 1, 4, 2, 6, 7, 2
Krok 3. z:=N; (kolejny piksel obrazu — dwunasty)
Krok 4. Sprawdzamy ciąg p+z, czyli NN. NN jest w słowniku. Przedłuż więc
ciąg p, dodając z. p:=p+z, czyli p ma wartość NN.
Krok 3. z:=N; (kolejny piksel obrazu — trzynasty)
Krok 4. Sprawdzamy ciąg p+z, czyli NNN. Takiego słowa nie ma jeszcze w słow-
niku. A zatem wypisz kod dla p=NN, NN znajduje się w słowniku na
pozycji czwartej (wypisz 4); dodaj ciąg p+z, czyli NNN do słownika
na kolejnej pozycji (dziesiątej); przypisz p:=z, czyli p:=N.
Obecnie p ma wartość N, a do słownika na pozycji dziesiątej dodaj słowo NNN .
10. NNN
Wynik wypisany: 1, 4, 2, 6, 7, 2, 4
Krok 3. z:=C; (kolejny piksel obrazu — czternasty)
Krok 4. Sprawdzamy ciąg p+z, czyli NC. Takiego słowa nie ma jeszcze w słow-
niku. A zatem wypisz kod dla p=N, który znajduje się w słowniku (wypisz 1); dodaj ciąg p+z, czyli NC do słownika na kolejnej pozycji
(jedenastej); przypisz p:=z, czyli p:=C.
Obecnie p ma wartość C, a do słownika na pozycji jedenastej dodaj słowo NC .
11. NC
Wynik wypisany: 1, 4, 2, 6, 7, 2, 4, 1
Krok 3. z:=C; (kolejny piksel obrazu — piętnasty)
Krok 4. Sprawdzamy ciąg p+z, czyli CC. CC jest w słowniku. Przedłuż więc
ciąg p, dodając z. p:=p+z, czyli p ma wartość CC.
Krok 3. z:=C; (kolejny piksel obrazu — szesnasty)
Krok 4. Sprawdzamy ciąg p+z, czyli CCC. CCC jest w słowniku. Przedłuż więc
ciąg p, dodając z. p:=p+z, czyli p ma wartość CCC.
Krok 3. z:=N; (kolejny piksel obrazu — siedemnasty)
Krok 4. Sprawdzamy ciąg p+z, czyli CCCN. Takiego słowa nie ma jeszcze w słow-
niku. A zatem wypisz kod dla p=CCC, CCC znajduje się w słowniku na
pozycji siódmej (wypisz 7); dodaj ciąg p+z, czyli CCCN do słownika
na kolejnej pozycji (dwunastej); przypisz p:=z, czyli p:=N.
Obecnie p ma wartość N, a do słownika na pozycji dwunastej dodaj słowo CCCN.
12. CCCN
Wynik wypisany: 1, 4, 2, 6, 7, 2, 4, 1, 7
Krok 3. z:=Z; (kolejny piksel obrazu — osiemnasty)
Krok 4. Sprawdzamy ciąg p+z, czyli NZ. Takiego słowa nie ma jeszcze w słow-
niku. A zatem wypisz kod dla p=N, N znajduje się w słowniku na pozycji pierwszej (wypisz 1); dodaj ciąg p+z, czyli NZ do słownika na
kolejnej pozycji (trzynastej); przypisz p:=z, czyli p:=Z.
Obecnie p ma wartość Z, a do słownika na pozycji trzynastej dodaj słowo NZ.
13. NZ
3
Wynik wypisany: 1, 4, 2, 6, 7, 2, 4, 1, 7, 1
Krok 3. z:=C; (kolejny piksel obrazu — dziewiętnasty)
Krok 4. Sprawdzamy ciąg p+z, czyli ZC. Takiego słowa nie ma jeszcze w słow-
niku. A zatem wypisz kod dla p=Z, Z znajduje się w słowniku na pozycji trzeciej (wypisz 3); dodaj ciąg p+z, czyli ZC do słownika na
kolejnej pozycji (czternastej); przypisz p:=z, czyli p:=C.
Obecnie p ma wartość C, a do słownika na pozycji czternastej dodaj słowo ZC.
14. ZC
Wynik wypisany: 1, 4, 2, 6, 7, 2, 4, 1, 7, 1, 3
Krok 3. z:=N; (kolejny piksel obrazu — dwudziesty)
Krok 4. Sprawdzamy ciąg p+z, czyli CN. CN jest w słowniku. Przedłuż więc
ciąg p, dodając z. p:=p+z, czyli p ma wartość CN.
Krok 5. Wypisz kod dla p=CN, CN znajduje się w słowniku na pozycji dziewiątej
(wypisz 9; ostatnia wartość p po sprawdzeniu wszystkich elementów).
Wynik wypisany: 1, 4, 2, 6, 7, 2, 4, 1, 7, 1, 3, 9
Słownik składa się z 14 następujących wyrazów:
1.
N
2.
C
3.
Z
4.
NN
5.
NNC
6.
CC
7.
CCC
8.
CCCC
9.
CN
10. NNN
11. NC
12. CCCN
13. NZ
14. ZC
Słowa mają numery od 1 do 14. Tablica ma więcej niż 10 słów, należy więc stosować separatory pomiędzy kodami. Po zastosowaniu algorytmu kompresji LZW dla przykładowego
ciągu pikseli: NNNCCCCCCCNNNCCCNZCN otrzymaliśmy zakodowany następujący
ciąg pozycji wartości zapisanych w słowniku: 1, 4, 2, 6, 7, 2, 4, 1, 7, 1, 3, 9.
4