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