Kolory i kompresja

20.04.2010 - Krzysztof Dryś
TrudnośćTrudność

Kompresja bezstratna - prosty przykład

alternative text Schematyczny obrazek, który chcemy zapisać. Liczba oznacza jasność danego piksela. Wszystkie liczby są z przedziału [0,3], dlatego, że jasność każdego piksela pamiętamy na dwóch bitach.

Wyobraźmy sobie, że mamy do zapisania czarno-biały obrazek o wielkości 4 na 4 piksele. Wartość każdego piksela pamiętana jest na 2 bitach. Zapisywać naiwnie, to zapisywać:

  • 0 jako 00,
  • 1 jako 01
  • 2 jako 10
  • 3 jako 11
W ten sposób zapisanie całego obrazka zajmie nam $ 4 \times 4 \times 2  = 32 \mbox{ bity} $.

Spróbujmy zrobić to inaczej. Spróbujmy zapisać:

  • 0 jako 000,
  • 1 jako 1
  • 2 jako 01
  • 3 jako 001
Jako, że na obrazku 0 występuje raz, 1 występuje 9 razy, 2 występuje 3 razy, a 3 występuje dwa razy, to zapisując obrazek zużyjemy: $ 1 \times 3 + 1 \times 9 + 2 \times 3 + 3 \times 2 = 24 \mbox{ bity} $. W ten sposób oszczędziliśmy 8 bitów. To nie za dużo, prawda? Ale pamiętajmy, że nasz obrazek był naprawdę mały (4 na 4 piksele), a każdy piksel był pamiętany tylko na 2 bitach. Lepiej myśleć, że udało się nam oszczędzić jedną czwartą miejsca - jeżeli nasz wyjściowy obrazek byłbym duży, to byłoby to naprawdę sporo.

Oczywiście powyższy przykład jest trochę sztuczny. Zapisując ten obrazek musielibyśmy umieścić gdzieś informacje o tym, jak kodujemy (pamiętamy) poszczególne liczby. Ale widać na nim ogólną zasadę: wykorzystaliśmy to, że jedne wartości są dużo częstsze od innych. Na tym właśnie polega kompresja bezstratna - na szukaniu zależności na obrazku.

5
Twoja ocena: Brak Ocena: 5 (1 ocena)

Copyright © 2008-2010 Wrocławski Portal Informatyczny

design: rafalpolito.com