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])
- Studer histogrammet til im_clean. For ? segmentere ut forgrunn (tekst) fra bakgrunnen ved terskling, hvor ville du lagt terskelen?
- 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?
- Pr?v ? endre p? hvor mye av "lyshets-masken" som blir lagt til. Hvilken effekt har dette p? bildets histogram?
- Hvor stor kan light_factor v?re f?r man ikke kan (fullstendig) skille forgrunn fra bakgrunn ved en enkel terskling?
- 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?
- 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?
- 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