Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''
- Napisati funkciju gaussBandStopFilter koja implementira Gausov filtar nepropusnik opsega dat formulom:
- gde su (u,v) prostorne koordinate DFT slike, D je euklidsko rastojanje posmatrano od sredine slike, D0 je poluprečnik a W širina prstena.
- Definisanim filtrom filtrirati periodičnu smetnju prisutnu u slici moon_periodic.png. Dodatno prikazati amplitudsku karakteristiku filtra, 3D prikaz i poprečni presek.
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------
- Napomena: Za eventualne probleme deljenja sa 0 koristiti np.finfo('float').eps.
- '''
- def gaussBandStopFilter(H_size,D0,W):
- 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)
- D = np.sqrt(u**2 + v**2)
- H = 1-np.exp(-0.5*((D**2-D0**2)/(D*W + np.finfo('float').eps))**2)
- return H
- import numpy as np
- print(np.finfo('float').eps)
- import plotly.express as px
- from skimage import io
- 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']})
- print(np.sqrt((256-128)**2+(256-216)**2))
- H = gaussBandStopFilter(IMG.shape, 134, 5)
- fig = px.imshow(np.abs(H), color_continuous_scale='gray')
- fig.show()
- import plotly.graph_objects as go
- from plotly.subplots import make_subplots
- fig = make_subplots(rows=1, cols=2, specs=[[{'type': 'surface'}, {'type': 'scatter'}]])
- fig.add_trace(go.Surface(z=np.abs(H)), row=1, col=1)
- fig.add_trace(go.Scatter(y=np.abs(H)[256], mode='lines'), row=1, col=2)
- fig.show()
- IMG1 = IMG * H
- 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