Oppgave 1 - Programmering av histogramfunksjon
F?RST: S?rg for at du er i stand til ? forklare hvordan et histogram reflekterer forskjellige egenskaper ved et bilde!
I Python kan man f? tilgang til et bildes histogram ved bruk av f.eks. funksjonene plt.hist og np.histogram (h = np.histogram(bilde, bins=256, range=[0, 255])). Her skal du programmere ved hjelp av for-l?kker din egen versjon av histogramfunksjonen. Du kan anta at vi har heltallige pikselverdier mellom 0 og 255.
Oppgave 2 - Line?r gr?tonetransform
Anta at et bilde har middelverdi lik 100 og varians lik 400, alts? μ = 100 og σ^2 = 400.
- Hvis bildet var lagret som et 8-bits helltallsbilde, hva ville du kunne si om "lysheten/m?rkheten" og kontrasten til bildet? Hint: Hva er bildets standardavvik, sigma? Anta at histogrammet likner en Gauss-funksjon (har klokkeform), og skisser histogrammet.
- Hvis hovedvekten av pikselene l? i intervallet [50,150] og du ville benytte en line?r transform for ? maksimere kontrasten i dette intervallet, og bildet skulle lagres som 8-bit, hva ville koeffisientene i transformen v?re?
- Hvis bildet blir sendt igjennom gr?tonetransformen: g(x,y) = 2*f(x,y) + 10, hva blir det transformerte bildets middelverdi og varians?
- Hvis jeg ?nsker at bildet skal ha μ = 128 og σ = 64, hvilken line?r transform ville jeg benyttet?
- Hvis bildet hadde et tiln?rmet Gaussisk (normalfordelt) histogram, og jeg skulle lagre bildet som 10-bits heltallsverdier, hvilken line?r transform ville du valgt om kun ca 5% av pikslene kunne godtas bli klipt?
Oppgave 3 - Programmering av line?r gr?tonetransform
Programmer et Python-program som utf?rer en line?r gr?tonetransform slik at bildets middelverdi og standardavvik blir endret til satte parametre, henholdsvis m_t og sigma_t. Pr?v programmet med flere forskjellige input-parametre. Studer resultatbildenes histogrammer.
Oppgave 4 - Ikke-line?re, parametriske transformer
- Tegn og forklar hvordan de f?lgende gr?tonetransformene endrer kontrasten i bildet: Logaritmisk, eksponentiell og kvadratrotskalering.
- Anta at et bildes piksler hovedsakelig best?r av lavintensitets-piksler, og spredningen mellom histograms?ylene ?kte med ?kt intensitet. Hvilken av de nevnte transformene ville du benyttet for ? gj?re kontrasten i bildet bedre om vi visuelt skulle tolke bildet?
- Hvis skjermen din har en sammenheng mellom pikselverdier og visningsintensitet som beskrevet i ligning (3.2-3) med gamma=5, hvilken gr?tonetransform ville kunne kompensert for denne avbildningsfeilen?
Oppgave 5 (st?tteoppgave) - Sanntidseksperimentering med gr?tonetransformasjoner (**)
Benytt den interaktive Java-appleten under http://www.imageprocessingbasics.com/image-graylevel-transforms/ til ? eksperimentere med gr?tonetransformer. Gj?r deg kjent med effektene av parametervalgene i spesielt de line?re transformene.
Oppgave 6 - Oppgave 3.6 i DIP
Forklar hvorfor man ved bruk av diskret histogramugjevning generelt ikke f?r et helt flatt histogram.
Oppgave 7 - Programmering av histogramutjenving
Programmer et Python-program som leser inn et 8 bits png-bilde [se ukeoppgaver 1] og utf?rer histogramutjevning. Kj?r programmet med car.png som inputbilde og se om resultatet blir likt eksemplet fra forelesningen.
Oppgave 8 - Programmering av histogramtilpasning
Lag en Python-implementasjon av histogramtilpasning til et vilk?rlig histogram basert p? fremgangsm?ten forklart p? lysark s. 46 ("fremgangsm?te 2").
Oppgave 9 - Oppgave 3.12 i DIP
Forklar hvordan man kan oppdatere histogrammene ved lokale gr?tonetransformer (i steden for ? regne ut helt nytt histogram for hvert vindu).
Oppgave 10 - Eksperimentering med lokale gr?tonetransformer (**)
Om du har tid og t?lmodighet, benytt Java-appleten under http://www.imageprocessingbasics.com/local-graylevel-mapping/ til ? gj?re deg kjent med parametrene i de lokale gr?tonetransformene vi har snakket om p? forelesningen.
** Merk: Se Ukeoppgaver 1 ang. disse Java-appletene.