A translação periódica é uma translação de uma imagem que se repete periodicamente como se fosse uma parede ladrilhada e cada ladrilho fosse a imagem em questão.
A translação periódica da imagem f pelo deslocamento (dh,dw) é ilustrada no exemplo a seguir. A imagem f4 é montada a partir de 4 imagens. Sua montagem é feita com o auxílio das funções vstack e hstack. Estas funções do NumPy concatenam as imagens da tupla na vertical (vstack) ou horizontal (hstack). No caso iremos fazer uma translação por (-30,-80). Note que no trecho do código abaixo, estamos usando mapeamento inverso e há necessidade de multiplicarmos (dh,dw) por -1. Como a translação é periódica e estamos montando as 4 imagens, além de multiplicarmos por -1 somamos (H,W) e fazemos o módulo por (H,W) para que o valor fique entre (0,0) e (H-1,W-1):
In [1]:
%matplotlib inline
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import numpy as np
In [3]:
f = mpimg.imread('../data/cameraman.tif')
plt.imshow(f,cmap='gray'),plt.title('original')
H,W = f.shape
dh,dw = (-30,-80)
dhi = (-dh + H) % H # mapeamento inverso igual feito em iaffine (inversa de T)
dwi = (-dw + W) % W # mapeamento inverso
f2 = np.vstack((f,f))
f4 = np.hstack((f2,f2))
plt.figure(1)
plt.imshow(f4,cmap='gray'), plt.title('montagem periódica de f')
f4[dhi:dhi+H,dwi ] = 255
f4[dhi:dhi+H,dwi+W-1] = 255
f4[dhi ,dwi:dwi+W] = 255
f4[dhi+H-1,dwi:dwi+W] = 255
plt.figure(2)
plt.imshow(f4,cmap='gray'), plt.title('marcação de f transladada')
g = f4[dhi:dhi+H,dwi:dwi+W]
plt.figure(3)
plt.imshow(g,cmap='gray'), plt.title('f periodicamente translada por (%d,%d)' % (dh,dw))
Out[3]:
Na toolbox ia898
, a translação periódica é implementada pela