Exemplo n.º 1
0
    def test_eccentricity(self):
        # Eccentricity (elongation) is measured with good accuracy and
        # ~0.02 precision, as long as the mask is large enough to cover
        # the whole object.
        L = 101
        dims = (L, L + 2)  # avoid square images in tests
        pos = np.array([50, 55])
        cols = ['x', 'y']

        ECC = 0
        image = np.ones(dims, dtype='uint8')
        draw_gaussian_spot(image, pos[::-1], 4, ecc=ECC)
        actual = mr.locate(image, 21, 1, preprocess=False)['ecc']
        expected = ECC
        assert_allclose(actual, expected, atol=0.02)

        ECC = 0.2
        image = np.ones(dims, dtype='uint8')
        draw_gaussian_spot(image, pos[::-1], 4, ecc=ECC)
        actual = mr.locate(image, 21, 1, preprocess=False)['ecc']
        expected = ECC
        assert_allclose(actual, expected, atol=0.02)

        ECC = 0.5
        image = np.ones(dims, dtype='uint8')
        draw_gaussian_spot(image, pos[::-1], 4, ecc=ECC)
        actual = mr.locate(image, 21, 1, preprocess=False)['ecc']
        expected = ECC
        assert_allclose(actual, expected, atol=0.02)
Exemplo n.º 2
0
    def test_eccentricity(self):
        # Eccentricity (elongation) is measured with good accuracy and
        # ~0.02 precision, as long as the mask is large enough to cover
        # the whole object.
        L = 101 
        dims = (L, L + 2)  # avoid square images in tests
        pos = np.array([50, 55])
        cols = ['x', 'y']

        ECC = 0
        image = np.ones(dims, dtype='uint8')
        draw_gaussian_spot(image, pos[::-1], 4, ecc=ECC)
        actual = mr.locate(image, 21, 1, preprocess=False)['ecc']
        expected = ECC
        assert_allclose(actual, expected, atol=0.02)

        ECC = 0.2
        image = np.ones(dims, dtype='uint8')
        draw_gaussian_spot(image, pos[::-1], 4, ecc=ECC)
        actual = mr.locate(image, 21, 1, preprocess=False)['ecc']
        expected = ECC
        assert_allclose(actual, expected, atol=0.02)

        ECC = 0.5
        image = np.ones(dims, dtype='uint8')
        draw_gaussian_spot(image, pos[::-1], 4, ecc=ECC)
        actual = mr.locate(image, 21, 1, preprocess=False)['ecc']
        expected = ECC
        assert_allclose(actual, expected, atol=0.02)
Exemplo n.º 3
0
def compare(shape, count, radius, noise_level):
    pos = gen_random_locations(shape, count) 
    image = draw_spots(shape, pos, radius, noise_level)
    f = mr.locate(image, 2*radius + 1, minmass=1800)
    actual = f[['x', 'y']].sort(['x', 'y'])
    expected = DataFrame(pos, columns=['y', 'x'])[['x', 'y']].sort(['x', 'y']) 
    return actual, expected
Exemplo n.º 4
0
def compare(shape, count, radius, noise_level):
    pos = gen_random_locations(shape, count)
    image = draw_spots(shape, pos, radius, noise_level)
    f = mr.locate(image, 2 * radius + 1, minmass=1800)
    actual = f[['x', 'y']].sort(['x', 'y'])
    expected = DataFrame(pos, columns=['y', 'x'])[['x', 'y']].sort(['x', 'y'])
    return actual, expected
Exemplo n.º 5
0
    def test_one_centered_gaussian(self):
        L = 21
        dims = (L, L + 2)  # avoid square images in tests
        pos = np.array([7, 13])
        cols = ['x', 'y']
        expected = DataFrame(pos.reshape(1, -1), columns=cols)

        image = np.ones(dims, dtype='uint8')
        draw_gaussian_spot(image, pos[::-1], 4)
        actual = mr.locate(image, 9, 1, preprocess=False)[cols]
        assert_allclose(actual, expected, atol=0.1)
Exemplo n.º 6
0
    def test_one_centered_gaussian(self):
        L = 21
        dims = (L, L + 2)  # avoid square images in tests
        pos = np.array([7, 13])
        cols = ['x', 'y']
        expected = DataFrame(pos.reshape(1, -1), columns=cols)

        image = np.ones(dims, dtype='uint8')
        draw_gaussian_spot(image, pos[::-1], 4)
        actual = mr.locate(image, 9, 1, preprocess=False)[cols]
        assert_allclose(actual, expected, atol=0.1)
Exemplo n.º 7
0
    def test_rg(self):
        # For Gaussians with radii 2, 3, 5, and 7 px, with proportionately
        # chosen feature (mask) sizes, the 'size' comes out to be within 10%
        # of the true Gaussian width.

        # The IDL code has mistake in this area, documented here:
        # http://www.physics.emory.edu/~weeks/idl/radius.html

        L = 101 
        dims = (L, L + 2)  # avoid square images in tests
        pos = np.array([50, 55])
        cols = ['x', 'y']

        SIZE = 2
        image = np.ones(dims, dtype='uint8')
        draw_gaussian_spot(image, pos[::-1], SIZE)
        actual = mr.locate(image, 7, 1, preprocess=False)['size']
        expected = SIZE
        assert_allclose(actual, expected, rtol=0.1)

        SIZE = 3
        image = np.ones(dims, dtype='uint8')
        draw_gaussian_spot(image, pos[::-1], SIZE)
        actual = mr.locate(image, 11, 1, preprocess=False)['size']
        expected = SIZE
        assert_allclose(actual, expected, rtol=0.1)

        SIZE = 5
        image = np.ones(dims, dtype='uint8')
        draw_gaussian_spot(image, pos[::-1], SIZE)
        actual = mr.locate(image, 17, 1, preprocess=False)['size']
        expected = SIZE
        assert_allclose(actual, expected, rtol=0.1)
        
        SIZE = 7
        image = np.ones(dims, dtype='uint8')
        draw_gaussian_spot(image, pos[::-1], SIZE)
        actual = mr.locate(image, 23, 1, preprocess=False)['size']
        expected = SIZE
        assert_allclose(actual, expected, rtol=0.1)
Exemplo n.º 8
0
    def test_rg(self):
        # For Gaussians with radii 2, 3, 5, and 7 px, with proportionately
        # chosen feature (mask) sizes, the 'size' comes out to be within 10%
        # of the true Gaussian width.

        # The IDL code has mistake in this area, documented here:
        # http://www.physics.emory.edu/~weeks/idl/radius.html

        L = 101
        dims = (L, L + 2)  # avoid square images in tests
        pos = np.array([50, 55])
        cols = ['x', 'y']

        SIZE = 2
        image = np.ones(dims, dtype='uint8')
        draw_gaussian_spot(image, pos[::-1], SIZE)
        actual = mr.locate(image, 7, 1, preprocess=False)['size']
        expected = SIZE
        assert_allclose(actual, expected, rtol=0.1)

        SIZE = 3
        image = np.ones(dims, dtype='uint8')
        draw_gaussian_spot(image, pos[::-1], SIZE)
        actual = mr.locate(image, 11, 1, preprocess=False)['size']
        expected = SIZE
        assert_allclose(actual, expected, rtol=0.1)

        SIZE = 5
        image = np.ones(dims, dtype='uint8')
        draw_gaussian_spot(image, pos[::-1], SIZE)
        actual = mr.locate(image, 17, 1, preprocess=False)['size']
        expected = SIZE
        assert_allclose(actual, expected, rtol=0.1)

        SIZE = 7
        image = np.ones(dims, dtype='uint8')
        draw_gaussian_spot(image, pos[::-1], SIZE)
        actual = mr.locate(image, 23, 1, preprocess=False)['size']
        expected = SIZE
        assert_allclose(actual, expected, rtol=0.1)
Exemplo n.º 9
0
    def test_topn(self):
        L = 21
        dims = (L, L + 2)  # avoid square images in tests
        cols = ['x', 'y']
        PRECISION = 0.1

        # top 2
        pos1 = np.array([7, 7])
        pos2 = np.array([14, 14])
        pos3 = np.array([7, 14])
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos1[::-1])] = 100
        image[tuple(pos2[::-1])] = 80
        image[tuple(pos3[::-1])] = 90
        actual = mr.locate(image, 5, 1, topn=2, preprocess=False)[cols]
        actual = actual.sort(['x', 'y'])  # sort for reliable comparison
        expected = DataFrame([[7, 7], [7, 14]], columns=cols).sort(['x', 'y'])
        assert_allclose(actual, expected, atol=PRECISION)

        # top 1
        actual = mr.locate(image, 5, 1, topn=1, preprocess=False)[cols]
        actual = actual.sort(['x', 'y'])  # sort for reliable comparison
        expected = DataFrame([[7, 7]], columns=cols).sort(['x', 'y'])
        assert_allclose(actual, expected, atol=PRECISION)
Exemplo n.º 10
0
    def test_topn(self):
        L = 21
        dims = (L, L + 2)  # avoid square images in tests
        cols = ['x', 'y']
        PRECISION = 0.1

        # top 2
        pos1 = np.array([7, 7])
        pos2 = np.array([14, 14])
        pos3 = np.array([7, 14])
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos1[::-1])] = 100
        image[tuple(pos2[::-1])] = 80
        image[tuple(pos3[::-1])] = 90
        actual = mr.locate(image, 5, 1, topn=2, preprocess=False)[cols]
        actual = actual.sort(['x', 'y'])  # sort for reliable comparison
        expected = DataFrame([[7, 7], [7, 14]], columns=cols).sort(['x', 'y'])
        assert_allclose(actual, expected, atol=PRECISION)

        # top 1
        actual = mr.locate(image, 5, 1, topn=1, preprocess=False)[cols]
        actual = actual.sort(['x', 'y'])  # sort for reliable comparison
        expected = DataFrame([[7, 7]], columns=cols).sort(['x', 'y'])
        assert_allclose(actual, expected, atol=PRECISION)
Exemplo n.º 11
0
    def test_subpx_precision(self): 
        L = 21
        dims = (L, L + 2)  # avoid square images in tests
        cols = ['x', 'y']
        PRECISION = 0.1

        # one bright pixel
        pos = np.array([7, 13])
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos[::-1])] = 100
        actual = mr.locate(image, 3, 1, preprocess=False)[cols]
        expected = DataFrame(pos.reshape(1, -1), columns=cols)
        assert_allclose(actual, expected, atol=0.001)  # especially precise

        # two neighboring pixels of equal brightness
        pos1 = np.array([7, 13])
        pos2 = np.array([8, 13])
        pos = np.array([7.5, 13])  # center is between pixels
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos1[::-1])] = 100
        image[tuple(pos2[::-1])] = 100
        actual = mr.locate(image, 5, 1, preprocess=False)[cols]
        expected = DataFrame(pos.reshape(1, -1), columns=cols)
        assert_allclose(actual, expected, atol=PRECISION)

        # two neighboring pixels of unequal brightness
        pos1 = np.array([7, 13])
        pos2 = np.array([8, 13])
        pos = np.array([7.25, 13])  # center is between pixels, biased left
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos1[::-1])] = 100
        image[tuple(pos2[::-1])] = 50
        actual = mr.locate(image, 5, 1, preprocess=False)[cols]
        expected = DataFrame(pos.reshape(1, -1), columns=cols)
        assert_allclose(actual, expected, atol=PRECISION)

        pos = np.array([7.75, 13])  # center is between pixels, biased right 
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos1[::-1])] = 50
        image[tuple(pos2[::-1])] = 100
        actual = mr.locate(image, 5, 1, preprocess=False)[cols]
        expected = DataFrame(pos.reshape(1, -1), columns=cols)
        assert_allclose(actual, expected, atol=PRECISION)

        pos1 = np.array([7, 12])
        pos2 = np.array([7, 13])
        pos = np.array([7, 12.25])  # center is between pixels, biased down
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos1[::-1])] = 100
        image[tuple(pos2[::-1])] = 50
        actual = mr.locate(image, 5, 1, preprocess=False)[cols]
        expected = DataFrame(pos.reshape(1, -1), columns=cols)
        assert_allclose(actual, expected, atol=PRECISION)

        pos = np.array([7, 12.75])  # center is between pixels, biased up 
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos1[::-1])] = 50
        image[tuple(pos2[::-1])] = 100
        actual = mr.locate(image, 5, 1, preprocess=False)[cols]
        expected = DataFrame(pos.reshape(1, -1), columns=cols)
        assert_allclose(actual, expected, atol=PRECISION)

        # four neighboring pixels of unequal brightness
        pos1 = np.array([7, 13])
        pos2 = np.array([8, 13])
        pos3 = np.array([7, 13])
        pos4 = np.array([8, 13])
        pos = np.array([7.25, 13])  # center is between pixels, biased left
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos1[::-1])] = 100
        image[tuple(pos2[::-1])] = 50
        image[tuple(pos3[::-1])] = 100
        image[tuple(pos4[::-1])] = 50
        actual = mr.locate(image, 5, 1, preprocess=False)[cols]
        expected = DataFrame(pos.reshape(1, -1), columns=cols)
        assert_allclose(actual, expected, atol=PRECISION)

        pos = np.array([7.75, 13])  # center is between pixels, biased right 
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos1[::-1])] = 50
        image[tuple(pos2[::-1])] = 100
        image[tuple(pos3[::-1])] = 50
        image[tuple(pos4[::-1])] = 100
        actual = mr.locate(image, 5, 1, preprocess=False)[cols]
        expected = DataFrame(pos.reshape(1, -1), columns=cols)
        assert_allclose(actual, expected, atol=PRECISION)

        pos1 = np.array([7, 12])
        pos2 = np.array([7, 13])
        pos3 = np.array([7, 12])
        pos4 = np.array([7, 13])
        pos = np.array([7, 12.25])  # center is between pixels, biased down
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos1[::-1])] = 100
        image[tuple(pos2[::-1])] = 50
        actual = mr.locate(image, 5, 1, preprocess=False)[cols]
        expected = DataFrame(pos.reshape(1, -1), columns=cols)
        assert_allclose(actual, expected, atol=PRECISION)

        pos = np.array([7, 12.75])  # center is between pixels, biased up 
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos1[::-1])] = 50
        image[tuple(pos2[::-1])] = 100
        actual = mr.locate(image, 5, 1, preprocess=False)[cols]
        expected = DataFrame(pos.reshape(1, -1), columns=cols)
        assert_allclose(actual, expected, atol=PRECISION)
Exemplo n.º 12
0
    def test_subpx_precision(self):
        L = 21
        dims = (L, L + 2)  # avoid square images in tests
        cols = ['x', 'y']
        PRECISION = 0.1

        # one bright pixel
        pos = np.array([7, 13])
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos[::-1])] = 100
        actual = mr.locate(image, 3, 1, preprocess=False)[cols]
        expected = DataFrame(pos.reshape(1, -1), columns=cols)
        assert_allclose(actual, expected, atol=0.001)  # especially precise

        # two neighboring pixels of equal brightness
        pos1 = np.array([7, 13])
        pos2 = np.array([8, 13])
        pos = np.array([7.5, 13])  # center is between pixels
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos1[::-1])] = 100
        image[tuple(pos2[::-1])] = 100
        actual = mr.locate(image, 5, 1, preprocess=False)[cols]
        expected = DataFrame(pos.reshape(1, -1), columns=cols)
        assert_allclose(actual, expected, atol=PRECISION)

        # two neighboring pixels of unequal brightness
        pos1 = np.array([7, 13])
        pos2 = np.array([8, 13])
        pos = np.array([7.25, 13])  # center is between pixels, biased left
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos1[::-1])] = 100
        image[tuple(pos2[::-1])] = 50
        actual = mr.locate(image, 5, 1, preprocess=False)[cols]
        expected = DataFrame(pos.reshape(1, -1), columns=cols)
        assert_allclose(actual, expected, atol=PRECISION)

        pos = np.array([7.75, 13])  # center is between pixels, biased right
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos1[::-1])] = 50
        image[tuple(pos2[::-1])] = 100
        actual = mr.locate(image, 5, 1, preprocess=False)[cols]
        expected = DataFrame(pos.reshape(1, -1), columns=cols)
        assert_allclose(actual, expected, atol=PRECISION)

        pos1 = np.array([7, 12])
        pos2 = np.array([7, 13])
        pos = np.array([7, 12.25])  # center is between pixels, biased down
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos1[::-1])] = 100
        image[tuple(pos2[::-1])] = 50
        actual = mr.locate(image, 5, 1, preprocess=False)[cols]
        expected = DataFrame(pos.reshape(1, -1), columns=cols)
        assert_allclose(actual, expected, atol=PRECISION)

        pos = np.array([7, 12.75])  # center is between pixels, biased up
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos1[::-1])] = 50
        image[tuple(pos2[::-1])] = 100
        actual = mr.locate(image, 5, 1, preprocess=False)[cols]
        expected = DataFrame(pos.reshape(1, -1), columns=cols)
        assert_allclose(actual, expected, atol=PRECISION)

        # four neighboring pixels of unequal brightness
        pos1 = np.array([7, 13])
        pos2 = np.array([8, 13])
        pos3 = np.array([7, 13])
        pos4 = np.array([8, 13])
        pos = np.array([7.25, 13])  # center is between pixels, biased left
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos1[::-1])] = 100
        image[tuple(pos2[::-1])] = 50
        image[tuple(pos3[::-1])] = 100
        image[tuple(pos4[::-1])] = 50
        actual = mr.locate(image, 5, 1, preprocess=False)[cols]
        expected = DataFrame(pos.reshape(1, -1), columns=cols)
        assert_allclose(actual, expected, atol=PRECISION)

        pos = np.array([7.75, 13])  # center is between pixels, biased right
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos1[::-1])] = 50
        image[tuple(pos2[::-1])] = 100
        image[tuple(pos3[::-1])] = 50
        image[tuple(pos4[::-1])] = 100
        actual = mr.locate(image, 5, 1, preprocess=False)[cols]
        expected = DataFrame(pos.reshape(1, -1), columns=cols)
        assert_allclose(actual, expected, atol=PRECISION)

        pos1 = np.array([7, 12])
        pos2 = np.array([7, 13])
        pos3 = np.array([7, 12])
        pos4 = np.array([7, 13])
        pos = np.array([7, 12.25])  # center is between pixels, biased down
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos1[::-1])] = 100
        image[tuple(pos2[::-1])] = 50
        actual = mr.locate(image, 5, 1, preprocess=False)[cols]
        expected = DataFrame(pos.reshape(1, -1), columns=cols)
        assert_allclose(actual, expected, atol=PRECISION)

        pos = np.array([7, 12.75])  # center is between pixels, biased up
        image = np.ones(dims, dtype='uint8')
        image[tuple(pos1[::-1])] = 50
        image[tuple(pos2[::-1])] = 100
        actual = mr.locate(image, 5, 1, preprocess=False)[cols]
        expected = DataFrame(pos.reshape(1, -1), columns=cols)
        assert_allclose(actual, expected, atol=PRECISION)