예제 #1
0
    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
예제 #2
0
    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
예제 #3
0
    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)