IN2070 h?st 2023 - UKEOPPGAVER 7

Disse oppgavene omhandler segmentering ved terskling.

Oppgave 1 - Generell gr?toneklassifikasjon til forgrunn/bakgrunn

Her f?lger litt Pyton-kode for ? f? dere i gang. Den laster inn et bilde av en lys tekst p? m?rk bakgrunn. (Bildet ligger p? det vante stedet.)

from scipy.misc import imread

# Load a "clean" image
im_clean = imread('textImage_clean.png', flatten=True)
N, M = im_clean.shape

# Add some noise
noise_std = 30 # How much white noise to add
im_noisy = im_clean + noise_std * np.random.normal(0, 1, [N,M])
im_noisy = np.clip(im_noisy, 0, 255)

# Add varying light-intesity model
light_factor = 10 # Increasing this increases effect of our varying-light model
light_mask = np.array([[1.0*(x-M/2)/M for x in range(1, M+1)] for y in range(N)])
im_light = im_clean + light_factor * light_mask
im_light = np.clip(im_light, 0, 255)

# Separate background and foreground pixels using our "clean" image
background_pixels = [im_noisy[x][y] for x in range(N) for y in range(M) if im_clean[x][y] < 150]
foreground_pixels = [im_noisy[x][y] for x in range(N) for y in range(M) if im_clean[x][y] > 150]

# Histograms of background and foreground pixels
h_b, _ = np.histogram(background_pixels, G, range=[0, G])
h_f, _ = np.histogram(foreground_pixels, G, range=[0, G])

 

  1. Studer histogrammet til im_clean. For ? segmentere ut forgrunn (tekst) fra bakgrunnen ved terskling, hvor ville du lagt terskelen?
  2. Pr?v ? endre p? hvor mye st?y som legges til bildet, noise_std-variabelen, og studer effekten dette har p? resultathistogrammet. Hvordan spiller dette inn p? muligheten for ? skille forgrunn fra bakgrunn ved terskling?
  3. Pr?v ? endre p? hvor mye av "lyshets-masken" som blir lagt til. Hvilken effekt har dette p? bildets histogram?
  4. Hvor stor kan light_factor v?re f?r man ikke kan (fullstendig) skille forgrunn fra bakgrunn ved en enkel terskling?
  5. Lag et histogram for bakgrunnspikslene og forgrunnspikslene (h1 og h2) hver for seg. Plot de begge i samme figur. Basert p? dette, hvor ville du lagt terskelen for ? segmentere ut forgrunn fra bakgrunn?
  6. Fra h1 og h2 og en gitt terskel t, hvor mange feilklassifiserte piksler (piksler som skulle v?rt satt til bakgrunn, men som som blir satt til forgrunn, og omvendt) ville man f?tt?
  7. Fra h1 og h2, finn de normaliserte histogrammene p1 og p2, samt F og B slik at det (totale) normaliserte histogrammet kan skrives p = B*p1 + F*p2. Se forelesningsnotat s. 10.

Oppgave 2 - Effekten av glatting

Last inn bildet discImage.png. Studer bildets histogram. Utf?r middelverdifiltrering med forskjellige filterst?rrelser. Studer hva slik filtrering gj?r med bildets histogram, og gi en forklaring p? hva du ser.

Oppgave 3 - Terskling i praksis

Implementer Otsus metode, Ridler & Calvards metode (k-means, s. 746 i DIP,4Ed.) , og gj?r deg kjent med f?lgende implementasjon av Niblacks adaptive, lokale metode:

import numpy as np
from scipy.signal import convolve2d

def get_niblack(im, n, k):
    im = im.astype(float)
    im_localmean = convolve2d(im, np.ones((n, n)) / (n**2), mode='same')
    im_localsquared = convolve2d(np.square(im), np.ones((n, n)) / (n**2), mode='same')
    im_localstd = np.sqrt(im_localsquared - np.square(im_localmean))
    
    ret = im > (im_localmean + k * im_localstd)
    return ret
Publisert 8. okt. 2023 21:24 - Sist endret 8. okt. 2023 21:24