Programování v Pythonu

Podobné dokumenty
Programování v Pythonu

Obsah prezentace. PNG (Portable Network Graphics) Vlastnosti PNG (1/2) Historie PNG. Vlastnosti PNG (2/2) Povšimnte si

Rastrové grafické formáty. Václav Krajíček KSVI MFF UK, 2007

Rastrový obraz, grafické formáty

Zdroj:

Barvy a barevné systémy Formáty obrázků pro WWW

Barvy a barevné systémy Formáty obrázků pro WWW

Programování v Pythonu

Webové stránky. 6. Grafické formáty pro web. Datum vytvoření: str ánk y. Vytvořil: Petr Lerch.

13 Barvy a úpravy rastrového

Formáty obrazu. David Bařina. 22. března David Bařina Formáty obrazu 22. března / 49

Digitální učební materiál

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Programování v Pythonu

Grafické formáty GIF a PNG

Programování v Pythonu

CAD II přednáška č. 5. Grafické formáty PCX GIF TIFF BMP

Rastrová grafika. Grafický objekt je zaznamenán jednotlivými souřadnicemi bodů v mřížce. pixel ( picture element ) s definovanou barvou

Konverze grafických rastrových formátů

Programování v Pythonu

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Úvod do počítačové grafiky

GRAFICKÉ FORMÁTY V BITMAPOVÉ GRAFICE

Komunikační protokol EX Bus. Komunikační protokol EX Bus. Topologie. Fyzická vrstva. Přístup ke sdílenému přenosovému mediu (sběrnici)

Výsledky experimentů předmětu Komprese dat

1. Formáty grafických dat

III/ 2 Inovace a zkvalitnění výuky prostřednictvím ICT

Rastrové počítačové obrazy (poněkud sporně často označované jako bitmapové) jsou pravděpodobně nejběžnější variantou obrazů v počítači.

Programování v Pythonu

12 Metody snižování barevného prostoru

Obsah. Kapitola 1 Stažení a instalace Kapitola 2 Orientace v programu a základní nastavení Úvod... 9

1.0 Lekce 1: Seznámení s prostøedím. 2.0 Lekce 2: Základní opravy fotografie

Programování v Pythonu

Omezení barevného prostoru

VYUŽITÍ POČÍTAČOVÉ GRAFIKY

DUM 02 téma: Formáty souborů rastrové grafiky

BPC2E_C09 Model komunikačního systému v Matlabu

Rastrový obraz Barevný prostor a paleta Zmenšení barevného prostoru Základní rastrové formáty

Programování v Pythonu

Počítačová grafika SZŠ A VOŠZ MERHAUTOVA 15, BRNO

Telemetrický komunikační protokol JETI

Počítačová grafika a vizualizace I

Webové stránky. 16. Obrázky na webových stránkách, optimalizace GIF. Datum vytvoření: str ánk y. Vytvořil: Petr Lerch.

Zobrazování barev Josef Pelikán CGG MFF UK Praha.

Komprese dat Obsah. Komprese videa. Radim Farana. Podklady pro výuku. Komprese videa a zvuku. Komprese MPEG. Komprese MP3.

Práce s obrazovým materiálem CENTRUM MEDIÁLNÍHO VZDĚLÁVÁNÍ. Akreditované středisko dalšího vzdělávání pedagogických pracovníků

Gymnázium Jana Pivečky a Střední odborná škola Slavičín. III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT

LZ77 KNIHOVNA PRO KOMPRESI A DEKOMPRESI DAT POMOCÍ ALGORITMU LZ77. Příručka uživatele a programátora

Škola: Gymnázium, Brno, Slovanské náměstí 7 III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Název projektu: Inovace výuky na GSN

Algoritmizace prostorových úloh

DATOVÉ FORMÁTY GRAFIKY, JEJICH SPECIFIKA A MOŽNOSTI VYUŽITÍ

Reprodukce obrazových předloh

Barvy na počítači a grafické formáty

Využití ICT techniky především v uměleckém vzdělávání. Akademie - VOŠ, Gymn. a SOŠUP Světlá nad Sázavou

Digitální grafika. Digitální obraz je reprezentace dvojrozměrného obrazu, který používá binární soustavu (jedničky a nuly).

Programování v Pythonu

Komprese obrazu. Michal Bujalka, Ondrej Kováč. Gymnázium Botičská. Botičská 1, Praha 2

Informační a komunikační technologie Inovace výuky prostřednictvím šablon pro SŠ

Pavel Roubal Výukový modul projektu: Nové formy výuky ve školách kraje Vysočina

Webové stránky. 13. Obrázky na webových stránkách, modul Uložit pro web a zařízení. Datum vytvoření: str ánk y. Vytvořil: Petr Lerch

Adobe Photoshop 18. Ukládání dokumentu formáty

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT EU-OVK-VZ-III/2-ZÁ-315

1. ZÁKLADNÍ POJMY POČÍTAČOVÉ GRAFIKY

Základy informatiky. HTML, tvorba WWW stránek. Daniela Szturcová Část převzata z přednášky P. Děrgela

Bitmaps SPRÁVCE BITMAP A POMOCNÉ FUNKCE PRO PRÁCI S BITMAPAMI. Příručka uživatele a programátora

Téma: Barevné modely, formáty souborů

Kde se používá počítačová grafika

Grafické formáty. Grafické formáty. Komprese rastrového obrazu. Proč je tolik formátů pro uložení obrázků?

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Téma: Vektorová grafika. Určete pravdivost následujícího tvrzení: "Grafická data jsou u 2D vektorové grafiky uložena ve voxelech."

On-line škola mladých autorů , pořadatel: ČVUT FEL. Jak na obrázky? Martin Žáček

Multimediální systémy. 03 Počítačová 2d grafika

Rastrová grafika. body uspořádané do pravidelné matice

Kompresní algoritmy grafiky. Jan Janoušek F11125

VIDEO DATOVÉ FORMÁTY, JEJICH SPECIFIKACE A MOŽNOSTI VYUŽITÍ SMOLOVÁ BÁRA

Semestrální práce z předmětu KIV/MHS. Komprese statického obrazu pomocí MDCT

PA152. Implementace databázových systémů

Funkce grafiky na webu. Primární grafická informace Fotografie Schémata Diagramy Loga Bannery

JPEG Formát pro archivaci a zpřístupnění.

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

POČÍTAČOVÁ GRAFIKA. Lenka Bednaříková

Programování v Pythonu

HDR obraz (High Dynamic Range)

IB112 Základy matematiky

Programování v Pythonu

Obrazová data. Biofyzikální ústav Lékařské fakulty Masarykovy univerzity Brno. prezentace je součástí projektu FRVŠ č.2487/2011

Grafické formáty. poznámky k 5. přednášce Zpracování obrazů. Martina Mudrová 2004

Základy informatiky. 10 Počítačová grafika

Identifikátor materiálu: ICT-1-02

Úvod do GIS. Prostorová data II. část. Pouze podkladová prezentace k přednáškám, nejedná se o studijní materiál pro samostatné studium.

Stejná stránka se v různých prohlížečích může zobrazit odlišně.

Obsah. Popis funkcí. RS485/MODBUS-RTU ver Komunikace s převodníkem probíhá na principu MASTER - SLAVE. Protokol MODBUS mát tuto strukturu:

Vyšší odborná škola a Střední škola,varnsdorf, příspěvková organizace. Šablona 3 VY 32 INOVACE

PJC Cvičení #2. Číselné soustavy a binární reprezentace proměnných

Integrovaný informační systém Státní pokladny (IISSP) Dokumentace API - integrační dokumentace

Zpracování obrazů. Honza Černocký, ÚPGM

Monitory a grafické adaptéry

Formáty pro rastrovou grafiku

Vyčtení / zapsání hodnot z/do OMC8000 pomocí protokolu UDP

Komunikační protokol

Transkript:

ƒeské vysoké u ení technické v Praze FIT Programování v Pythonu Ji í Znamená ek P íprava studijního programu Informatika je podporována projektem nancovaným z Evropského sociálního fondu a rozpo tu hlavního m sta Prahy. Praha & EU: Investujeme do va²í budoucnosti

Python (2011-04-14) : PNG 1 of 11 Python PNG Úvod Grafický formát PNG (Portable Network Graphics) vznikl jako reakce na licenční politiku kolem formátu GIF (odtud též PNG is Not GIF :) a přestože ho zcela nenahrazoval, byl záhy standardizován a obecně poměrně kladně přijat. V mnoha ohledech konkuruje i jiným formátům, především tím, že je poměrně snadno implementovatelný a jeho struktura zahrnuje volitelné rozšiřování podle potřeb příslušných aplikací. Na druhou stranu jde o čistě RGB-formát, takže nenahrazuje formáty schopné pracovat v jiných barvových prostorech (jako je např. CMYK). PNG podporuje obrázky ve stupních šedi (grayscale; 8- i 16-bitové), plné barevné hloubce (truecolor; běžně 24-, ale i 48-bitové) plus obrázky s barevnou paletou (colormap, index color). Navíc je to vše možno kombinovat s průhledností v podobě až 16-bitového alfa kanálu, zobrazovat prokládaně a přikládat k obrázkům barvové ICC-profily. Struktura PNG I. Globální struktura PNG-souboru je následující: hlavička vždy stejných 8 bajtů 89 50 4E 47 0D 0A 1A 0A, jinak to není PNG série různých typů chunků, které mají všechny stejnou strukturu: 1. 2. 3. 4. délka dat chunku [4 bajty] typ chunku [4 bajty] data chunku kontrolní součet (CRC) chunku [4 bajty] PS: Struktura hlavičky kromě i lidsky viditelné identifikace (2.-4. bajt představují PNG) slouží k odchycení možných problémů při přenosu první bajt testuje zachování nejvyššího bitu, další pak překlady řádků nebo EOF. I. Nejjednodušší sekvence chunků, která poskytne validní PNG-obrázek, je takováto:

Python (2011-04-14) : PNG 2 of 11 IHDR hlavička; obsahuje všechny informace potřebné k rozkódování obrázku IDAT vlastní data obrázku IEND ukončovací chunk (neobsahuje žádná data) PS: Druhý nejjednodušší typ obrázku bude ještě mezi IHDR a IDAT obsahovat barevnou paletu PLTE. Poznámky I. Ze způsobu pojmenování typu chunku (tedy podle toho, které bity jsou nastavené; prakticky se to projevuje zápisem buď velkými nebo malými písmeny) se dá poznat mnohem více zda je příslušný chunk nutný pro přečtení obrázku (např. IDAT versus text), veřejný či privátní (pro nějakou konkrétní aplikaci) nebo zachovává-li se při transformaci obrázku (např. hist). Praktická stránka věci: Pro zpracování obrázku vás zajímají pouze chunky, jejichž typ je zapsán verzálkami (velkými písmeny). I. Vícebajtová čísla (např. délka dat) jsou zakódována v pořadí big endian, tedy od nejvýznamnějšího bajtu vlevo po nejméně významný vpravo (tj. poslední bajt vpravo určuje číslo v rozmezí 0-255, předchozí v násobcích 256 atd.). I. Pro rozkomprimování zakomprimovaných chunků IDAT můžete použít knihovní metodu zlib.decompress(), která implementuje algoritmus DEFLATE. I. Kontrolní součet se provádí nad sekvencí typ chunku + data chunku, je ho tedy možno počítat průběžně. Použitý algoritmus není moc vhodný pro delší data (nedokáže v nich už tak snadno rozpoznat chybu), proto se v praxi datové chunky IDAT dělí obvykle po 8 kb. V zápočtovém programu můžete použít implementaci CRC zlib.crc32().

Python (2011-04-14) : PNG 3 of 11 I. Barvová paleta je v datech příslušného chunku PLTE uložena nekomprimovaně. I. Prokládání v PNG je jakýsi vtipný kompromis mezi původním GIFem (přenos různých řádků) a formátem JPEG (přenos různě významných členů transformace). Jeho nejmenší složkou jsou bloky 8x8, z nichž se přenáší hodnoty pixelů podle následujícího schématu: 1 6 4 6 2 6 4 6 7 7 7 7 7 7 7 7 5 6 5 6 5 6 5 6 7 7 7 7 7 7 7 7 3 6 4 6 3 6 4 6 7 7 7 7 7 7 7 7 5 6 5 6 5 6 5 6 7 7 7 7 7 7 7 7 Chunk IHDR Chunk IHDR, je vlastně úplně nejdůležitější zjistíme z něj totiž obecné informace o obrázku včetně všech potřebných pro jeho dekódování. Struktura jeho datové části je následující: 1. 2. 3. 4. 5. 6. 7. šířka obrázku v pixelech [4 bajty] výška obrázku v pixelech [4 bajty] bitová hloubka [1 bajt] barvový typ [1 bajt] metoda komprese [1 bajt] metoda filtrace [1 bajt] metoda prokládání [1 bajt] Díky tomu, že datová část obsahuje vždy právě 13 bajtů, je začátek chunku IHDR vždy stejný po délce dat b'\x00\x00\x00\r' (tedy 13 hexadecimálně) následuje typ chunku b'ihdr'. Dále následuje 13 bajtů údajů a nakonec 4

Python (2011-04-14) : PNG 4 of 11 bajty kontrolního součtu (z hlavičky a dat). Chunk IHDR tedy plně určuje strukturu obrázku. My se ze všech možností omezíme pouze na tu nejpodobnější formátu PPM a tedy i nejjednodušší na zpracování (a případné konktrolní zobrazení) obrázky s osmibitovou barevnou hloubkou (tj. hodnota 8) a truecolour (barvový typ 2) bez alfa-kanálu, které zaznamenávají pro každý pixel tři barvové hodnoty RGB v rozmezí 0-255. Komprese a filtrace jsou podle aktuálního standardu vždy typu 0. Prokládání nás nebude zajímat (dost se to s ním nepřekvapivě komplikuje), proto námi zpracovávané obrázky zde musí mít 0. Chunk IEND Protějškem chunku IHDR je chunk IEND, který označuje konec PNG-obrázku. Slouží tedy jako signál pro ukončení čtení a zpracovávání dat. Díky jeho funkci je jeho struktura extrémně jednoduchá: 4 bajty délka dat chunku b'\x00\x00\x00\x00' (je nulová) 4 bajty typ chunku b'iend' data chunku b'' (žádná nejsou) 4 bajty konktrolní součet chunku b'\xaeb`\x82' (tedy 0 ae 0 42 0 60 0 82)

Python (2011-04-14) : PNG 5 of 11 Chunk(y) IDAT Vlastní data obrázku jsou uložena v jednom nebo více chuncích IDAT. Přitom platí: data z více IDAT-chunků se složí dohromady a uvažují jako celek (složená) data jsou zkomprimovaná (rozkomprimovaná) data představují zafiltrované řádky první hodnota je varianta filtru, následují (zafiltrované) barvy pixelů v řádce (tj. tři pro každý pixel RGB) rozfiltrované řádky představují už skutečná RGB-data jednotlivých pixelů PS: Pro rozkomprimování zakomprimovaných chunků IDAT můžete použít knihovní metodu zlib.decompress(). Filtrace Protože RGB-data obrázku se v rámci PNG komprimují, je vhodné je předpřipravit tak, aby se lépe komprimovala (sekvence opakujících se znaků se komprimují lépe než náhodné neopakující se znaky). Pro tyto účely byly vymyšleny tzv. filtry, které slouží k úpravě dat obrázku před jejich kompresí (a tudíž pak opačným směrem i při jejich dekompresi). Nejjednodušší možný filtr (0) přitom data vůbec nemění, další tři (1, 2 a 3) jsou konvoluční filtry (v podstatě detekují postupně hrany vertikální, horizontální a pod úhlem 45 ) a poslední z nich (4, Paethův) používá navíc prediktor (pro výběr barevně nejbližšího pixelu z okolních). I. Filtry operují na aktuálním bajtu a maximálně až na dalších třech (barevně) odpovídajících bajtech v okolních pixelech podle následujícího schématu: c b a x (Rc,Gc,Bc) (Rb,Gb,Bb) (Ra,Ga,Ba) (Rx,Gx,Bx) Pixel x ve schématu představuje právě zpracovávaný pixel, pixel a je předcházející na stejné řádce, b je stejný pixel na předchozí řádce a c předcházející pixel na předchozí řádce. Nejsou-li bajty z pixelů a, b, c na

Python (2011-04-14) : PNG 6 of 11 aktuální pozici k dispozici (začátek řádku, první řádka), nahrazují se nulami. I. Filtry překládající zafiltrované scanlines na cílové RGB berou bajty z pixelů a, b, c již odfiltrované. I. Veškeré výpočetní operace jsou provedeny bez přetečení v rámci bajtu, výsledek je však samozřejmě následně nacpán zpátky do bajtu jednoho. Tabulka rekonstrukčních filtrů Při označení (podle specifikace ).. Filt(y) hodnota bajtu y po filtraci Recon() zrekonstruovaná hodnota bajtu y po odfiltrování (při správném postupu by měla odpovídat originální hodnotě Orig(y))..je tabulka rekonstrukčních filtrů (bez redukce zpět na jeden bajt) následující: typ rekonstrukční funkce 0 Recon(x) = Filt(x) 1 Recon(x) = Filt(x) + Recon(a) 2 Recon(x) = Filt(x) + Recon(b) 3 Recon(x) = Filt(x) + (Recon(a) + Recon(b)) // 2 4 Recon(x) = Filt(x) + PaethPredictor(Recon(a), Recon(b), Recon(c)) Definice filtru Paeth (a, b, c jsou jednotlivé bajty z odpovídajících pixelů): def paeth(a, b, c): p = a + b - c pa = abs(p - a) pb = abs(p - b) pc = abs(p - c) if pa <= pb and pa <= pc: return a elif pb <= pc: return b else: return c

Python (2011-04-14) : PNG 7 of 11 Poznámky k výrobě PNG I. Pokud byste chtěli PNG i ukládat, nejjednodušší je používat filtr 0 není to efektivní, ale zase s ním není co složitě počítat. I. Stejně tak je jednodušší ukládat obrázky jako plnobarevné v osmibitové barevné hloubce, protože zapisujete přímo jednotlivé RBG-hodnoty pro každý pixel. I. Když se budete chtít vyřádit, můžete místo RGB-hodnot ukládat pro každý pixel pouze jeho index v paletě. Ale také ho nechte osmibitový, protože menší počet bitů všechno výrazně zkomplikuje (viz příklady). Příklad PNG bez palety, 8 bpp Podívejme se na zub obrázku sachovnice.png, který je v osmibitové barevné hloubce a neobsahuje barvovou paletu:

Python (2011-04-14) : PNG 8 of 11 STRUKTURA: header: b'\x89png\r\n\x1a\n' chunks: 'length': b'\x00\x00\x00\r', 'type': b'ihdr', 'data': b'\x00\x00\x00\x03\x00\x00\x00\x03\x08\x02\x00\x00\ 'CRC': b'\xd9j"\xe8', }, 'length': b'\x00\x00\x00\x1c', 'type': b'idat', 'data': b'x\x9c%\xc3\xb1\r\x00\x00\x0c\xc3 >\xcf\xe9\xeep$\ 'CRC': b'\xa6 \xffu', }, 'length': b'\x00\x00\x00\x00', 'type': b'iend', 'data': b'', 'CRC': b'\xaeb`\x82', } IHDR (obrázky s jinou konečnou pěticí než právě 82000 nebudeme zpr 'width': 3, 'height': 3, 'bit depth': 8, 'colour type': 2, 'compression method': 0, 'filter method': 0, 'interlace method': 0, } IDAT: b'x\x9c%\xc3\xb1\r\x00\x00\x0c\xc3 >\xcf\xe9\xeep$\x84_m\x83\x92 IDAT rozkomprimovaný: b'\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\xff\xff\xff\x7f\x IDAT zafiltrované scanlines ve tvaru "(filtr, [(RGB-hodnoty jedn [ (0, [(255, 0, 0), (0, 255, 0), (0, 0, 255)]), (0, [(255, 255, 255), (127, 127, 127), (0, 0, 0)]), (0, [(255, 255, 0), (255, 0, 255), (0, 255, 255)]) ] IDAT odfiltrované pixely (tady je to jednoduché, když je filtr 0 [ [(255, 0, 0), (0, 255, 0), (0, 0, 255)], [(255, 255, 255), (127, 127, 127), (0, 0, 0)], [(255, 255, 0), (255, 0, 255), (0, 255, 255)] ] Příklad PNG s paletou, 4 bpp

Python (2011-04-14) : PNG 9 of 11 Podívejme se na zub podobnému obrázku sachovnice.plte.png, tentokrát však s paletou a ve čtyřbitové barevné hloubce:

Python (2011-04-14) : PNG 10 of 11 STRUKTURA: header: b'\x89png\r\n\x1a\n'} chunks: 'length': b'\x00\x00\x00\r', 'type': b'ihdr', 'data': b'\x00\x00\x00\x03\x00\x00\x00\x03\x04\x03\x00\x00\ 'CRC': b'\xa4\x06\xa8\x8c', }, 'length': b'\x00\x00\x00\x1b', 'type': b'plte', 'data': b'\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\ 'CRC': b'\x9cx:m', }, 'length': b'\x00\x00\x00\x1b', 'type': b'idat', 'data': b'x^\x05\x80\x81\x10\x00\x00\x0c\x02\x7f&\x83\x08$\ 'CRC': b'\xfeh\xa0=', }, 'length': b'\x00\x00\x00\x00', 'type': b'iend', 'data': b'', 'CRC': b'\xaeb`\x82', } IHDR: 'width': b'\x00\x00\x00\x03', 'height': b'\x00\x00\x00\x03', 'bit depth': 4, 'colour type': 3, 'compression method': 0, 'filter method': 0, 'interlace method': 0, } PLTE: b'\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\x7f\x7f\x7f\x 0-255 0 0 1-0 255 0 2-0 0 255 3-255 255 255 4-127 127 127 5-0 0 0 6-255 255 0 7-255 0 255 8-0 255 255 IDAT: b'x^\x05\x80\x81\x10\x00\x00\x0c\x02\x7f&\x83\x08$\x8b4b\xef\x

Python (2011-04-14) : PNG 11 of 11