예제 #1
0
    def test_model(self):
        frame_shape = (10, 20, 30)
        frame = scarlet.Frame(frame_shape, channels=np.arange(10))

        shape = (5, 4, 6)
        on_location = (1, 2, 3)
        sed = np.zeros(shape[0])
        sed[on_location[0]] = 1
        morph = np.zeros(shape[1:])
        morph[on_location[1:]] = 1

        origin = (2, 3, 4)
        box = scarlet.Box(shape, origin=origin)
        spectrum = scarlet.TabulatedSpectrum(frame, sed, bbox=box[0])
        morphology = scarlet.ImageMorphology(frame, morph, bbox=box[1:])

        component = scarlet.FactorizedComponent(frame, spectrum, morphology)
        model = component.get_model(frame=frame)

        # everything zero except at one location?
        test_loc = tuple(np.array(on_location) + np.array(origin))
        mask = np.zeros(model.shape, dtype="bool")
        mask[test_loc] = True
        assert_array_equal(model[~mask], 0)
        assert model[test_loc] == 1

        # now with shift
        shift_loc = (0, 1, 0)
        shift = scarlet.Parameter(np.array(shift_loc[1:]),
                                  step=0.1,
                                  name="shift")
        morphology = scarlet.ImageMorphology(frame,
                                             morph,
                                             bbox=box[1:],
                                             shift=shift)

        component = scarlet.FactorizedComponent(frame, spectrum, morphology)
        model = component.get_model(frame=frame)

        # everything zero except at one location?
        test_loc = tuple(
            np.array(on_location) + np.array(origin) + np.array(shift_loc))
        mask = np.zeros(model.shape, dtype="bool")
        mask[test_loc] = True
        assert_almost_equal(model[~mask], 0)
        assert_almost_equal(model[test_loc], 1)
예제 #2
0
    def test_model(self):
        frame_shape = (10, 20, 30)
        frame = scarlet.Frame(frame_shape)

        shape = (5, 4, 6)
        on_location = (1, 2, 3)
        sed = np.zeros(shape[0])
        sed[on_location[0]] = 1
        morph = np.zeros(shape[1:])
        morph[on_location[1:]] = 1

        sed = scarlet.Parameter(sed)
        morph = scarlet.Parameter(morph)
        origin = (2, 3, 4)
        bbox = scarlet.Box(shape, origin=origin)

        component = scarlet.FactorizedComponent(frame, sed, morph, bbox=bbox)
        model = component.get_model()

        # everything zero except at one location?
        test_loc = tuple(np.array(on_location) + np.array(origin))
        mask = np.zeros(model.shape, dtype='bool')
        mask[test_loc] = True
        assert_array_equal(model[~mask], 0)
        assert model[test_loc] == 1

        # now with shift
        shift_loc = (0, 1, 0)
        shift = scarlet.Parameter(np.array(shift_loc[1:]))
        component = scarlet.FactorizedComponent(frame,
                                                sed,
                                                morph,
                                                shift=shift,
                                                bbox=bbox)
        model = component.get_model()

        # everything zero except at one location?
        test_loc = tuple(
            np.array(on_location) + np.array(origin) + np.array(shift_loc))
        mask = np.zeros(model.shape, dtype='bool')
        mask[test_loc] = True
        assert_almost_equal(model[~mask], 0)
        assert_almost_equal(model[test_loc], 1)
예제 #3
0
    def test_model(self):
        frame_shape = (10, 20, 30)
        frame = scarlet.Frame(frame_shape, channels=np.arange(10))

        shape = (5, 4, 6)
        origin = (2, 3, 4)
        box = scarlet.Box(shape, origin=origin)

        on_location = (1, 2, 3)
        sed = np.zeros(shape[0])
        sed[on_location[0]] = 1
        spectrum = scarlet.TabulatedSpectrum(frame, sed, bbox=box[0])

        # construct functional morphology where the parameter sets
        # the location of single pixel that is on
        class OnePixelMorphology(scarlet.Morphology):
            def __init__(self, model_frame, on_pixel, bbox=None):
                self._bbox = bbox
                self._on_pixel = scarlet.Parameter(on_pixel,
                                                   step=1,
                                                   name="on_pixel")
                super().__init__(model_frame, self._on_pixel, bbox=bbox)

            def get_model(self, *params):
                on_pixel = self._on_pixel
                for p in params:
                    if p._value.name == "on_pixel":
                        on_pixel = p

                morph = np.zeros(self._bbox.shape)
                morph[tuple(np.round(on_pixel).astype("int"))] = 1
                return morph

        morphology = OnePixelMorphology(frame,
                                        np.array(on_location[1:],
                                                 dtype="float"),
                                        bbox=box[1:])
        component = scarlet.FactorizedComponent(frame, spectrum, morphology)
        model = component.get_model(frame=frame)

        # everything zero except at one location?
        test_loc = tuple(np.array(on_location) + np.array(origin))
        mask = np.zeros(model.shape, dtype="bool")
        mask[test_loc] = True
        assert_array_equal(model[~mask], 0)
        assert model[test_loc] == 1
예제 #4
0
    def test_model(self):
        frame_shape = (10, 20, 30)
        frame = scarlet.Frame(frame_shape)

        shape = (5, 4, 6)
        on_location = (1, 2, 3)
        cube = np.zeros(shape)
        cube[on_location] = 1
        cube = scarlet.Parameter(cube)
        origin1 = (2, 3, 4)
        bbox1 = scarlet.Box(shape, origin=origin1)
        component1 = scarlet.CubeComponent(frame, cube, bbox=bbox1)

        sed = np.zeros(shape[0])
        sed[on_location[0]] = 1
        morph = np.zeros(shape[1:])
        morph[on_location[1:]] = 1

        sed = scarlet.Parameter(sed)
        morph = scarlet.Parameter(morph)

        origin2 = (5, 6, 7)
        bbox2 = scarlet.Box(shape, origin=origin2)
        component2 = scarlet.FactorizedComponent(frame, sed, morph, bbox=bbox2)

        tree = scarlet.ComponentTree([component1, component2])
        model = tree.get_model()

        # everything zero except at one location?
        test_locs = [
            tuple(np.array(on_location) + np.array(origin1)),
            tuple(np.array(on_location) + np.array(origin2))
        ]
        mask = np.zeros(model.shape, dtype='bool')
        for test_loc in test_locs:
            mask[test_loc] = True
        assert_array_equal(model[~mask], 0)
        assert_array_equal(model[mask], 1)
예제 #5
0
    def test_model(self):
        frame_shape = (10, 20, 30)
        frame = scarlet.Frame(frame_shape, channels=np.arange(10))

        shape = (5, 4, 6)
        origin = (2, 3, 4)
        box = scarlet.Box(shape, origin=origin)
        on_location1 = (1, 2, 3)
        cube = np.zeros(shape)
        cube[on_location1] = 1
        cube = scarlet.Parameter(cube, name="cube")
        component1 = scarlet.CubeComponent(frame, cube, bbox=box)

        # make factorized component with a different origin
        on_location2 = (1, 1, 1)
        sed = np.zeros(shape[0])
        sed[on_location2[0]] = 1
        morph = np.zeros(shape[1:])
        morph[on_location2[1:]] = 1

        spectrum = scarlet.TabulatedSpectrum(frame, sed, bbox=box[0])
        morphology = scarlet.ImageMorphology(frame, morph, bbox=box[1:])
        component2 = scarlet.FactorizedComponent(frame, spectrum, morphology)

        combined = scarlet.CombinedComponent([component1, component2])
        model = combined.get_model(frame=frame)

        # everything zero except at one location?
        test_locs = [
            tuple(np.array(on_location1) + np.array(origin)),
            tuple(np.array(on_location2) + np.array(origin)),
        ]
        mask = np.zeros(model.shape, dtype="bool")
        for test_loc in test_locs:
            mask[test_loc] = True
        assert_array_equal(model[~mask], 0)
        assert_array_equal(model[mask], 1)