def test_radial_profile_cutoff(cutoff): model, skeleton = generate_filament_model(width=10.0, amplitude=1.0, background=0.0) dist_transform = nd.distance_transform_edt((~skeleton).astype(np.int)) dist, radprof, weights, unbin_dist, unbin_radprof = \ radial_profile(model, dist_transform, dist_transform, ((1, 1), (model.shape[0] // 2, model.shape[1] // 2)), img_scale=1.0, auto_cut=False, max_distance=cutoff) assert unbin_dist.max() == cutoff assert dist.max() < cutoff
def test_radial_profile_fail_pad(padding=30.0, max_distance=20.0): ''' Cannot pad greater than max_distance ''' model, skeleton = generate_filament_model(width=10.0, amplitude=1.0, background=0.0) dist_transform = nd.distance_transform_edt((~skeleton).astype(np.int)) dist, radprof, weights, unbin_dist, unbin_radprof = \ radial_profile(model, dist_transform, dist_transform, ((1, 1), (model.shape[0] // 2, model.shape[1] // 2)), img_scale=1.0, auto_cut=False, max_distance=max_distance, pad_to_distance=padding)
def test_radial_profile_output(theta): model, skeleton = generate_filament_model(width=10.0, amplitude=1.0, background=0.0) dist_transform = nd.distance_transform_edt((~skeleton).astype(np.int)) dist, radprof, weights, unbin_dist, unbin_radprof = \ radial_profile(model, dist_transform, dist_transform, ((1, 1), (model.shape[0] // 2, model.shape[1] // 2)), img_scale=1.0, auto_cut=False, max_distance=20) params, errors, _, _, fail = \ gauss_model(dist, radprof, np.ones_like(dist), 1.0) npt.assert_allclose(params[:-1], [1.0, 10.0, 0.0], atol=1e-1)
def test_radial_profile_padding(padding, max_distance=20.0): model, skeleton = generate_filament_model(width=10.0, amplitude=1.0, background=0.0) dist_transform = nd.distance_transform_edt((~skeleton).astype(np.int)) dist, radprof, weights, unbin_dist, unbin_radprof = \ radial_profile(model, dist_transform, dist_transform, ((1, 1), (model.shape[0] // 2, model.shape[1] // 2)), img_scale=1.0, auto_cut=False, max_distance=max_distance, pad_to_distance=padding) if padding <= max_distance: assert unbin_dist.max() == max_distance assert dist.max() < max_distance else: assert unbin_dist.max() == padding assert dist.max() < padding
def test_radial_profile_autocut_plateau(): ''' Test auto-cutting with a plateau and a second fall. ''' model, skeleton = generate_filament_model(shape=160, width=10.0, amplitude=10.0, background=5.0) # Create a second drop-off profile 40 pixels from the center on each side. for i, row in enumerate(model[120:].T): model[120:, i] = generate_gaussian_profile(np.arange(row.size), width=5.0, amplitude=5.0, background=0.0) for i, row in enumerate(model[:40].T): model[:40, i] = generate_gaussian_profile(np.arange(row.size), width=5.0, amplitude=5.0, background=0.0)[::-1] dist_transform = nd.distance_transform_edt((~skeleton).astype(np.int)) dist, radprof, weights, unbin_dist, unbin_radprof = \ radial_profile(model, dist_transform, dist_transform, ((1, 1), (model.shape[0] // 2, model.shape[1] // 2)), img_scale=1.0, auto_cut=True, max_distance=60.0, auto_cut_kwargs={'smooth_size': 3.0, 'pad_cut': 0, 'interp_factor': 1}) # By-eye, this should be 18-19 npt.assert_almost_equal(dist.max(), 38.201, decimal=3)
def test_radial_profile_autocut(): ''' Test auto-cutting with a secondary offset peak. ''' model, skeleton = generate_filament_model(width=10.0, amplitude=1.0, background=0.0) model += np.roll(model, -30, axis=0).copy() model += np.roll(model, +30, axis=0).copy() # all_skeleton += np.roll(skeleton, -30, axis=0) dist_transform = nd.distance_transform_edt((~skeleton).astype(np.int)) dist, radprof, weights, unbin_dist, unbin_radprof = \ radial_profile(model, dist_transform, dist_transform, ((1, 1), (model.shape[0] // 2, model.shape[1] // 2)), img_scale=1.0, auto_cut=True, max_distance=50.0, auto_cut_kwargs={'smooth_size': 3.0, 'pad_cut': 0}) npt.assert_equal(dist.max(), 19.25)