Exemple #1
0
        def test_overlap_merge(self, objects_x, objects_y, module, workspace):
            # Test handling of overlapping objects in 'merge' mode
            segment_x = numpy.zeros((10, 10))
            segment_x[2][2] = 1
            segment_x[2][3] = 1
            segment_x[3][2] = 1
            segment_x[3][3] = 1
            objects_x.segmented = segment_x

            segment_y = numpy.zeros((10, 10))
            segment_y[3][3] = 1
            segment_y[3][4] = 1
            segment_y[4][3] = 1
            segment_y[4][4] = 1
            objects_y.segmented = segment_y

            module.merge_method.value = "Merge"
            module.run(workspace)
            merged = workspace.get_objects("merged")

            assert len(merged.indices) == 1
            expected_segment = numpy.zeros_like(segment_x)
            expected_segment[segment_y > 0] = 1
            expected_segment[segment_x > 0] = 1
            assert (merged.segmented == expected_segment).all()
def test_run_binary(workspace, module):
    module.object_name.value = "inputobjects"

    module.image_name.value = "outputimage"

    module.image_mode.value = "Binary (black & white)"

    module.run(workspace)

    image = workspace.image_set.get_image("outputimage")

    objects = workspace.get_objects("inputobjects")

    assert image.dimensions == objects.segmented.ndim

    pixel_data = image.pixel_data

    assert pixel_data.shape == objects.shape

    if objects.segmented.ndim == 2:
        assert not pixel_data[0, 0]

        assert numpy.all(pixel_data[:, 1:])

        assert numpy.all(pixel_data[1:, :])
    else:
        assert not numpy.all(pixel_data[:, 0, 0])

        assert numpy.all(pixel_data[:, :, 1:])

        assert numpy.all(pixel_data[:, 1:, :])
def test_run_grayscale(workspace, module):
    module.object_name.value = "inputobjects"

    module.image_name.value = "outputimage"

    module.image_mode.value = "Grayscale"

    module.run(workspace)

    image = workspace.image_set.get_image("outputimage")

    objects = workspace.get_objects("inputobjects")

    assert image.dimensions == objects.segmented.ndim

    pixel_data = image.pixel_data

    assert pixel_data.shape == objects.shape

    expected = numpy.reshape(
        numpy.arange(256).astype(numpy.float32) / 255, (16, 16))

    if objects.segmented.ndim == 3:
        expected = numpy.tile(expected, (3, 1))

        expected = numpy.reshape(expected, (3, 16, 16))

    assert numpy.all(pixel_data == expected)
        def test_one_object_second_image(self, objects_y, module, workspace,
                                         merge_methods):
            # Test merge methods with one object in target set
            segment = numpy.zeros((10, 10))
            segment[2:4, 2:4] = 1

            objects_y.segmented = segment

            for method in merge_methods:
                module.merge_method.value = method
                module.output_object.value = method
                module.run(workspace)
                numpy.testing.assert_array_equal(
                    workspace.get_objects(method).segmented, segment)
        def test_duplicate_object(self, objects_x, objects_y, module,
                                  workspace, merge_methods):
            # Test merge methods with same object in both sets
            segment = numpy.zeros((10, 10))
            segment[2:4, 2:4] = 1

            objects_x.segmented = segment
            objects_y.segmented = segment

            for method in merge_methods:
                module.merge_method.value = method
                module.output_object.value = method
                module.run(workspace)
                numpy.testing.assert_array_equal(
                    workspace.get_objects(method).segmented, segment)
Exemple #6
0
        def test_one_object_first_image(self, objects_x, module, workspace,
                                        merge_methods):
            # Test merge methods with one object in initial set
            segment = numpy.zeros((10, 10))
            segment[2][2] = 1
            segment[2][3] = 1
            segment[3][2] = 1
            segment[3][3] = 1

            objects_x.segmented = segment

            for method in merge_methods:
                module.merge_method.value = method
                module.output_object.value = method
                module.run(workspace)
                assert (
                    workspace.get_objects(method).segmented == segment).all()
Exemple #7
0
        def test_duplicate_object(self, objects_x, module, workspace,
                                  merge_methods):
            # Test merge methods with same object in both sets
            segment = numpy.zeros((10, 10))
            segment[2][2] = 1
            segment[2][3] = 1
            segment[3][2] = 1
            segment[3][3] = 1

            objects_x.segmented = segment
            objects_y.segmented = segment

            for method in merge_methods:
                module.merge_method.value = method
                module.output_object.value = method
                module.run(workspace)
                assert (
                    workspace.get_objects(method).segmented == segment).all()
        def test_overlap_discard(self, objects_x, objects_y, module,
                                 workspace):
            # Test handling of overlapping objects in 'discard' mode
            segment_x = numpy.zeros((10, 10))
            segment_x[2:4, 2:4] = 1
            objects_x.segmented = segment_x

            segment_y = numpy.zeros((10, 10))
            segment_y[3, 3:5] = 1
            objects_y.segmented = segment_y

            module.merge_method.value = "Discard"
            module.run(workspace)

            merged = workspace.get_objects("merged")
            assert len(merged.indices) == 1
            expected_segment = segment_x
            numpy.testing.assert_array_equal(merged.segmented,
                                             expected_segment)
        def test_not_touching(self, objects_x, objects_y, module, workspace,
                              merge_methods):
            # Test merge methods with two distinct objects
            segment_x = numpy.zeros((10, 10))
            segment_x[2:4, 2:4] = 1
            objects_x.segmented = segment_x

            segment_y = numpy.zeros((10, 10))
            segment_y[8:10, 8:10] = 1
            objects_y.segmented = segment_y

            for method in merge_methods:
                module.merge_method.value = method
                module.output_object.value = method
                module.run(workspace)
                combined = workspace.get_objects(method)
                assert len(combined.indices) == 2
                numpy.testing.assert_array_equal(combined.segmented,
                                                 segment_x + 2 * segment_y)
Exemple #10
0
        def test_overlap_segment(self, objects_x, objects_y, module,
                                 workspace):
            # Test handling of overlapping objects in 'segment' mode
            segment_x = numpy.zeros((10, 10))
            segment_x[1:5, 1:6] = 1
            objects_x.segmented = segment_x

            segment_y = numpy.zeros((10, 10))
            segment_y[1:6, 4:9] = 1
            objects_y.segmented = segment_y

            module.merge_method.value = "Segment"
            module.run(workspace)
            merged = workspace.get_objects("merged")

            assert len(merged.indices) == 2
            expected_segment = numpy.zeros_like(segment_x)
            expected_segment[1:6, 4:9] = 2
            expected_segment[1:5, 1:5] = 1
            assert (merged.segmented == expected_segment).all()
        def test_overlap_preserve(self, objects_x, objects_y, module,
                                  workspace):
            # Test handling of overlapping objects in 'preserve' mode
            segment_x = numpy.zeros((10, 10))
            segment_x[2:4, 2:4] = 1
            objects_x.segmented = segment_x

            segment_y = numpy.zeros((10, 10))
            segment_y[3, 3:5] = 1
            objects_y.segmented = segment_y

            module.merge_method.value = "Preserve"
            module.run(workspace)

            merged = workspace.get_objects("merged")
            assert len(merged.indices) == 2
            expected_segment = numpy.zeros_like(segment_x)
            expected_segment[segment_y > 0] = 2
            expected_segment[segment_x > 0] = 1
            numpy.testing.assert_array_equal(merged.segmented,
                                             expected_segment)
def test_run_color(workspace, module):
    for color in [
            "Default",
            "autumn",
            "bone",
            "colorcube",
            "cool",
            "copper",
            "flag",
            "gray",
            "hot",
            "hsv",
            "jet",
            "lines",
            "pink",
            "prism",
            "spring",
            "summer",
            "white",
            "winter",
    ]:
        module.object_name.value = "inputobjects"

        module.image_name.value = "outputimage"

        module.image_mode.value = "Color"

        module.colormap.value = color

        module.run(workspace)

        image = workspace.image_set.get_image("outputimage")

        objects = workspace.get_objects("inputobjects")

        assert image.dimensions == objects.segmented.ndim

        pixel_data = image.pixel_data

        assert pixel_data.shape == objects.shape + (3, )
        def test_for_inappropriate_merge(self, objects_x, objects_y, module,
                                         workspace, merge_methods):
            # Test that adjacent objects in the source set aren't merged inappropriately.
            segmentation_x = numpy.zeros((10, 10))
            segmentation_x[2, 2:4] = 1
            segmentation_x[3, 2:4] = 2

            segmentation_y = numpy.zeros((10, 10))
            segmentation_y[6, 6] = 3
            objects_x.segmented = segmentation_x
            objects_y.segmented = segmentation_y

            segmentation_expected = segmentation_x + segmentation_y

            for method in merge_methods:
                module.merge_method.value = method
                module.output_object.value = method
                module.run(workspace)
                merged = workspace.get_objects(method)
                assert len(merged.indices) == 3
                numpy.testing.assert_array_equal(merged.segmented,
                                                 segmentation_expected)
Exemple #14
0
        def test_not_touching(self, objects_x, objects_y, module, workspace,
                              merge_methods):
            # Test merge methods with two distinct objects
            segment_x = numpy.zeros((10, 10))
            segment_x[2][2] = 1
            segment_x[2][3] = 1
            segment_x[3][2] = 1
            segment_x[3][3] = 1
            objects_x.segmented = segment_x

            segment_y = numpy.zeros((10, 10))
            segment_y[8][8] = 1
            segment_y[8][9] = 1
            segment_y[9][8] = 1
            segment_y[9][9] = 1
            objects_y.segmented = segment_y

            for method in merge_methods:
                module.merge_method.value = method
                module.output_object.value = method
                module.run(workspace)
                combined = workspace.get_objects(method)
                assert len(combined.indices) == 2
                assert (combined.segmented == segment_x + 2 * segment_y).all()