Histogram (foto)

Histogram (ve fotografii ) je graf statistického rozložení prvků digitálního snímku s různým jasem , ve kterém vodorovná osa představuje jas a svislá osa představuje relativní počet pixelů se specifickou hodnotou jasu.

Po prostudování histogramu můžete získat obecnou představu o správné expozici , kontrastu a sytosti barev snímku, vyhodnotit požadovanou korekci jak při fotografování (změna expozice, vyvážení barev, osvětlení nebo kompozice snímku), tak i při následném zpracovává se.

Obvykle se na obrazovce digitálního fotoaparátu zobrazuje pouze histogram světlosti (výjimkou jsou drahé zrcadlovky) a histogram pro všechny barevné kanály (viz Separace barev ) je již dostupný na počítači v aplikacích pro zpracování rastrové grafiky .

Základní informace

Histogram obrázku (někdy: graf úrovní nebo jen úrovně ) - histogram úrovní saturace obrázku (celkový nebo dělený barevnými kanály ).

Histogram obrázku umožňuje vyhodnotit množství a rozmanitost tónů v obrázku a také celkovou úroveň jasu v obrázku. Například podexponovaný snímek bude vrcholit v oblasti s nízkými barvami a klesat (nebo nebude mít žádnou úroveň) v oblasti jasných barev, zatímco přeexponovaný snímek bude dělat  opak. Snímek s nedostatečným dynamickým rozsahem bude mít úzký záblesk jasu. Akademická reprezentace ideálního tvaru histogramu obrazu je plochý Gaussian, ve kterém je málo velmi tmavých a velmi jasných barev, a jak se přibližují k průměrným barvám, jejich počet se zvyšuje. Platí pro fotografování s dostatečným výplňovým osvětlením (ovlivňujícím celou scénu) a bez světelných zdrojů v záběru.

V obecném případě obrazový histogram nepopisuje umělecké kvality snímku (například fotografování siluety v protisvětle bude na histogramu vypadat jako podexponovaný (nebo přeexponovaný) snímek), ale ve většině případů umožňuje navigaci ve „směru korekce“ obrázku (pokud je taková korekce požadována).

Úpravy úrovní

Mnoho editorů fotografií (např . Adobe Photoshop , GIMP ) a programů pro vývoj souborů Raw (UFRAW, PhotoOne, CaptureNX) umožňuje upravovat úrovně obrázků. Lze to provést následujícími způsoby:

Konstrukční algoritmus

Vytvoříme pole, naplníme ho nulami. Obvykle pole [0..255]

Smyčka pro každý pixel:

Vyberte požadovaný barevný kanál nebo najděte jas podle vzorce. Pixel -> hodnota Výsledná hodnota musí být v rozsahu indexu pole, například [0..255]. Zvyšte hodnotu pole[value] o 1.

Konec cyklu.

Výsledné pole je histogram, prvky pole jsou výšky sloupců.

Implementace v Pythonu :

# coding:utf """Uživatel zadá název souboru s obrázkem, jehož histogramy je třeba sestavit. Histogramy se sestaví pro každý z kanálů, pro jas (Luminance) a histogram RGB. Program vytvoří histogramy a uloží je do aktuální složky Výsledné histogramy se prakticky neliší od histogramů získaných v komerčních programech Program vyžaduje Python 2.7 s nainstalovaným PIL""" z PIL import Image , ImageDraw # moduly z PIL def lum ( c ): #barva RGB pixelu -> hodnota jasu #vzorec , který se běžně používá k určení jasu return int ( 0,3 * c [ 0 ] + 0,59 * c [ 1 ] + 0,11 * c [ 2 ]) def r ( c ): # Barva pixelu RGB -> Návrat hodnoty R c [ 0 ] def g ( c ): # Barva pixelu RGB -> Návrat hodnoty G c [ 1 ] def b ( c ): # Barva pixelu RGB -> B hodnota return c [ 2 ] def drawhist ( hname , H , harr ): """ Nakreslete graf, uložte jej do souboru v aktuální složce hname - název souboru H - výška výkresu harr - pole s výškami sloupců v histogramu " "" W = len ( harr ) # počet prvků pole hist = Obrázek . new ( "RGB" , ( W , V ), "white" ) #vytvoření kresby v paměti draw = ImageDraw . Kreslit ( hist ) #objekt ke kreslení na výkresu maxx = float ( max ( harr )) #výška nejvyšší čáry if maxx == 0 : #bary jsou 0 kreslit . obdélník ((( 0 , 0 ), ( W , V )), fill = "black" ) else : for i in range ( W ): draw . čára ((( i , H ),( i , H - harr [ i ] / maxx * H )), výplň = "černá" ) #draw bars del draw #delete hist object . uložit ( hname ) #uložit obrázek do souboru # seznam s funkcemi a předponami názvů souborů fnlist = [( lum , " luminosity_" ) , ( r , "r_channel_" ), ( g , "g_channel_" ), ( b , "b_channel_" )] fname = input ( "název vstupního souboru: " ) #Název vstupního souboru , histogram cat. potřeba vybudovat im = Image . otevřít ( fname ) # otevřít soubor # získat seznam ve tvaru [(n1, c1), (n2, c2), ...], kde # c je barva pixelu v RGB # n je počet pixely, které mají danou barvu clrs = im . getcolors ( im . size [ 0 ] * im . size [ 1 ]) # šířka, výška histogramu. # Šířka by se neměla měnit, protože všechny funkce jsou zobrazeny v [0..255] W , V = 256 , 100 pro fn , hname ve fnlist : #iterovat přes všechny funkce harr = [ 0 pro i v rozsahu ( W )] #vytvořit pole [0, 0 , 0, ...] délky W pro n , c v clrs : #iterujte přes seznam vytvořený výše index = fn ( c ) #fn - mapujte barvu na jas nebo vyberte barevný kanál #array element indexy ukazují hodnoty jasu a tak dále. Rozsah [0..255] #hodnoty prvků pole = počet pixelů s def. hodnota jasu atd. harr [ index ] += n drawhist ( hname + "hist.png" , H , harr ) # kreslit histogram # Kreslit histogramy podle jasu a kanálů, nyní # Kreslit histogram RGB rharr = [ 0 pro i v rozsahu ( W )] gharr = seznam ( rharr ) bharr = seznam ( rharr ) pro n , c v clrs : rharr [ r ( c )] += n gharr [ g ( c )] += n bharr [ b ( c )] += n harr = [( rharr [ i ] + gharr [ i ] + bharr [ i ]) / 3 pro i v dosahu ( W )] drawhist ( "RGB_hist.png" , H , harr )

Použití ve fotografii

Některé fotoaparáty umožňují zobrazit histogram pořízených snímků (a některé modely s kontrastním ostřením - během ostření).

Odkazy