From 5fdc11c4fdbf0ebbae918a9d17e5c6f7f320ea8f Mon Sep 17 00:00:00 2001 From: Olivier Debeir Date: Wed, 10 Oct 2012 15:40:05 +0200 Subject: [PATCH] fix percentile autolevel --- skimage/rank/_crank16_percentiles.pyx | 16 ++++++---------- skimage/rank/_crank8_percentiles.pyx | 2 -- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/skimage/rank/_crank16_percentiles.pyx b/skimage/rank/_crank16_percentiles.pyx index 54c25d40..8d0446ff 100644 --- a/skimage/rank/_crank16_percentiles.pyx +++ b/skimage/rank/_crank16_percentiles.pyx @@ -15,10 +15,10 @@ import numpy as np cimport numpy as np # import main loop -from _core16p cimport _core16p +from _core16p cimport _core16p,int_min,int_max # ----------------------------------------------------------------- -# kernels uint8 (SOFT version using percentiles) +# kernels uint16 (SOFT version using percentiles) # ----------------------------------------------------------------- cdef inline np.uint16_t kernel_autolevel(int* histo, float pop, np.uint16_t g,int bitdepth,int maxbin, int midbin, float p0, float p1): @@ -29,25 +29,21 @@ cdef inline np.uint16_t kernel_autolevel(int* histo, float pop, np.uint16_t g,in p1 = 1.0-p1 for i in range(maxbin): sum += histo[i] - if sum>=p0*pop: + if sum>p0*pop: imin = i break sum = 0 for i in range(maxbin-1,-1,-1): sum += histo[i] - if sum>=p1*pop: + if sum>p1*pop: imax = i break delta = imax-imin - if g>imax: - return (maxbin-1) - if g(0) if delta>0: - return ((maxbin-1)*1.*(g-imin)/delta) + return (255*(int_min(int_max(imin,g),imax)-imin)/delta) else: - return (0) + return (imax-imin) else: return (0) diff --git a/skimage/rank/_crank8_percentiles.pyx b/skimage/rank/_crank8_percentiles.pyx index 3082e23a..6b81c8bd 100644 --- a/skimage/rank/_crank8_percentiles.pyx +++ b/skimage/rank/_crank8_percentiles.pyx @@ -43,8 +43,6 @@ cdef inline np.uint8_t kernel_autolevel(int* histo, float pop, np.uint8_t g, flo break delta = imax-imin if delta>0: -# return (255.) -# return (delta) return (255*(uint8_min(uint8_max(imin,g),imax)-imin)/delta) else: return (imax-imin)