def isccsym(F): import ia898.src as ia if len(F.shape) == 1: F = F[np.newaxis,np.newaxis,:] if len(F.shape) == 2: F = F[np.newaxis,:,:] n,m,p = F.shape return(abs(F-np.conjugate(ia.ptrans(F[::-1,::-1,::-1],(1,1,1))))<10E-4).all()
def conv_media2(f, window): H, W = window f1 = np.empty(((f.shape[0] + H - 1), (f.shape[1] + W - 1))) f1[(H - 1):, (W - 1):] = f if H > 1: f1[:(H - 1), (W - 1):] = f[(f.shape[0] - (H - 1)):, :] if W > 1: f1[(H - 1):, :(W - 1)] = f[:, (f.shape[1] - (W - 1)):] if (H > 1) & (W > 1): f1[:(H - 1), :(W - 1)] = f[(f.shape[0] - (H - 1)):, (f.shape[1] - (W - 1)):] sat = f1.cumsum(1).cumsum(0) A = np.zeros_like(sat) B = np.zeros_like(sat) C = np.zeros_like(sat) D = np.zeros_like(sat) A = sat B[:, W:] = ia.ptrans(sat, (0, W))[:, W:] C[H:, :] = ia.ptrans(sat, (H, 0))[H:, :] D[H:, W:] = ia.ptrans(sat, (H, W))[H:, W:] g = A + D - C - B g = g[(H - 1):, (W - 1):] return g
def fp_match(f, f1): # DFT das imagens F = np.fft.fft2(f) F1 = np.fft.fft2(f1) # Idetificação do ângulo de rotação F = ia.dftview(F) F1 = ia.dftview(F1) Fp = ia.polar(F,F.shape) F1p = ia.polar(F1,F1.shape) Pc = ia.phasecorr(Fp,F1p) peak = np.unravel_index(np.argmax(Pc), Pc.shape) ang = (float(peak[1])/Pc.shape[1])*360 #Correção de rotação t1 = np.array([ [1,0,-f1.shape[0]/2.], [0,1,-f1.shape[1]/2.], [0,0,1]]); t2 = np.array([ [1,0,f1.shape[0]/2.], [0,1,f1.shape[1]/2.], [0,0,1]]); theta = np.radians(ang) r1 = np.array([ [np.cos(theta),-np.sin(theta),0], [np.sin(theta),np.cos(theta),0], [0,0,1]]); T = t2.dot(r1).dot(t1) f1c = ia.affine(f1,T,0) #Máxima correlação eentre f e f1 g = ia.phasecorr(f,f1c) idx = np.argmax(g) row,col = np.unravel_index(idx,g.shape) t = np.array(f.shape) - np.array((row,col)) f1rt = ia.ptrans(f1c,-t) return [g[row,col],f1rt]
# ## Correlação de fase para estimar o deslocamento e a correlação entre as imagens # In[15]: g = ia.phasecorr(f,f1c) idx = np.argmax(g) row,col = np.unravel_index(idx,g.shape) vx = g[row,col] t = np.array(f.shape) - np.array((row,col)) print('deslocamento:',np.array(f.shape) - np.array((row,col))) print('correlação:',vx) f1rt = ia.ptrans(f1c,-t) nb = ia.nbshow(3) nb.nbshow(f) nb.nbshow(f1c) nb.nbshow(f1rt) nb.nbshow() # ## Corrigir a translação e sobrepor as duas imagens para verificar se a implementação está funcionando # # Existem várias formas de sobrepor as duas imagens para uma melhor visualização: # - ponderar cada uma # - combinação no canal de cores, Red, Green, por exemplo # - combinação geométria (linhas pares e impares ou na forma de xadrez) # - ou exclusivo abs(f-f1)
def dftshift(f): import ia898.src as ia return ia.ptrans(f, np.array(f.shape) // 2)
print('Is this function symmetric?') print(ia.isccsym(np.fft.fft2(np.random.rand(100,100)))) # dimension variation print(ia.isccsym(np.fft.fft2(np.random.rand(101,100)))) print(ia.isccsym(np.fft.fft2(np.random.rand(101,101)))) # ### Image Example: circular filter # In[14]: if testing: img = mpimg.imread('../data/cameraman.tif') F = ia.dft(img) imgc = 1 * ia.circle(img.shape, 50, [img.shape[0]/2, img.shape[1]/2]) imgct = ia.ptrans(imgc, np.array(imgc.shape)//2) ia.adshow(ia.normalize(imgct),'circular filter') res = F * imgct ia.adshow(ia.dftview(res)) print('Is this filter symmetric?', ia.isccsym(res)) # ### Image Example 2: retangular filter # In[17]: if False: # testing: mquadra = ia.rectangle(img.shape, [50,50], [img.shape[0]/2, img.shape[1]/2]) ia.adshow(mquadra,'RETANGULO') mquadra = ia.ptrans(mquadra, array(mquadra.shape)/2)
print('teste 1 d') get_ipython().run_line_magic('timeit', 'ptrans(l,3)') get_ipython().run_line_magic('timeit', 'ia.ptrans(l,3)') print('teste 2 d') get_ipython().run_line_magic('timeit', 'ptrans(x,[1,2])') get_ipython().run_line_magic('timeit', 'ia.ptrans(x,[1,2])') print('teste 3 d') get_ipython().run_line_magic('timeit', 'ptrans(x3d,[1,2,1])') get_ipython().run_line_magic('timeit', 'ia.ptrans(x3d,[1,2,1])') # In[50]: if testing: f = mpimg.imread('/home/lotufo/ia898/data/cameraman.tif') g1 = ptrans(f, np.array(f.shape) // 3) g2 = ia.ptrans(f, np.array(f.shape) // 3) nb = ia.nbshow(2) nb.nbshow(g1, title='ptrans') nb.nbshow(g2, title='ia.ptrans') nb.nbshow() print('teste') get_ipython().run_line_magic('timeit', 'ptrans(f,np.array(f.shape)//3)') get_ipython().run_line_magic('timeit', 'ia.ptrans(f,np.array(f.shape)//3)') # In[34]: def dftshift(f): return ptrans(f, np.array(f.shape) // 2)
get_ipython().run_line_magic('matplotlib', 'inline') import matplotlib.image as mpimg # ### Example 1 # Show that the point of maximum correlation for two equal images is the origin. # # # In[4]: if testing: # 2D example f1 = mpimg.imread("../data/cameraman.tif") noise = np.random.rand(f1.shape[0], f1.shape[1]) f2 = ia.normalize(ia.ptrans(f1, (-1, 50)) + 300 * noise) g1 = ia.phasecorr(f1, f2) i = np.argmax(g1) row, col = np.unravel_index(i, g1.shape) v = g1[row, col] print(np.array(f1.shape) - np.array((row, col))) # In[ ]: if testing: print('max at:(%d, %d)' % (row, col)) ia.adshow(ia.normalize(f1), "input image") ia.adshow(ia.normalize(f2), "input image") ia.adshow(ia.normalize(g1), "Correlation peak at (%d,%d) with %d" % (row, col, v))
# ### Example 3 # Compare with dft # In[10]: if testing: f = mpimg.imread('../data/cameraman.tif') nb = ia.nbshow(3) nb.nbshow(f, 'Imagem original') F1 = np.fft.fft2(f) F2 = ia.dct(f) nb.nbshow( ia.normalize( np.log( np.abs(ia.ptrans(F1, (f.shape[0] // 2, f.shape[1] // 2)) + 1))), 'DFT') nb.nbshow(ia.normalize(np.log(abs(F2) + 1)), 'DCT') nb.nbshow() print('Tempo de execução DFT:') get_ipython().run_line_magic('timeit', 'F1 = np.fft.fft2(f)') print('\nTempo de execução DCT:') get_ipython().run_line_magic('timeit', 'F2 = ia.dct(f)') # ### Example 4 # Compare with scipy function # In[11]: if testing:
import ia898.src as ia # ### Example 1 # # Numeric examples in 2D and 3D. # In[3]: if testing: # 2D example f = np.arange(15).reshape(3,5) print("Original 2D image:\n",f,"\n\n") print("Image translated by (0,0):\n",ia.ptrans(f, (0,0)).astype(int),"\n\n") print("Image translated by (0,1):\n",ia.ptrans(f, (0,1)).astype(int),"\n\n") print("Image translated by (-1,2):\n",ia.ptrans(f, (-1,2)).astype(int),"\n\n") # In[4]: if testing: # 3D example f1 = np.arange(60).reshape(3,4,5) print("Original 3D image:\n",f1,"\n\n") print("Image translated by (0,0,0):\n",ia.ptrans(f1, (0,0,0)).astype(int),"\n\n") print("Image translated by (0,1,0):\n",ia.ptrans(f1, (0,1,0)).astype(int),"\n\n") print("Image translated by (-1,3,2):\n",ia.ptrans(f1, (-1,3,2)).astype(int),"\n\n")