Histogram (foto)

Et histogram (i fotografi ) er en graf over den statistiske fordeling af elementer i et digitalt billede med forskellig lysstyrke , hvor den vandrette akse repræsenterer lysstyrke, og den lodrette akse repræsenterer det relative antal pixels med en specifik lysstyrkeværdi.

Når du har studeret histogrammet, kan du få en generel idé om den korrekte eksponering , kontrast og farvemætning af billedet, evaluere den nødvendige korrektion både under optagelse (ændring af eksponering, farvebalance, belysning eller billedkomposition) og under efterfølgende forarbejdning.

Normalt vises kun et lyshedshistogram på skærmen på et digitalkamera (undtagelser er dyre spejlreflekskameraer), og et histogram for alle farvekanaler (se Farveadskillelse ) er allerede tilgængeligt på en computer i rastergrafikbehandlingsapplikationer .

Grundlæggende information

Billedhistogram (nogle gange: niveaugraf eller bare niveauer ) - et histogram over billedmætningsniveauer (totalt eller divideret med farvekanaler ).

Et billedhistogram giver dig mulighed for at evaluere mængden og variationen af ​​toner i et billede, såvel som det overordnede niveau af lysstyrke i et billede. For eksempel vil et undereksponeret billede toppe i det lave farveområde og falde af (eller slet ingen niveauer) i det lyse farveområde, mens et overeksponeret billede vil gøre det  modsatte. Et billede med utilstrækkeligt dynamisk område vil have en smal lysstyrke. Den akademiske repræsentation af den ideelle billedhistogramform er en flad gaussisk, hvor der er få meget mørke og meget lyse farver, og når de nærmer sig gennemsnitsfarverne, stiger deres antal. Gælder for optagelser med tilstrækkelig udfyldningsbelysning (som påvirker hele scenen) og ingen lyskilder i billedet.

I det generelle tilfælde beskriver billedhistogrammet ikke billedets kunstneriske kvaliteter (at optage en silhuet i modlys vil f.eks. ligne et undereksponeret (eller overeksponeret) billede på histogrammet), men i de fleste tilfælde giver det dig mulighed for at navigere i billedets "korrektionsretning" (hvis en sådan korrektion er påkrævet).

Redigering af niveauer

Mange fotoredigeringsprogrammer (f.eks . Adobe Photoshop , GIMP ) og Raw -filudviklingsprogrammer (UFRAW, PhotoOne, CaptureNX) giver dig mulighed for at redigere billedniveauer. Det kan gøres på følgende måder:

Konstruktionsalgoritme

Vi bygger en matrix, udfylder den med nuller. Normalt array [0..255]

Loop, for hver pixel:

Vælg den ønskede farvekanal eller find lysstyrken ved hjælp af formlen. Pixel -> værdi Den resulterende værdi skal være inden for array-indeksområdet, for eksempel [0..255]. Forøg værdien af ​​array[værdi] med 1.

Slut på cyklus.

Det resulterende array er et histogram, elementerne i arrayet er højderne af kolonnerne.

Implementering i Python :

# coding:utf """Brugeren indtaster navnet på filen med det billede, hvis histogrammer skal bygges. Histogrammer er bygget for hver af kanalerne, for lysstyrke (Luminans) og RGB-histogrammet. Programmet bygger histogrammer og gemmer dem i den aktuelle mappe. De resulterende histogrammer adskiller sig praktisk talt ikke fra histogrammer opnået i kommercielle programmer Programmet kræver Python 2.7 med PIL installeret""" fra PIL import Image , ImageDraw # moduler fra PIL def lum ( c ): #farve på en RGB-pixel -> lysstyrkeværdi #formel , der almindeligvis bruges til at bestemme lysstyrke retur int ( 0,3 * c [ 0 ] + 0,59 * c [ 1 ] + 0,11 * c [ 2 ]) def r ( c ): #RGB pixel farve -> R værdi returnere c [ 0 ] def g ( c ): #RGB pixel farve -> G værdi returnere c [ 1 ] def b ( c ): #RGB pixel farve -> B værdi retur c [ 2 ] def drawhist ( hname , H , harr ): """ Tegn et diagram, gem det i en fil i den aktuelle mappe hname - filnavn H - tegningshøjde harr - array med søjlehøjder i histogrammet " "" W = len ( harr ) #antal arrayelementer hist = Billede . new ( "RGB" , ( W , H ), "white" ) #opret tegning i memory draw = ImageDraw . Tegn ( hist ) #objekt at tegne på tegningen maxx = flydende ( max ( harr )) # højde på højeste søjle hvis maxx == 0 : # søjler er 0 draw . rektangel ((( 0 , 0 ), ( W , H )), fill = "sort" ) else : for i in range ( W ): draw . linje ((( i , H ),( i , H - harr [ i ] / maxx * H )), fill = "sort" ) #draw bars del draw #delete hist object . gem ( hname ) #gem billede til fil # liste med funktioner og filnavnspræfikser fnlist = [( lum , "luminosity_" ), ( r , "r_channel_" ), ( g , "g_channel_" ), ( b , "b_channel_" )] fname = input ( "input filnavn: " ) #Input filnavn , histogram kat. skal bygge im = Image . åben ( fname ) # åbn en fil # få en liste med formen [(n1, c1), (n2, c2), ...], hvor # c er farven på pixlen i RGB # n er antallet af pixels, der har den givne farve clrs = im . getcolors ( im . størrelse [ 0 ] * im . størrelse [ 1 ]) # bredde, højden af ​​histogrammet. # Bredden bør ikke ændres, pga alle funktioner vises i [0..255] W , H = 256 , 100 for fn , hname i fnlist : #iterate over alle funktioner harr = [ 0 for i i området ( W )] #opret et array [0, 0 , 0, ...] af længden W for n , c i clrs : #iterate over listen oprettet ovenfor index = fn ( c ) #fn - kortlæg farve til lysstyrke eller vælg en farvekanal #array elementindekser viser lysstyrkeværdier og så videre. Område [0..255] #værdier af matrixelementer = antal pixels med def. lysstyrkeværdi osv. harr [ index ] += n drawhist ( hname + "hist.png" , H , harr ) # tegn histogram # Tegn histogrammer efter lysstyrke og kanaler, nu # Tegn RGB-histogram rharr = [ 0 for i i rækkevidde ( W )] gharr = liste ( rharr ) bharr = liste ( rharr ) for n , c in clrs : rharr [ r ( c ) ] += n gharr [ g ( c ) ] += n bharr [ b ( c )] += n harr = [( rharr [ i ] + gharr [ i ] + bharr [ i ]) / 3 for i in range ( W )] drawhist ( "RGB_hist.png" , H , harr )

Brug i fotografering

Nogle kameraer giver dig mulighed for at se billedhistogrammet for optagne billeder (og nogle modeller med kontrastfokusering - under fokusering).

Links