def test_all_maxima_filtered(self): self.check_skip() black_image = np.ones((21, 23)).astype(np.uint8) draw_point(black_image, [11, 13], 10) with assert_produces_warning(UserWarning): f = tp.locate(black_image, 5, minmass=200, engine=self.engine, preprocess=False)
def test_topn(self): self.check_skip() L = 21 dims = (L, L + 2) # avoid square images in tests cols = ['y', 'x'] 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') draw_point(image, pos1, 100) draw_point(image, pos2, 90) draw_point(image, pos3, 80) actual = tp.locate(image, 5, 1, topn=2, preprocess=False, engine=self.engine)[cols] actual = actual.sort(['x', 'y']) # sort for reliable comparison expected = DataFrame([pos1, pos2], columns=cols).sort(['x', 'y']) assert_allclose(actual, expected, atol=PRECISION) # top 1 actual = tp.locate(image, 5, 1, topn=1, preprocess=False, engine=self.engine)[cols] actual = actual.sort(['x', 'y']) # sort for reliable comparison expected = DataFrame([pos1], columns=cols).sort(['x', 'y']) assert_allclose(actual, expected, atol=PRECISION)
def test_subpx_precision(self): self.check_skip() L = 21 dims = (L, L + 2) # avoid square images in tests cols = ['y', 'x'] PRECISION = 0.1 # one bright pixel pos = [7, 13] image = np.ones(dims, dtype='uint8') draw_point(image, pos, 100) actual = tp.locate(image, 3, 1, preprocess=False, engine=self.engine)[cols] expected = DataFrame(np.asarray(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 = [7.5, 13] # center is between pixels image = np.ones(dims, dtype='uint8') draw_point(image, pos1, 100) draw_point(image, pos2, 100) actual = tp.locate(image, 5, 1, preprocess=False, engine=self.engine)[cols] expected = DataFrame(np.asarray(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 = [7.33, 13] # center is between pixels, biased left image = np.ones(dims, dtype='uint8') draw_point(image, pos1, 100) draw_point(image, pos2, 50) actual = tp.locate(image, 5, 1, preprocess=False, engine=self.engine)[cols] expected = DataFrame(np.asarray(pos).reshape(1, -1), columns=cols) assert_allclose(actual, expected, atol=PRECISION) pos = [7.67, 13] # center is between pixels, biased right image = np.ones(dims, dtype='uint8') draw_point(image, pos1, 50) draw_point(image, pos2, 100) actual = tp.locate(image, 5, 1, preprocess=False, engine=self.engine)[cols] expected = DataFrame(np.asarray(pos).reshape(1, -1), columns=cols) assert_allclose(actual, expected, atol=PRECISION) pos1 = np.array([7, 12]) pos2 = np.array([7, 13]) pos = [7, 12.33] # center is between pixels, biased up image = np.ones(dims, dtype='uint8') draw_point(image, pos1, 100) draw_point(image, pos2, 50) actual = tp.locate(image, 5, 1, preprocess=False, engine=self.engine)[cols] expected = DataFrame(np.asarray(pos).reshape(1, -1), columns=cols) assert_allclose(actual, expected, atol=PRECISION) pos = [7, 12.67] # center is between pixels, biased down image = np.ones(dims, dtype='uint8') draw_point(image, pos1, 50) draw_point(image, pos2, 100) actual = tp.locate(image, 5, 1, preprocess=False, engine=self.engine)[cols] expected = DataFrame(np.asarray(pos).reshape(1, -1), columns=cols) assert_allclose(actual, expected, atol=PRECISION) # four neighboring pixels of unequal brightness pos1 = np.array([7, 12]) pos2 = np.array([8, 12]) pos3 = np.array([7, 13]) pos4 = np.array([8, 13]) pos = [7.33, 12.5] # center is between pixels, biased left image = np.ones(dims, dtype='uint8') draw_point(image, pos1, 100) draw_point(image, pos2, 50) draw_point(image, pos3, 100) draw_point(image, pos4, 50) actual = tp.locate(image, 5, 1, preprocess=False, engine=self.engine)[cols] expected = DataFrame(np.asarray(pos).reshape(1, -1), columns=cols) assert_allclose(actual, expected, atol=PRECISION) pos = [7.67, 12.5] # center is between pixels, biased right image = np.ones(dims, dtype='uint8') draw_point(image, pos1, 50) draw_point(image, pos2, 100) draw_point(image, pos3, 50) draw_point(image, pos4, 100) actual = tp.locate(image, 5, 1, preprocess=False, engine=self.engine)[cols] expected = DataFrame(np.asarray(pos).reshape(1, -1), columns=cols) assert_allclose(actual, expected, atol=PRECISION) pos = [7.5, 12.33] # center is between pixels, biased up image = np.ones(dims, dtype='uint8') draw_point(image, pos1, 100) draw_point(image, pos2, 100) draw_point(image, pos3, 50) draw_point(image, pos4, 50) actual = tp.locate(image, 5, 1, preprocess=False, engine=self.engine)[cols] expected = DataFrame(np.asarray(pos).reshape(1, -1), columns=cols) assert_allclose(actual, expected, atol=PRECISION) pos = [7.5, 12.67] # center is between pixels, biased down image = np.ones(dims, dtype='uint8') draw_point(image, pos1, 50) draw_point(image, pos2, 50) draw_point(image, pos3, 100) draw_point(image, pos4, 100) actual = tp.locate(image, 5, 1, preprocess=False, engine=self.engine)[cols] expected = DataFrame(np.asarray(pos).reshape(1, -1), columns=cols) assert_allclose(actual, expected, atol=PRECISION)
def test_flat_peak(self): # This tests the part of locate_maxima that eliminates multiple # maxima in the same mask area. self.check_skip() image = np.ones((21, 23)).astype(np.uint8) image[11, 13] = 100 image[11, 14] = 100 image[12, 13] = 100 count = len(tp.locate(image, 5, preprocess=False, engine=self.engine)) self.assertEqual(count, 1) image = np.ones((21, 23)).astype(np.uint8) image[11:13, 13:15] = 100 count = len(tp.locate(image, 5, preprocess=False, engine=self.engine)) self.assertEqual(count, 1) image = np.ones((21, 23)).astype(np.uint8) image[11, 13] = 100 image[11, 14] = 100 image[11, 15] = 100 count = len(tp.locate(image, 5, preprocess=False, engine=self.engine)) self.assertEqual(count, 1) # This tests that two nearby peaks are merged by # picking the one with the brighter neighborhood. image = np.ones((21, 23)).astype(np.uint8) pos = [14, 14] draw_point(image, [11, 13], 100) draw_point(image, [11, 14], 100) draw_point(image, [11, 15], 100) draw_point(image, [14, 13], 101) draw_point(image, [14, 14], 101) draw_point(image, [14, 15], 101) cols = ['y', 'x'] actual = tp.locate(image, 5, preprocess=False, engine=self.engine)[cols] expected = DataFrame(np.asarray(pos).reshape(1, -1), columns=cols) assert_allclose(actual, expected, atol=0.1) # Break ties by sorting by position, simply to avoid # any randomness resulting from cKDTree returning a set. image = np.ones((21, 23)).astype(np.uint8) pos = [14, 14] draw_point(image, [11, 12], 100) draw_point(image, [11, 13], 100) draw_point(image, [11, 14], 100) draw_point(image, [14, 13], 100) draw_point(image, [14, 14], 100) draw_point(image, [14, 15], 100) cols = ['y', 'x'] actual = tp.locate(image, 5, preprocess=False, engine=self.engine)[cols] expected = DataFrame(np.asarray(pos).reshape(1, -1), columns=cols) assert_allclose(actual, expected, atol=0.1)
def test_maxima_in_margin_3D(self): self.check_skip() black_image = np.ones((21, 23, 25)).astype(np.uint8) draw_point(black_image, [1, 1, 1], 100) with assert_produces_warning(UserWarning): f = tp.locate(black_image, 5, engine=self.engine)