IN2070 h?st 2023 - L?sningshint 4

Oppgave 1 - Oppgave 3.6 i DIP

Ved histogramutjevning benytter vi en ren, global gr?tonetransform.  Alts? har vi en funksjon T, som for alle intensiteter i gir oss en ny intensitet T[i].  Og det er ogs? alt vi har tilgjengelig.

Om vi generelt skal sikre oss et helt flatt histogram, m? vi kunne "brekke" opp noen av v?re histograms?yler.  ? "brekke" opp en histograms?yle for intensitet i betyr at noen av pikslene med denne intensiteten m? f? en annen transformert verdi enn de resterende pikslene.  Dette bryter med at alt vi har er en funksjon T som transformerer _alle_ piksler likt.

Oppgave 2 - Praktisk histogramutjevning


1. Finn histogram. ?verst venstre.
2. Finn normalisert kumulativt histogram. ?verst h?yre.
3. Bygg transformtabell (se forelesningsnotater). T = (0, 3, 4, 5, 7, 7, 7, 7)
4. Utf?r mappingen. Nederst venstre figur er det utjevnede histogrammet.

Oppgave 3 - Programmering av histogramutjevning

G = 256  # Antar 8-bit

# Finn innbildets histogram
h = my_hist(im, G)  # Jfr ukeoppgave forrige uke

# Finn det normaliserte, kumulative histogrammet:
c = np.cumsum(h) / np.sum(h)

# Transformen er gitt som en skalert versjon av c
T = np.floor(c * (G-1))

# Transformer pikslene med tabelloppslag
im_out = T[im.astype(int)]

Husk at man kan ogs? benytte histogramtilpasnings-algoritmen som ettersp?rres i Oppgave 6, og hvor q er en konstant funksjon [q = np.ones(256)/256].

Oppgave 4 - Konvolusjon og histogramutjevning

De ekstra pikslene med verdi 0 krever sin plass og flytter histogrammet mot h?yre. F?lgelig kan bildet bli lysere enn ?nsket og med redusert kontrast.

Oppgave 6 - Programmering av histogramtilpasning

def histogramtilpass(img, q, G):
    # im <- innbilde med G graatoner
    # q  <- oensket normalisert histogram

    # Finn innbildets normaliserte, kumulative histogram
    h = my_hist(img, G)  # Jfr oppgave uke 2
    c = np.cumsum(h) / np.sum(h)
    
    # Finn det oenskede kumulative histogrammet
    cq = np.cumsum(q)
    
    # Lag transformen
    T = np.zeros(G)
    for i in range(G):
        T[i] = np.argmin(np.abs(c[i] - cq))
    
    # Anvend T paa hver piksel og returner resultatet
    return T[img.astype(int)]

 

Oppgave 8 - Histogramutjevning i det kontinuerlige tilfellet


Publisert 15. sep. 2023 17:20 - Sist endret 15. sep. 2023 17:20