Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''
- Napisati funkciju adaptiveMeanFilt koja implementira adaptivni aritmetički usrednjivač definisan sledećim izrazom:
- gde je g slika koja se filtrira, z¯ srednju vrednost okoline Sxy a α predstavlja odnos varijanse šuma i lokalne varijanse u okolini Sxy .
- Funkciju isprobati nad slikom lena.png kojoj je dodat AWGN varijanse 100. Koristiti parametre za region dimenzije 3x3. Prikazati dodatno kako izgleda slika α .
- --------------------------------------------------------------------------------------------------------------------------------------------------------------
- Parametar lokalne srednje vrednosti z¯ možemo unapred izračunati za svaku poziciju u okviru slike koristeći box filtar odgovarajuće veličine definisan okolinom Sxy .
- Lokalna varijansa je ovde određena korišćenjem scipy.ndimage.generic_filter funkcije.
- Funkcija implementira pokretni region oblika footprint parametra nad kojim se računa function funkcija i postavlja rezultat na odgovarajuću poziciju izlaza.
- Kao i ostale funkcije iz ndimage modula postoji mogućnost definisanja načina automatskog proširenja slike sa parametrom mode.
- Alternativno, lokalna varijansa se može odrediti i kao razlika između lokalne srednje vrednosti kvadrata slike i kvadrata lokalne srednje vrednosti:
- Tačna varijansa šuma na slici nam je vrlo retko poznata, ali možemo da pretpostavimo da ona predstavlja neki deo globalne varijanse, određen parametrom β u formi:
- U okviru zadatka koristiti parametar β od 10.
- '''
- import numpy as np
- import math
- from scipy import ndimage
- import plotly.express as px
- from skimage import io
- import numpy as np
- def adaptiveMeanFilt(g, S_shape, beta):
- N = np.prod(S_shape)
- z = ndimage.convolve(g.astype('float'), np.ones(S_shape)/N, mode='mirror')
- sigma_n2 = g.var()/beta
- sigma_S2 = ndimage.generic_filter(g.astype('float'), function=np.var, footprint=np.ones(S_shape), mode='mirror')
- alpha = np.minimum(sigma_n2/sigma_S2, 1)
- f = g - alpha*(g-z)
- return f, alpha
- img = io.imread('lena.png')
- fig = px.imshow(img, color_continuous_scale='gray')
- fig.show()
- rng = np.random.default_rng()
- img_noisy = img + rng.standard_normal(size=img.shape)*np.sqrt(100) + 0
- fig = px.imshow(img_noisy, color_continuous_scale='gray')
- fig.show()
- beta = 10
- S_shape = (3,3)
- img_filt, alpha = adaptiveMeanFilt(img_noisy, S_shape, beta)
- fig = px.imshow(img_filt, color_continuous_scale='gray')
- fig.show()
- fig = px.imshow(alpha, color_continuous_scale='gray')
- fig.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement