def test_similarity_2d_from_vector(): params = np.array([0.2, 0.1, 1, 2]) h**o = np.array([[params[0] + 1, -params[1], params[2]], [params[1], params[0] + 1, params[3]], [0, 0, 1]]) sim = SimilarityTransform.identity(2).from_vector(params) assert_equal(sim.h_matrix, h**o)
def test_similarity_jacobian_2d(): params = np.ones(4) t = SimilarityTransform.identity(2).from_vector(params) explicit_pixel_locations = np.array( [[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2]]) dW_dp = t.jacobian(explicit_pixel_locations) assert_equal(dW_dp, sim_jac_solution2d)
def noisy_align(source, target, noise_std=0.05, rotation=False): r""" Constructs and perturbs the optimal similarity transform between source to the target by adding white noise to its parameters. Parameters ---------- source: :class:`menpo.shape.PointCloud` The source pointcloud instance used in the alignment target: :class:`menpo.shape.PointCloud` The target pointcloud instance used in the alignment noise_std: float The standard deviation of the white noise Default: 0.05 rotation: boolean If False the second parameter of the SimilarityTransform, which captures captures inplane rotations, is set to 0. Default:False Returns ------- noisy_transform : :class: `menpo.transform.SimilarityTransform` The noisy Similarity Transform """ transform = SimilarityTransform.align(source, target) parameters = transform.as_vector() if not rotation: parameters[1] = 0 parameter_range = np.hstack((parameters[:2], target.range())) noise = (parameter_range * noise_std * np.random.randn(transform.n_parameters)) parameters += noise return SimilarityTransform.identity(source.n_dims).from_vector_inplace( parameters)
def test_similarity_identity_3d(): assert_allclose(SimilarityTransform.identity(3).h_matrix, np.eye(4))
def test_similarity_2d_points_raises_dimensionalityerror(): params = np.ones(4) t = SimilarityTransform.identity(2).from_vector(params) t.jacobian(np.ones([2, 3]))