Python: JPEG. Zadanie. 1. Wczytanie obrazka

Podobne dokumenty
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

Joint Photographic Experts Group

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

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

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

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

Temat: Algorytm kompresji plików metodą Huffmana

Technologie Informacyjne

Pomorski Czarodziej 2016 Zadania. Kategoria C

Algorytmy zachłanne. dr inż. Urszula Gałązka

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG

ARCHITEKRURA KOMPUTERÓW Kodowanie liczb ze znakiem

Formaty obrazów rastrowych biblioteki PBM

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Odwrotna Notacja Polska

3. Opracować program kodowania/dekodowania pliku tekstowego. Algorytm kodowania:

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

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

GRAFIKA RASTROWA. WYKŁAD 1 Wprowadzenie do grafiki rastrowej. Jacek Wiślicki Katedra Informatyki Stosowanej

Pracownia Komputerowa wykład VI

Przetwarzanie obrazu cyfrowego

Waldemar Izdebski - Wykłady z przedmiotu SIT / Mapa zasadnicza 30

Kompresja obrazów w statycznych - algorytm JPEG

Rozpoznawanie obrazu. Teraz opiszemy jak działa robot.

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

Pracownia Komputerowa wyk ad VI

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

pobieramy pierwszą literę komunikatu i wypełniamy nią (wszystkie pozycje tą samą literą) bufor słownikowy.

Złożoność obliczeniowa zadania, zestaw 2

Architektura komputerów

dr inż. Piotr Odya Wprowadzenie

Typy danych. 2. Dane liczbowe 2.1. Liczby całkowite ze znakiem i bez znaku: 32768, -165, ; 2.2. Liczby rzeczywiste stało i zmienno pozycyjne:

Przykładowe B+ drzewo

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

Wykład 2. Informatyka Stosowana. 10 października Informatyka Stosowana Wykład 2 10 października / 42

Wstęp do informatyki- wykład 1 Systemy liczbowe

Pliki. Informacje ogólne. Obsługa plików w języku C

ZADANIE 1. Rozwiązanie:

Wykład 2. Informatyka Stosowana. 9 października Informatyka Stosowana Wykład 2 9 października / 42

Pracownia Komputerowa wykład V

Projekty zaliczeniowe Podstawy Programowania 2012/2013

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Klasyfikacja metod kompresji

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

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

Kompresja sekwencji obrazów - algorytm MPEG-2

1. Pobieranie i instalacja FotoSendera

Ćwiczenie: JavaScript Cookies (3x45 minut)

Techniki wizualizacji. Ćwiczenie 2. Obraz cyfrowy w komputerze

Zapis liczb binarnych ze znakiem

KODY SYMBOLI. Kod Shannona-Fano. Algorytm S-F. Przykład S-F

Arkusz strona zawierająca informacje. Dokumenty Excela są jakby skoroszytami podzielonymi na pojedyncze arkusze.

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek

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

Zastosowania informatyki w geologii ćwiczenia 1,2 INKSCAPE 1

1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci:

AKADEMIA MORSKA KATEDRA NAWIGACJI TECHNICZEJ

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Podstawy Informatyki

Materiały pomocnicze do ćwiczeń z podstaw techniki cyfrowej (przygotował R.Walkowiak) Dla studiów niestacjonarnych rok AK 2017/18

wagi cyfry pozycje

Wymagania edukacyjne z informatyki w klasie VIII

Pracownia Komputerowa wykład IV

Algorytmy i struktury danych. Wykład 4

Instrukcje dla zawodników

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

Klasyfikacja metod kompresji

Detekcja twarzy w obrazie

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

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

Niech x 1,..., x n będzie ciągiem zdarzeń. ---

Tadeusz Pankowski

Zestaw A-1: Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.adb i.ads)!!! Zad. 1: 4,3,3 2,2,1 Zad. 2: 3,3,3 Zad.

dodatkowe operacje dla kopca binarnego: typu min oraz typu max:

Cechy formatu PNG Budowa bloku danych Bloki standardowe PNG Filtrowanie danych przed kompresją Wyświetlanie progresywne (Adam 7)

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

POB Odpowiedzi na pytania

2. Układy równań liniowych

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

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

Podstawy Informatyki

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

1. Operacje logiczne A B A OR B

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

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

Zaprojektować i zaimplementować algorytm realizujący następujące zadanie.

Luty 2001 Algorytmy (7) 2000/2001

3.4. Opis konfiguracji layoutów.

KRYPTOGRAFIA I OCHRONA DANYCH PROJEKT

Zestaw 1: Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.adb i.ads)!!! Zad. 1: Zad. 2: 2,2,2 5,5,5,5,5,5 Zad.

Kody Tunstalla. Kodowanie arytmetyczne

Podział sieci na podsieci wytłumaczenie

DYDAKTYKA ZAGADNIENIA CYFROWE ZAGADNIENIA CYFROWE

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.

Blockly Kodowanie pomoc.

Programowanie w języku C++ Agnieszka Nowak Brzezińska Laboratorium nr 2

Transkrypt:

Python: JPEG Witajcie! Jest to kolejny z serii tutoriali uczący Pythona, a w przyszłości być może nawet Cythona i Numby Jeśli chcesz nauczyć się nowych, zaawansowanych konstrukcji to spróbuj rozwiązać kilka następnych zadań Powodzenia! Kompresja obrazu JPEG jest istotną technologią, która zmieniła oblicze internetu Technologia ta głównie eksploatuje fakt że ludzie gorzej rozpoznają zmiany w odcieniu niż w jasności oraz fakt że ludzie gorzej rozpoznają zmiany w obrazie o wysokiej częstotliwości niż w obrazie przypominającym jednolity kolor W tym zadaniu zaimplementujemy kompresję JPEG, nie będącą kalką ze standardu ale własną metodę opartą na tych samych narzędziach Zakładam że umiesz już posługiwać się tablicami w numpy'u Jeśli nie, lepiej powróć do poprzednich zadań W tym zadaniu będziesz potrzebował wielu z metod numpy'a Wszystkie funkcje są dostępne w dokumentacji w zakładce Routines 1 Wczytanie obrazka Zadanie Obraz jest reprezentowany przez 3-wymiarową tablicę liczb w zakresie 0255 Pierwszy wymiar odnosi się do wysokości obrazka, drugi wymiar do szerokości obrazka, trzeci wymiar do komponentów RGB Na wejściu znajduje się zawartość pliku NPY Do wczytania tablicy powinieneś użyć poniższego kodu: 2 Przestrzeń kolorów Warstwy RGB trzeba zamienić na warstwy chrominancji i luminancji, YCbCr Konwersja jest bezpośrednia, należy użyć poniższych zależności Wartości nie są zaokrąglane a dalsze etapy (mimo mylącego wyglądu przykładów) są prowadzone na liczbach rzeczywistych: ycbcr 3 Zmniejszenie rozdzielczości Warstwy Cb i Cr są skalowane do połowy rozdzielczości Każda grupa 2x2 piksele jest zastępowana średnią z owych 4 pikseli Jeśli brakuje parzystej kolumny, ostatnia kolumna jest duplikowana Jeśli brakuje parzystego wiersza, ostatni wiersz jest duplikowany Dla przykładu:

subsampling 4 Podział na bloki Każdą z trzech warstw należy podzielić na bloki 8x8 pikseli Warstwy chrominancji muszą być już pomniejszone przed tym etapem Bloki na krawędziach, jeśli brakuje pikseli do wypełnienia bloku, duplikują ostatnią kolumnę oraz ostatni wiersz Dla przykładu: tab 5 Dyskretna transformacja kosinusów Dla każdego bloku 8x8 pikseli należy obliczyć współczynniki DCT Współczynniki także tworzą tablicę 8x8 wartości Trudność polega na tym, że trzeba stablicować jak największą część obliczeń by przetwarzanie każdego bloku było jak najszybsze Poniżej przykład (wartości zaokrąglone): 6 Kwantyzacja Każdy ze współczynników DCT trzeba podzielić przez odpowiedni dzielnik i zaokrąglić Po tym etapie blok składa się z całkowitych liczb, choć mogą być one ujemne i nie mają ustalonego zakresu

kwantyzacja 7 Kodowanie ciągów powtórzeń Podzielone współczynniki są bardzo często zerami Najpierw zmienimy kolejność wartości z od-góry-od-lewej na zigzag Poniżej znajduje się mapowanie indeksów: rle Następnie kodujemy 64 wartości, w podanej powyżej kolejności, na ciąg krotek, gdzie krotka zawiera dwa pola (Z,X) Z oznacza maksymalną ilość zer poprzedzającą liczbę X Ponadto Z może wynieść maksymalnie 15, co powoduje że dłuższe ciągi zer trzeba reprezentować więcej niż jedną krotką Ilość krotek zależy od tablicy, ale krotki muszą wyczerpać wszystkie 64 elementy Poniższy przykład powinien wyjaśnić wszystko: rleexample 8 Kodowanie entropii Zbieramy wszystkie krotki (Z,X) do jednej dużej listy (kolejno, dla warstw w kolejności Y Cb Cr, dla bloków od góry, od lewej) Zliczamy ilość wystąpień każdego typu krotki Posiadając zliczone ilości, zbudujemy listę węzłów które będziemy grupować do postaci drzewa Początkowe węzły reprezentują każdy typ krotki (Z,X) wraz z licznością C, w kolejności wyznaczonej przez listę krotek W pętli, dopóki mamy więcej niż 1 węzeł, wybieramy najwcześniejszy węzeł o najmniejszej liczności (L) i usuwamy go z listy węzłów Następnie wybieramy najwcześniejszy węzeł o najmniejszej liczności (R) i usuwamy go z listy węzłów Następnie

wstawiamy na koniec listy węzłów nowy węzeł, zawierający sumę liczności L i R, lewą gałąź L, prawą gałąź R Ostatni węzeł "na wierzchu" stanowi korzeń drzewa Wszystkie węzły drzewa poza liściami oznaczają rozdroża, dodając bit 0 do węzłów idących w lewo, i dodając bit 1 do węzłów idących w prawo Kod krotki (Z,X) stanowi ciąg bitów jakie odwiedzamy ścieżką od korzenia do liścia Przykład jest kontynuowany poniżej: Powracając do listy 2-krotek z początku etapu, zastępujemy każdą krotkę ciągiem bitów, kodem zmiennej długości Jeśli całkowita ilość bitów nie jest wielokrotnością 8, dopisujemy na końcu zera Kontynuacja przykładu: 9 Zapisanie ciągu bitów Ostateczny ciąg bitów należy wypisać na standardowe wyjście w postaci binarnej Kontynuacja przykładu: Do wypisania bajtów możesz użyć kodu poniżej: Format I/O Dane wejściowe stanowi zawartość pliku o formacie NPY Numpy używa tego formatu do zapisywania pojedyńczych tablic

Wymiary tablicy i typ danych dtype są zawarte w formacie Obiekt tablicy udostępnia wszystkie wymiary Dane wyjściowe stanowi ciąg bajtów w binarnej formie Przykładowe dane oraz wyniki można pobrać stąd Do wczytania użyj kodu: