Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''
- Napisati funkciju idealNotchFilter koja implementira idealni noč filtar definisan izrazom:
- gde su (u,v) prostorne koordinate DFT slike, D1 i D2 su euklidska rastojanja posmatrana od pozicija para smetnji (u0,v0) i (−u0,−v0) a D0 je poluprečnik kružnice.
- Prikazati amplitudsku karakteristiku filtra, kao i dodatan 3D prikaz.
- Definisanim filtrom filtrirati periodičnu smetnju prisutnu u slici moon_periodic.png.
- ------------------------------------------------------------------------------------------------------------------------------------------------------------
- Noč filtri se definišu preko rastojanja D1(u,v) i D1(u,v) u odnosu na koordinate (u0,v0) i (−u0,−v0) frekvencijskih komponenti koje treba potisnuti:
- Član u−P2 i v−Q2 predstavljaju (u,v) koordinate sa koordinatnim početkom u sredini slike.
- Svaki notch filtar potiskuje jedan par smetnji (jedna smetnja i njena odgovarajuća simetrija u spektru), tako da za potiskivanje više njih potrebno je nadovezati filtre.
- '''
- def idealNotchFilter(H_size,D0,u0,v0):
- u = np.arange(H_size[0]).reshape(-1, 1) - np.floor(H_size[0]/2)
- v = np.arange(H_size[1]) - np.floor(H_size[1]/2)
- D1 = np.sqrt((u-u0)**2 + (v-v0)**2)
- D2 = np.sqrt((u+u0)**2 + (v+v0)**2)
- H = (D1>D0) & (D2>D0)
- return H
- import plotly.express as px
- from skimage import io
- import numpy as np
- img = io.imread('moon_periodic.png')
- fig = px.imshow(img, color_continuous_scale='gray')
- fig.show()
- IMG = np.fft.fftshift(np.fft.fft2(img, s=(2*img.shape[0],2*img.shape[1])))
- fig = px.imshow(np.log(np.abs(IMG)+1), color_continuous_scale='gray')
- fig.show(config={'modeBarButtonsToAdd':['drawline',
- 'drawopenpath',
- 'drawcircle',
- 'eraseshape']})
- H1 = idealNotchFilter(IMG.shape, 5, 128, 40)
- fig = px.imshow(np.abs(H1), color_continuous_scale='gray')
- fig.show()
- H2 = idealNotchFilter(IMG.shape, 5, -128, 40)
- fig = px.imshow(np.abs(H2), color_continuous_scale='gray')
- fig.show()
- import plotly.graph_objects as go
- fig = go.Figure()
- fig.add_trace(go.Surface(z=np.abs(H1*H2)*1))
- fig.show()
- IMG1 = IMG * H1 * H2
- fig = px.imshow(np.log(np.abs(IMG1)+1), color_continuous_scale='gray')
- fig.show()
- img1 = np.real(np.fft.ifft2(np.fft.ifftshift(IMG1)))
- img1 = img1[:img.shape[0],:img.shape[1]]
- fig = px.imshow(img1, color_continuous_scale='gray')
- fig.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement