def test_no_motion_3d(): rnd = cp.random.RandomState(0) img = rnd.normal(size=(128, 128, 128)) flow = optical_flow_tvl1(img, img) assert cp.all(flow == 0)
def test_3d_motion(): # Generate synthetic data rnd = cp.random.RandomState(0) image0 = rnd.normal(size=(128, 128, 128)) gt_flow, image1 = _sin_flow_gen(image0) # Estimate the flow flow = optical_flow_tvl1(image0, image1, attachment=5) # Assert that the average absolute error is less then half a pixel assert abs(flow - gt_flow).mean() < 0.5
def test_optical_flow_dtype(): # Generate synthetic data rnd = cp.random.RandomState(0) image0 = rnd.normal(size=(256, 256)) gt_flow, image1 = _sin_flow_gen(image0) # Estimate the flow at double precision flow_f64 = optical_flow_tvl1(image0, image1, attachment=5, dtype=np.float64) assert flow_f64.dtype == np.float64 # Estimate the flow at single precision flow_f32 = optical_flow_tvl1(image0, image1, attachment=5, dtype=np.float32) assert flow_f32.dtype == np.float32 # Assert that floating point precision does not affect the quality # of the estimated flow assert cp.abs(flow_f64 - flow_f32).mean() < 1e-3
def test_wrong_dtype(): rnd = cp.random.RandomState(0) img = rnd.normal(size=(256, 256)) with pytest.raises(ValueError): u, v = optical_flow_tvl1(img, img, dtype=np.int64)
def test_incompatible_shapes(): rnd = cp.random.RandomState(0) I0 = rnd.normal(size=(256, 256)) I1 = rnd.normal(size=(128, 256)) with pytest.raises(ValueError): u, v = optical_flow_tvl1(I0, I1)