Ejemplo n.º 1
0
	def gera_imagens_deformadas(self):
		imagemSource = imread(self.nomeImagem + ".jpg")


		alturaImagem, larguraImagem, _ = shape(imagemSource)

		imagemDeformada = imagemSource.copy()


		for linhaPixel in range(0, alturaImagem):
			print "Imagem: "+ self.nomeImagem + ", interpolacao: " + str(self.passo) + " Linha: " + str(linhaPixel)
			for colunaPixel in range(0, larguraImagem):
				X = Point(linhaPixel, colunaPixel)
				DSUM = Point(0,0)
				weightsum = 0

				for linhaAtualInterpolada in self.linhasInterpoladas:
					
					indice = self.linhasInterpoladas.index(linhaAtualInterpolada)
					
					linhaEquivalenteEmSemelhante1 = self.linhasImagemASerDeformada[indice]
					
					
					U = self.calculateU(X, linhaAtualInterpolada.ponto_inicial, linhaAtualInterpolada.ponto_final)
					V = self.calculateV(linhaAtualInterpolada, X)

					
					Xi = self.calculateXlinha(U, V, linhaEquivalenteEmSemelhante1)
					
					Di = Xi - X
					
					if U > 0 and U <  1:
						dist = abs(V)
					elif U < 0:
						dist = X.distancia(linhaAtualInterpolada.ponto_inicial)
					else:
						dist = X.distancia(linhaAtualInterpolada.ponto_final)

					weight = ( 1 / (0.001 + dist) )**2

					DSUM = DSUM + (Di * weight)

					weightsum = weightsum + weight

				Xlinha = X + DSUM/weightsum
				
				# para evitar inconsistencias e pegar valores inexistentes
				if Xlinha.x >= 288:
					Xlinha.x = 287
				elif Xlinha.x < 0:
					Xlinha.x = 0

				if Xlinha.y >= 384:
					Xlinha.y = 383
				elif Xlinha.y < 0:
					Xlinha.y = 0
				
				imagemDeformada[X.x, X.y] = imagemSource[int(math.trunc(Xlinha.x)), int(math.trunc(Xlinha.y))]


		nomeImagem = "imagens_" + self.nomeImagem + "/deformacao_passo"+ str(self.passo) + ".jpg"
		imsave(nomeImagem, imagemDeformada)

		self.cancelled = True
Ejemplo n.º 2
0
    #Linhas da imagem
    for i in range(alturaImagem):
        print "Calculando linha",i,"no passo",passo
        #Colunas da imagem
        for j in range(larguraImagem):
            X = Point(i,j)
            distFinal = float("inf")
            for numLinha,linhaDeInteresse in enumerate(linhasInterpoladas):
                U = calculateU(X, linhaDeInteresse.ponto_inicial, linhaDeInteresse.ponto_final)
                V = calculateV(linhaDeInteresse, X)

                if U > 0 and U <  1:
                    dist = abs(V)
                elif U < 0:
                    dist = X.distancia(linhaDeInteresse.ponto_inicial)
                else:
                    dist = X.distancia(linhaDeInteresse.ponto_final)

                if dist < distFinal:
                    Ufinal = U
                    Vfinal = V
                    distFinal = dist
                    numLinhaFinal = numLinha

            Xlinha = pixel(Ufinal,Vfinal,conjuntoLinhasInterpoladas[0][numLinhaFinal],imagemSrc)
            X2linha = pixel(Ufinal,Vfinal,conjuntoLinhasInterpoladas[numeroImagensIntermediarias+1][numLinhaFinal],imagemDest)
            
            t = float(passo)/numeroImagensIntermediarias
            imagemDeformada[i,j] = [(1-t)*Xlinha[k] + t*X2linha[k] for k in range(3)]
    # imagensIntermediarias[passo] = imagemDeformada