def get_backward_mapping_inverse(self): inverse_mapping = identity_mapping(self.backward_vector_fields.shape) v = -0.5 * (self.backward_vector_fields[-2::-1] + self.backward_vector_fields[:0:-1]) for i in xrange(self.n_step_half): inverse_mapping = inverse_mapping - np.einsum( 'ij...,j...->i...', jacobian_matrix(inverse_mapping), v[i]) / self.n_step return inverse_mapping
def get_backward_mapping_inverse(self): inverse_mapping = identity_mapping(self.backward_vector_fields.shape) v = - 0.5 * (self.backward_vector_fields[-2::-1] + self.backward_vector_fields[:0:-1]) for i in xrange(self.n_step_half): inverse_mapping = inverse_mapping - np.einsum( 'ij...,j...->i...', jacobian_matrix(inverse_mapping), v[i]) / self.n_step return inverse_mapping
def set_operator(self, shape, resolution=1): dx_sqinv = 1. / resolution ** 2 A = self.norm_penalty * np.ones(shape) grid = identity_mapping(shape) for frequencies, length in zip(grid, shape): A += 2 * self.convexity_penalty * ( 1 - np.cos(2 * np.pi * frequencies / length)) * dx_sqinv # Since this is biharmonic, the exponent is 2. self.operator = 1 / (A ** 2)