Přednáška 11 Úpravy rastrového obrazu Geometrické trasformace Pro geometrické transformace rastrového obrazu se používá mapování dopředné prochází se pixely původního rastru a určuje se barva a poloha pixelu ve výsledném rastru zpětné pro pixely výsledného rastru se hledají odpovídající pixelyvpůvodním rastru Žára, J., Beneš, B., Felkel, P. Moderní počítačová grafika. Computer Press, Brno, 1998. ISBN 8-76-9-9. Foley, Van D. Computer Graphics. Principles and Practice. Addison-Wesley,1991. Při dopředném mapování mohou vznikat prázdná místa ve výsledném rastru. 1 Přednáška 11 Otáčení Příklad vzniku děr v závislosti na úhlu otáčení Dochází ke změně rozměrů obrázku (v ojedinělých případech zůstává rozměr stejný) Bezproblémové otáčení o násobky 9 Otáčení o libovolný úhel: při dopředném otáčení vznikají díry, které je potřeba nalézt a určit jejich barvu z vyplněných sousedů při zpětném mapování se určí obrysy, pro jednotlivé body nového rastru se hledají polohy v původní rastru (většinou reálná hodnota) vybranou metodou (volba se promítne do kvality) se určí barva výsledného pixel dle sousedů vpůvodním rastru ( š ', v') = f ( š, v, α) Přednáška 11 3 Přednáška 11
Změna velikosti Princip: převzorkování převedení diskrétního signálu na spojitý a provedení nového vzorkování Interpolace nejbližším sousedem novyrozmer = staryrozmer * koefzmeny Pokud je koeficient zvětšení (zmenšení) k celé číslo, potom každý pixel zopakuji k-krát (kreslí se pouze každý k- týřádek). Pro reálný poměr se určí nový rozměr a pro každý pixel v novém rozměru určím nejbližšího souseda v původním obrázku. 1 3 5 Interpolace Lineární interpolace (bilineární) x < x < x 1 výpočet hodnoty f(x), pokud znám f(x ) a f(x 1 ) bilineární interpolaci získám postupnou aplikací lineární interpolace v obou směrech f x x x) = f X + ( f X 1 f X ) x1 x ( Kubická interpolace (bikubická) vytvoření splajnové kubické křivky výpočet libovolného bodu na křivce barva barva barva Interpolace nejbližším sousedem Lineární interpolace Kubická interpolace pix pix pix Přednáška 11 5 Přednáška 11 6 Kubická interpolace Příklady interpolace Originál Interpolace nejbližším sousedem Bilineární interpolace Přednáška 11 7 Přednáška 11 8
(Lineární) interpolace v ploše Detekce hran 1 1.5 y.33 3 x 1 A 3 m B Výpočet lze provádět postupně (dvě interpolace v řádku a následně z vypočítaných hodnot provést interpolaci ve sloupci) nebo jediným výpočtem Barva = (1-n)*((1-m)*Barva1 + m*barva) + (n)*((1-m)*barva3 + m*barva) n zvetsenix=3, zvetseniy= Pixel [7; 3] v novém rastru je mapován do originálního rastru na pozici [.33; 1.5] m =,333; n =.5 Barva se určuje z barev pixelů [; 1], [3; 1], [; ], [3; ] Barva1 (, 55, 55) Barva (, 55, 55) BarvaA (16, 55, 55) Barva3 (55,, 15) Barva (55, 19, 5) BarvaB (55, 1, 1) Barva interpolovaného pixelu (1, 3, 177) Přednáška 11 9 Založena na zjišťování gradientu jasu v obraze. Hrana je charakteristická výraznou změnou jasu. Vyšetřujeme vždy lokální okolí bodu (gradientové metody, náhrada derivací diferencemi) Na daný bod a jeho nejbližší okolí aplikujeme zvolený operátor (masku) a vytváříme gradientový obraz. Pomocí prahování (optimální variační práh) určíme hrany. Přednáška 11 1 Masky pro určování hran Barevné transformace Konvoluční jádra pro Laplaceovy operátory 1 L1 = 1 1 1 Konvoluční jádro pro Sobelův operátor Robertsův operátor L = 8 L3 = f ( i, = f ( i, f ( i + 1, j + 1) + f ( i, j + 1) f ( i + 1, 1 1 1 1 S = Sx = Sy = 1 1 S = S x + S y Model RGB zjištění složek Odfiltrování barevné složky: nastavení hodnoty dané složky na pro všechny pixely Úprava barevné složky: vynásobení hodnoty dané složky zadaným koeficientem Zesvětlení (ztmavení): odpovídá úpravě všech složek za použití stejného koeficientu Úprava kontrastu (algoritmus samostudium) Ostření na základě velikosti gradientu: g ( i, = f ( i, + c. s( i, kde s(i, je funkce určující velikost gradientu a c je ostřící koeficient. Důsledná kontrola výsledné hodnoty daného kanálu: interval, 1 nebo, 55 Přednáška 11 11 Přednáška 11 1
Barevné složky RGB (Java) Color c = new Color (55,, 18); int r = c.getred(); int g = c.getgreen(); int b = c.getblue(); String rgb = Integer.toHexString(c.getRGB()); rgb = rgb.substring(, rgb.length()); int i = c.getrgb(); // v hexa AARRGGB // AA standardně nastaveno na xff r = (i & xff) >> 16; g = (i & xff) >> 8; b = i & xff; Upozornění! Grafické knihovny některých vývojových nástrojů skládají RGB kanály opačně (např. Delphi) GetRValue (Color : TColor), GetBValue (Color : TColor), GetGValue (Color : TColor) RGB (R : byte, G: byte, B : byte) Color : TColor; R, G, B : byte; Color := B shl 16 + G shl 8 + R; R := (Color and $FF); // R:= (byte) Color; G := (Color and $FF) shr 8; // G:= (Color shr 8) and $FF; // G:= (byte) (Color shr 8); TColor BBBBBBBB GGGGGGGG RRRRRRRR 31... 3... 16 15... 8 7... int AAAAAAAA RRRRRRRRGGGGGGGG BBBBBBBB 31... 3... 16 15... 8 7... Přednáška 11 13 B := (Color and $FF) shr 16; // B:= (Color shr 16) and $FF; // B:= (byte)(color shr 16); Přednáška 11 1 Úprava jasu Kontrast Při chybné úpravě jasu se mění odstín 55 17 Snížení kontrastu Zvýšení kontrastu Při správné úpravě jasu se odstín nemění Větší zvýšení kontrastu 17 55 Přednáška 11 15 Přednáška 11 16
Černý a bílý bod Histogram 55 17 Černý bod Bílý bod 17 55 Určuje četnost pixelů s jednotlivými hodnotami jasu U obrazů s odstíny šedé má jeden rozměr, u barevných obrazů 3 rozměry Úpravou histogramu lze měnit vzhled obrazu Využívá se při GAMA korekci Mezi používané funkce patří prahování zrovnoměrnění roztažení Přednáška 11 17 Přednáška 11 18 Odstranění šumu Vytváření embosovaného vzoru Odstranění šumu většinou způsobí rozostření obrázku Filtrační metoda zprůměrování vážený průměr 1/ m = 1/ 1/16 m = 1/16 1/ 1/ /16 1/16 1/16 medián nahrazení hodnoty pixelu mediánem (střední hodnotou) z okolních pixelů Principem je složení originálu a negativu posunutého v určeném směru o určený počet pixelů. Postup: vytvoření negativu posunutí sečtení dělení Příklad pro posunutí vpravo nahoru o pixely: B[i,j]=(A[i,j] + (1 - A[i+,j-])) / Přednáška 11 19 Přednáška 11
Převod na odstíny šedé Nejjednodušší způsob redukce barev v obraze Realizuje se postupným přepočtem jasu všech pixelů Jeden z doporučených vztahů: jas =,99*r +,587*g +,11*b Lidské oko je různě citlivé na jednotlivé barvy (nejvíce na zelenou) Snížení barevného rozsahu Využití: při přípravě k tisku na méně barevných zařízeních snížení paměťové náročnosti nutnost při ukládání do určitých formátů Nejpoužívanější metody: půltónování nahrazení vícebarevného pixelu několika pixely s omezenou barevností rozptylování rozlišení zůstává zachováno náhodné rozptylování maticové rozptylování rozptylování s distribucí chyby Přednáška 11 1 Přednáška 11 Negativ a inverze barev Separace barev Negativní obraz: pro všechny pixely upravíme intenzity barevných kanálů odečtením stávající intenzity od plné hodnoty r = 1 - r r = (55 - r) g = 1 - g g = (55 - g) b = 1 - b b = (55 - b) Využití především u modelu CMY (CMYK) Pro tisk na vícebarevných strojích Vytvoření tří (čtyř) obrazů v šedých odstínech, představující úroveň jednotlivých barevných kanálů Pro R: r = r, g = r, b = r Inverze barev: uspořádání použitých barev (nebo barev palety) podle jasu vzájemná výměna dvojic barev Přednáška 11 3 Přednáška 11