def test_line_model_residuals(): model = LineModel() model._params = (0, 0) assert_equal(abs(model.residuals(np.array([[0, 0]]))), 0) assert_equal(abs(model.residuals(np.array([[0, 10]]))), 0) assert_equal(abs(model.residuals(np.array([[10, 0]]))), 10) model._params = (5, np.pi / 4) assert_equal(abs(model.residuals(np.array([[0, 0]]))), 5) assert_equal(abs(model.residuals(np.array([[np.sqrt(50), 0]]))), 5)
def test_line_model_residuals(): model = LineModel() model.params = (0, 0) assert_equal(abs(model.residuals(np.array([[0, 0]]))), 0) assert_equal(abs(model.residuals(np.array([[0, 10]]))), 0) assert_equal(abs(model.residuals(np.array([[10, 0]]))), 10) model.params = (5, np.pi / 4) assert_equal(abs(model.residuals(np.array([[0, 0]]))), 5) assert_almost_equal(abs(model.residuals(np.array([[np.sqrt(50), 0]]))), 0)
def test_line_model_residuals(): model = LineModel() model.params = (0, 0) assert_equal(model.residuals(np.array([[0, 0]])), 0) assert_equal(model.residuals(np.array([[0, 10]])), 10) assert_equal(model.residuals(np.array([[10, 0]])), 0) model.params = (1, 0) assert_equal(model.residuals(np.array([[0, 0]])), 0) assert_almost_equal(model.residuals(np.array([[1, 0]])), np.sqrt(2) / 2.)
def test_line_model_estimate(): # generate original data without noise model0 = LineModel() model0.params = (0, 1) x0 = np.arange(-100, 100) y0 = model0.predict_y(x0) data0 = np.column_stack([x0, y0]) data = data0 + (np.random.random(data0.shape) - 0.5) # estimate parameters of noisy data model_est = LineModel() model_est.estimate(data) assert_almost_equal(model_est.residuals(data0), np.zeros(len(data)), 1) # test whether estimated parameters almost equal original parameters random_state = np.random.RandomState(1234) x = random_state.rand(100, 2) assert_almost_equal(model0.predict_y(x), model_est.predict_y(x), 1)
def keep_border_points(cloud_pts, convex_hull_threshold): ''' Return the points that are localized onto the convex hull of the cloud of input points. Input and output are (N,2) numpy array ''' convexHulls = convex_hull(cloud_pts.tolist()) convexHulls[:+1][:] = convexHulls[0][:] nsegments = len(convexHulls) to_keep = np.zeros(len(cloud_pts), dtype=bool) for P1, P2 in zip(convexHulls[:-1][:], convexHulls[1:][:]): data = np.asarray([P1, P2]) model = LineModel() model.estimate(data) to_keep = np.logical_or( to_keep, abs(model.residuals(cloud_pts)) < convex_hull_threshold) return cloud_pts[to_keep, :]