Według raportu ISO z 1988 roku algorytm JPEG składa się z następujących kroków: 0.5, = V i, j. /Q i, j

Podobne dokumenty
Założenia i obszar zastosowań. JPEG - algorytm kodowania obrazu. Geneza algorytmu KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG

Kodowanie transformacyjne. Plan 1. Zasada 2. Rodzaje transformacji 3. Standard JPEG

Kompresja obrazów w statycznych - algorytm JPEG

KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG

Wybrane metody kompresji obrazów

Klasyfikacja metod kompresji

Krótki przegląd pierwszych standardów kompresji obrazów

Klasyfikacja metod kompresji

Joint Photographic Experts Group

Cyfrowe przetwarzanie i kompresja danych. dr inż.. Wojciech Zając

dr inż. Piotr Odya Wprowadzenie

Kodowanie transformujace. Kompresja danych. Tomasz Jurdziński. Wykład 11: Transformaty i JPEG

Inżynieria obrazów cyfrowych. Ćwiczenie 5. Kompresja JPEG

1259 (10) = 1 * * * * 100 = 1 * * * *1

Python: JPEG. Zadanie. 1. Wczytanie obrazka

Kodowanie podpasmowe. Plan 1. Zasada 2. Filtry cyfrowe 3. Podstawowy algorytm 4. Zastosowania

Transformaty. Kodowanie transformujace

Kompresja Kodowanie arytmetyczne. Dariusz Sobczuk

Zapis liczb binarnych ze znakiem

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 5 Liczby w komputerze

Micha Strzelecki Metody przetwarzania i analizy obrazów biomedycznych (2)

Kwantyzacja wektorowa. Kodowanie różnicowe.

Przetwarzanie obrazu cyfrowego

Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne

Pracownia Komputerowa wykład V

Teoretyczne Podstawy Informatyki

dr inż. Piotr Odya dr inż. Piotr Suchomski

Def. Kod jednoznacznie definiowalny Def. Kod przedrostkowy Def. Kod optymalny. Przykłady kodów. Kody optymalne

Podstawy Informatyki

mgr inż. Grzegorz Kraszewski SYSTEMY MULTIMEDIALNE wykład 4, strona 1. GOLOMBA I RICE'A

Pracownia Komputerowa wykład IV

ZADANIE 1. Rozwiązanie:

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Podstawy Informatyki

Architektura komputerów Reprezentacja liczb. Kodowanie rozkazów.

Temat: Algorytm kompresji plików metodą Huffmana

NIEOPTYMALNA TECHNIKA DEKORELACJI W CYFROWYM PRZETWARZANIU OBRAZU

ARYTMETYKA BINARNA. Dziesiątkowy system pozycyjny nie jest jedynym sposobem kodowania liczb z jakim mamy na co dzień do czynienia.

Kody splotowe (konwolucyjne)

BIBLIOTEKA PROGRAMU R - BIOPS. Narzędzia Informatyczne w Badaniach Naukowych Katarzyna Bernat

Pracownia Komputerowa wykład VI

Kodowanie informacji. Kody liczbowe

Fundamentals of Data Compression

Grafika Komputerowa Wykład 1. Wstęp do grafiki komputerowej Obraz rastrowy i wektorowy. mgr inż. Michał Chwesiuk 1/22

Teoria przetwarzania A/C i C/A.

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10).

teoria informacji Kanały komunikacyjne, kody korygujące Mariusz Różycki 25 sierpnia 2015

Kompresja dźwięku w standardzie MPEG-1

Naturalny kod binarny (NKB)

Pracownia Komputerowa wyk ad IV

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Arytmetyka binarna - wykład 6

Kod uzupełnień do dwóch jest najczęściej stosowanym systemem zapisu liczb ujemnych wśród systemów binarnych.

0 + 0 = 0, = 1, = 1, = 0.

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 11,

Techniki multimedialne

Algorytmy i struktury danych. Wykład 4

mgr inż. Grzegorz Kraszewski SYSTEMY MULTIMEDIALNE wykład 6, strona 1. Format JPEG

LICZBY ZMIENNOPRZECINKOWE

Arytmetyka liczb binarnych

Kodowanie i kompresja Tomasz Jurdziński Studia Wieczorowe Wykład Kody liniowe - kodowanie w oparciu o macierz parzystości

SYSTEMY LICZBOWE. Zapis w systemie dziesiętnym

Dane obrazowe. R. Robert Gajewski omklnx.il.pw.edu.pl/~rgajewski

Pracownia Komputerowa wyk ad VI

Pracownia Komputerowa wyk ad V

Zygmunt Wróbel i Robert Koprowski. Praktyka przetwarzania obrazów w programie Matlab

1. Wprowadzenie 1.1. Zdefiniowanie problemu badawczego

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika:

Technologie Informacyjne

Liczby rzeczywiste są reprezentowane w komputerze przez liczby zmiennopozycyjne. Liczbę k można przedstawid w postaci:

Zastosowania grafiki komputerowej

SYSTEMY LICZBOWE 275,538 =

Wprowadzenie do informatyki i użytkowania komputerów. Kodowanie informacji System komputerowy

Technologie cyfrowe semestr letni 2018/2019

Temat 7. Dekodery, enkodery

Kompresja JPG obrazu sonarowego z uwzględnieniem założonego poziomu błędu

Kod U2 Opracował: Andrzej Nowak

Formaty obrazów rastrowych biblioteki PBM

Algorytm. a programowanie -

Kodowanie predykcyjne

Kodowanie i kompresja Streszczenie Studia Wieczorowe Wykład 10, 2007

FORMATY GRAFICZNE. Dobra ilustracja przychodzi w małym pliku. David Siegel, Tworzenie stron WWW. 1. Rodzaje plików graficznych

Poradnik Kompresja JPEG r sekwencyjnej kompresji bazowej JPEG YCbCr RLE Baseline Optimized

Biocentrum Ochota infrastruktura informatyczna dla rozwoju strategicznych kierunków biologii i medycyny POIG /09

Wykład II. Reprezentacja danych w technice cyfrowej. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Automatyka. Treść wykładów: Multiplekser. Układ kombinacyjny. Demultiplekser. Koder

Wydział Elektryczny. Katedra Telekomunikacji i Aparatury Elektronicznej. Instrukcja do pracowni specjalistycznej

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 2 WSTĘP DO INFORMATYKI

teoria informacji Entropia, informacja, kodowanie Mariusz Różycki 24 sierpnia 2015

Kod IEEE754. IEEE754 (1985) - norma dotycząca zapisu binarnego liczb zmiennopozycyjnych (pojedynczej precyzji) Liczbę binarną o postaci

Zastosowanie kompresji w kryptografii Piotr Piotrowski

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

Kompresja bezstratna. Entropia. Kod Huffmana

Podstawy Automatyki. Wykład 9 - Podstawy matematyczne automatyki procesów dyskretnych. dr inż. Jakub Możaryn. Instytut Automatyki i Robotyki

Układy kombinacyjne 1

Kompresja video (MPEG)

Transkrypt:

Kompresja transformacyjna. Opis standardu JPEG. Algorytm JPEG powstał w wyniku prac prowadzonych przez grupę ekspertów (ang. Joint Photographic Expert Group). Prace te zakończyły się w 1991 roku, kiedy organizacja ISO (ang. International Standard Organisation) przyjęła nowy standard kompresji statycznych ów cyfrowych. Standard JPEG wykorzystuje transformacyjną metodę kompresji opartą o transformatę kosinusową DCT. Dla naturalnych ów kolorowych metoda ta pozwala na redukcję średniej ilości bitów na piksel z 24 do 0.5 przy akceptowalnej jakości, lub do 1 bitu przy dobrej jakości. Według raportu ISO z 1988 roku algorytm JPEG składa się z następujących kroków: 1. Podzielenie u na rozłączne bloki U o rozmiarze 8x8; 2. Wykonanie transformacji DCT dla każdego bloku U: V =CUC T ; C=[c i, j ], i, j=0,...,7 ={ c i, j 2 1 8, i=0 8 cos pi j 0.5 8, i 0 3. Skwantowanie elementów bloku V według schematu równomiernego: K i, j = V i, j /Q i, j 0.5, gdzie długość przedziału kwantyzacji jest dana w macierzy Q. Celem kwantyzacji jest dalsze zwiększenie stopnia kompresji poprzez reprezentację współczynników DCT z precyzją nie większą niż wymagana dla otrzymania rekonstruowanego u o założonej jakości. Mówiąc inaczej kwantyzacja jest procesem, który eliminuje informację wizualnie nieznaczącą. Macierz kwantyzacji może być dostarczona przez użytkownika lub może być jedną z macierzy zalecanych przez JPEG (wynik eksperymentów psychowizualnych). Można w szczególności przyjąć, że wszystkie elementy tej macierzy są sobie równe. Podejście to ze względu na swoją prostotę i dobre wyniki jest zalecane w trakcie niniejszego projektu. Macierze Q używane w procesie kwantyzacji można znaleźć np. w [Ska93]. 4. Współczynniki otrzymane w wyniku kwantyzacji dzielone są na dwie grupy: DC i AC. Współczynniki DC (K 0,0 ) niosą informację o średniej jasności bloku 8x8 pikseli. Pomiędzy współczynnikami DC z sąsiednich bloków występuje zazwyczaj silna korelacja, dlatego

kodowanie binarne sekwencji elementów DC wykonuje się techniką predykcji liniowej rzędu jeden. Otrzymane różnice są kodowane entropowo przy użyciu kodu Huffmana zgodnie z aktualnymi częstościami poziomów kwantyzacji występującymi w ie. Warto tutaj wspomnieć, że współczynniki DC zawierają zazwyczaj znaczną część energii całego u. Ostatecznie wszystkie współczynniki po kwantyzacji ustawiane są w ciąg według uporządkowania zygzak (rys. 1). To uporządkowanie, poprzez umieszczenie współczynników związanych z funkcjami bazowymi o niższych częstotliwościach przed tymi o częstotliwościach większych, prowadzi do zwiększenia skuteczności kodowania entropowego. DC AC 01 AC 07 AC 70 AC 77 Rys 1 Schemat przeglądania typu zygzak poprzedzającego kodowanie entropowe. 5. Kodowanie entropowe (bezstratne) elementów AC, tzn. K i,j, i 0 lub j 0. Proces kodowania można podzielić na dwie fazy. W fazie pierwszej ciąg współczynników uzyskany w punkcie 4 (po kwantyzacji i uporządkowaniu zygzak) jest dzielony na sekwencje zer zakończonych elementem niezerowym. W fazie drugiej koduje się te sekwencje przy wykorzystaniu kodowania ze słowem o zmiennej długości VLC (ang. variable length coding). Najpierw koduje się metodą Huffmana zintegrowane obiekty typu: długość sekwencji zer, liczba bitów w kodzie VLC elementu niezerowego. Następnie koduje się wartości niezerowych elementów AC według prostej reguły: jeśli AC ma wartość k i zapis binarny modułu liczby k itob( k ) ma b cyfr, to dla k>0 emituje się itob( k ), w przeciwnym razie emituje się b bitów otrzymanych z itob( k ) przez negację wszystkich bitów, tzn. emituje się ~itob( k ). Sekwencje zer dłuższe niż 15 są dzielone na porcje przy użyciu kodu Huffmana dla obiektu (15,0). Proces ten wymaga tablicy kodowej Huffmana. Tablica taka może być dostarczona przez użytkownika lub zaczerpnięta z opisu standardu JPEG.

blok 8x8 wejściowy FDCT kwantyzator tablice kwantyzatora koder entropowy skompresowany Rys. 2a Schemat blokowy kodera JPEG dekoder entropowy dekwantyzator IDCT skompresowany zrekonstruowany tablice kwantyzatora Rys. 2b Schemat blokowy dekodera JPEG 6. Umieszczenie otrzymanego ciągu bitów w pliku lub wysłanie go przez kanał transmisyjny zgodnie z formatem zdefiniowanym w dokumencie JPEG. Na rysunkach 2a i 2b przedstawiono schemat blokowy kodera opartego o transformatę DCT działającego wg powyżej przedstawionego standardu JPEG. Kompresja ów cyfrowych wg standardu JPEG-like Wykonać punkty algorytmu JPEG: 1, 2, 3 ze stałą macierzą kwantyzacji tj. Q i, j =cr,i, j=0,...,7 wykonać punkt 4, ale zamiast kodowania Huffmana wprowadzić kodowanie VLC. Wykonać punkt 5, ale bez kodowania Huffmana. Przy kodowaniu VLC będziemy zawsze przeznaczać 4 bity na zapisywanie długości rozwinięcia dwójkowego kodowanej liczby, potem zaś będzie występować jej rozwinięcie, np. liczba 7 w kodzie dwójkowym ma zapis 111, a w proponowanym tu kodzie VLC 0011 111. W przypadku liczb ujemnych zapisujemy negację ich bitów, np. liczbę -7 zapisujemy w kodzie VLC jako 0011 000

Przykład kodowania: Dane są współczynniki dwóch kolejnych bloków (mają po 64 elementy) już po kwantyzacji: [520 50 0 0 0 0 0 30 0 0 0 20 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 ][510 ] 47 0 0 0 0 0 0 12 0 0 0 0 Ustawiamy elementy tych bloków w ciąg zgodnie z uporządkowaniem zygzak: blok 1: 520,50,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,0,...0. blok 2: 510,30,47,0,0,0,0,0,0,12,0,...0. Zgodnie z punktem 5 tworzymy pary (liczba zer bezpośrednio poprzedzających wartość niezerową, wartość niezerowa). Para (0,0) oznacza - dalej same zera już do końca bloku. Otrzymujemy więc: blok(1): 520, (0,50), (0,20), (15,0), (6,-12), (0,0) blok(2): 510, (0,30), (0,47), (6,12), (0,0) Uwaga para (15,0) oznacza ciąg 15 zer + zero t.j. ciąg 16 zer, para (6,-12) oznacza ciąg 6 zer zakończony liczbą -12. kodujemy blok 1: Ponieważ jest to pierwszy blok jako predykcję wartości DC przyjmujemy 0, czyli kodujemy DC=520 jako 520-0 = 520. Wartość 520 kodujemy jako ciąg binarny (w kodzie VLC) : 1010 1000001000. Pierwsze cztery bity informują, że do zakodowania wartości 520 potrzeba 10 bitów, potem 10 bitów stanowiących reprezentację binarną liczby 520. Przy kodowaniu par AC przyjmujemy, że na pierwszy element pary przeznaczamy 4 bity (jeśli występuje więcej zer niż 15 np. 22, to kodujemy parę jako dwie pary: (15,0) i (6,x)), potem zapisujemy wartość drugiego elementu pary w kodzie VLC. (0,50) kodujemy jako: 0000 0110 110010 (0,20) kodujemy jako: 0000 0101 10100 (15,0) kodujemy jako: 1111 0000

(7,-12) kodujemy jako: 0111 0100 0011 //W tym przypadku pierwszy element pary - 0111: oznacza ciąg 7 zer, potem kodujemy drugi element pary liczbę -12: na zakodowanie liczby - 12 potrzebne są 4 bity stąd kod: 0100, potem zapisujemy zanegowaną reprezentację binarną liczby 12: 0011 = ~(1100) AC=(0,0): 0000 0000 //do końca bloku już same zera kodujemy blok 2: DC=510: 510-520 = -10 kodujemy jako ciąg binarny 0100 ~(1010) = 0100 0101 pierwsze cztery bity informują, że do zakodowania wartości -10 potrzeba 4 bity, potem 4 bitów stanowiących zanegowaną reprezentację binarną liczby 10. Ze względu na predykcyjne kodowanie współczynników DC jako prognozę bieżącej wartości t.j. 510 przyjmujemy wartość poprzednią czyli 520 i zapisujemy tylko różnicę. W przypadku realizacji projektu w Matlabie przydatne funkcje to: imgread wczytanie u z dysku do pamięci COLORMAP ustawienie aktywnej palety kolorów (zwracana przez funkcję imgread przy ładowaniu u) image wyświetlenie u double konwersja do typu zmiennoprzecinkowego, przydatna przy operacjach matematycznych wykonywanych na wczytanym ie ( jest typu uint8)