Prevent infinite loop in adapthist for low clip_limit

Prevent infinite loop in adapthist

Add a test that exposed the infinite loop

Use better check to prevent endless loop
This commit is contained in:
Steven Silvester
2015-10-25 15:26:59 -05:00
parent d776464324
commit aabf2de96a
2 changed files with 7 additions and 1 deletions
+6
View File
@@ -244,6 +244,8 @@ def clip_histogram(hist, clip_limit):
n_excess -= mid.size * clip_limit - mid.sum()
hist[mid_mask] = clip_limit
prev_n_excess = n_excess
while n_excess > 0: # Redistribute remaining excess
index = 0
while n_excess > 0 and index < hist.size:
@@ -256,6 +258,10 @@ def clip_histogram(hist, clip_limit):
hist[under_mask] += 1
n_excess -= under_mask.sum()
index += 1
# bail if we have not distributed any excess
if prev_n_excess == n_excess:
break
prev_n_excess = n_excess
return hist
+1 -1
View File
@@ -213,7 +213,7 @@ def test_adapthist_grayscale():
img = np.dstack((img, img, img))
with expected_warnings(['precision loss|non-contiguous input',
'deprecated']):
adapted_old = exposure.equalize_adapthist(img, 10, 9, clip_limit=0.01,
adapted_old = exposure.equalize_adapthist(img, 10, 9, clip_limit=0.001,
nbins=128)
adapted = exposure.equalize_adapthist(img, kernel_size=(57, 51), clip_limit=0.01, nbins=128)
assert img.shape == adapted.shape