summaryrefslogtreecommitdiff
blob: 9d8036c2a1d459afb298caeee86aeda3c17089d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
 skimage/exposure/_adapthist.py          |  8 +++++---
 skimage/exposure/tests/test_exposure.py | 14 +++++++-------
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/skimage/exposure/_adapthist.py b/skimage/exposure/_adapthist.py
index b71916f..e878bfb 100644
--- a/skimage/exposure/_adapthist.py
+++ b/skimage/exposure/_adapthist.py
@@ -255,12 +255,14 @@ def clip_histogram(hist, clip_limit):
     while n_excess > 0:  # Redistribute remaining excess
         index = 0
         while n_excess > 0 and index < hist.size:
+            under_mask = hist < 0
             step_size = int(hist[hist < clip_limit].size / n_excess)
             step_size = max(step_size, 1)
             indices = np.arange(index, hist.size, step_size)
-            under = hist[indices] < clip_limit
-            hist[under] += 1
-            n_excess -= hist[under].size
+            under_mask[indices] = True
+            under_mask = (under_mask) & (hist < clip_limit)
+            hist[under_mask] += 1
+            n_excess -= under_mask.sum()
             index += 1
 
     return hist
diff --git a/skimage/exposure/tests/test_exposure.py b/skimage/exposure/tests/test_exposure.py
index 265ce24..83bb551 100644
--- a/skimage/exposure/tests/test_exposure.py
+++ b/skimage/exposure/tests/test_exposure.py
@@ -199,9 +199,9 @@ def test_adapthist_scalar():
     full_scale = skimage.exposure.rescale_intensity(skimage.img_as_float(img))
 
     assert_almost_equal = np.testing.assert_almost_equal
-    assert_almost_equal(peak_snr(full_scale, adapted), 101.2295, 3)
+    assert_almost_equal(peak_snr(full_scale, adapted), 102.066, 3)
     assert_almost_equal(norm_brightness_err(full_scale, adapted),
-                        0.041, 3)
+                        0.038, 3)
     return img, adapted
 
 
@@ -216,8 +216,8 @@ def test_adapthist_grayscale():
                                               nbins=128)
     assert_almost_equal = np.testing.assert_almost_equal
     assert img.shape == adapted.shape
-    assert_almost_equal(peak_snr(img, adapted), 97.6876, 3)
-    assert_almost_equal(norm_brightness_err(img, adapted), 0.0591, 3)
+    assert_almost_equal(peak_snr(img, adapted), 102.078, 3)
+    assert_almost_equal(norm_brightness_err(img, adapted), 0.0529, 3)
     return data, adapted
 
 
@@ -237,7 +237,7 @@ def test_adapthist_color():
     assert adapted.max() == 1.0
     assert img.shape == adapted.shape
     full_scale = skimage.exposure.rescale_intensity(img)
-    assert_almost_equal(peak_snr(full_scale, adapted), 109.6, 1)
+    assert_almost_equal(peak_snr(full_scale, adapted), 109.393, 1)
     assert_almost_equal(norm_brightness_err(full_scale, adapted), 0.02, 2)
     return data, adapted
 
@@ -255,8 +255,8 @@ def test_adapthist_alpha():
     full_scale = skimage.exposure.rescale_intensity(img)
     assert img.shape == adapted.shape
     assert_almost_equal = np.testing.assert_almost_equal
-    assert_almost_equal(peak_snr(full_scale, adapted), 109.60, 2)
-    assert_almost_equal(norm_brightness_err(full_scale, adapted), 0.0235, 3)
+    assert_almost_equal(peak_snr(full_scale, adapted), 109.393, 2)
+    assert_almost_equal(norm_brightness_err(full_scale, adapted), 0.0248, 3)
 
 
 def peak_snr(img1, img2):