From 096fa018777338c046dca970a211694101395bc6 Mon Sep 17 00:00:00 2001 From: Olivier Debeir Date: Mon, 15 Oct 2012 16:36:08 +0200 Subject: [PATCH] delete core16p --- skimage/rank/_core16p.pxd | 16 --- skimage/rank/_core16p.pyx | 282 -------------------------------------- skimage/rank/setup.py | 3 - 3 files changed, 301 deletions(-) delete mode 100644 skimage/rank/_core16p.pxd delete mode 100644 skimage/rank/_core16p.pyx diff --git a/skimage/rank/_core16p.pxd b/skimage/rank/_core16p.pxd deleted file mode 100644 index d162540c..00000000 --- a/skimage/rank/_core16p.pxd +++ /dev/null @@ -1,16 +0,0 @@ -cimport numpy as np - -# generic cdef functions -cdef inline int int_max(int a, int b) -cdef inline int int_min(int a, int b) - -#--------------------------------------------------------------------------- -# 16 bit core kernel receives extra information about data inferior and superior percentiles -#--------------------------------------------------------------------------- - -cdef inline _core16p(np.uint16_t kernel(int*, float, np.uint16_t,int,int,int, float, float), -np.ndarray[np.uint16_t, ndim=2] image, -np.ndarray[np.uint8_t, ndim=2] selem, -np.ndarray[np.uint8_t, ndim=2] mask, -np.ndarray[np.uint16_t, ndim=2] out, -char shift_x, char shift_y,int bitdepth, float p0, float p1) \ No newline at end of file diff --git a/skimage/rank/_core16p.pyx b/skimage/rank/_core16p.pyx deleted file mode 100644 index 9e992b6b..00000000 --- a/skimage/rank/_core16p.pyx +++ /dev/null @@ -1,282 +0,0 @@ -#cython: cdivision=True -#cython: boundscheck=False -#cython: nonecheck=False -#cython: wraparound=False - -import numpy as np -cimport numpy as np -from libc.stdlib cimport malloc, free - -# generic cdef functions -cdef inline int int_max(int a, int b): return a if a >= b else b -cdef inline int int_min(int a, int b): return a if a <= b else b - -#--------------------------------------------------------------------------- -# 16 bit core kernel receives extra information about data inferior and superior percentiles -#--------------------------------------------------------------------------- - -cdef inline _core16p(np.uint16_t kernel(int*, float, np.uint16_t,int,int,int, float, float), -np.ndarray[np.uint16_t, ndim=2] image, -np.ndarray[np.uint8_t, ndim=2] selem, -np.ndarray[np.uint8_t, ndim=2] mask, -np.ndarray[np.uint16_t, ndim=2] out, -char shift_x, char shift_y,int bitdepth, float p0, float p1): - """ Main loop, this function computes the histogram for each image point - - data is uint16 - - result is uint16 casted - """ - - cdef int rows = image.shape[0] - cdef int cols = image.shape[1] - cdef int srows = selem.shape[0] - cdef int scols = selem.shape[1] - - cdef int centre_r = int(selem.shape[0] / 2) + shift_y - cdef int centre_c = int(selem.shape[1] / 2) + shift_x - - # check that structuring element center is inside the element bounding box - assert centre_r >= 0 - assert centre_c >= 0 - assert centre_r < srows - assert centre_c < scols - - assert bitdepth in range(2,13) - - maxbin_list = [0,0,4,8,16,32,64,128,256,512,1024,2048,4096] - midbin_list = [0,0,2,4,8,16,32,64,128,256,512,1024,2048] - - #set maxbin and midbin - cdef int maxbin=maxbin_list[bitdepth],midbin=midbin_list[bitdepth] - - assert (imageeimage.data - cdef np.uint8_t* emask_data = emask.data - - cdef np.uint16_t* out_data = out.data - cdef np.uint16_t* image_data = image.data - cdef np.uint8_t* mask_data = mask.data - - # define local variable types - cdef int r, c, rr, cc, s, value, local_max, i, even_row - cdef float pop # number of pixels actually inside the neighborhood (float) - - # allocate memory with malloc - cdef int max_se = srows*scols - - # number of element in each attack border - cdef int num_se_n, num_se_s, num_se_e, num_se_w - - # the current local histogram distribution - cdef int* histo = malloc(maxbin * sizeof(int)) - - # these lists contain the relative pixel row and column for each of the 4 attack borders - # east, west, north and south - # e.g. se_e_r lists the rows of the east structuring element border - - cdef int* se_e_r = malloc(max_se * sizeof(int)) - cdef int* se_e_c = malloc(max_se * sizeof(int)) - cdef int* se_w_r = malloc(max_se * sizeof(int)) - cdef int* se_w_c = malloc(max_se * sizeof(int)) - cdef int* se_n_r = malloc(max_se * sizeof(int)) - cdef int* se_n_c = malloc(max_se * sizeof(int)) - cdef int* se_s_r = malloc(max_se * sizeof(int)) - cdef int* se_s_c = malloc(max_se * sizeof(int)) - - # build attack and release borders - # by using difference along axis - - t = np.hstack((selem,np.zeros((selem.shape[0],1)))) - t_e = np.diff(t,axis=1)==-1 - - t = np.hstack((np.zeros((selem.shape[0],1)),selem)) - t_w = np.diff(t,axis=1)==1 - - t = np.vstack((selem,np.zeros((1,selem.shape[1])))) - t_s = np.diff(t,axis=0)==-1 - - t = np.vstack((np.zeros((1,selem.shape[1])),selem)) - t_n = np.diff(t,axis=0)==1 - - num_se_n = num_se_s = num_se_e = num_se_w = 0 - - for r in range(srows): - for c in range(scols): - if t_e[r,c]: - se_e_r[num_se_e] = r - centre_r - se_e_c[num_se_e] = c - centre_c - num_se_e += 1 - if t_w[r,c]: - se_w_r[num_se_w] = r - centre_r - se_w_c[num_se_w] = c - centre_c - num_se_w += 1 - if t_n[r,c]: - se_n_r[num_se_n] = r - centre_r - se_n_c[num_se_n] = c - centre_c - num_se_n += 1 - if t_s[r,c]: - se_s_r[num_se_s] = r - centre_r - se_s_c[num_se_s] = c - centre_c - num_se_s += 1 - - # initial population and histogram - for i in range(maxbin): - histo[i] = 0 - - pop = 0 - - for r in range(srows): - for c in range(scols): - rr = r - cc = c - if selem[r, c]: - if emask_data[rr * ecols + cc]: - value = eimage_data[rr * ecols + cc] - histo[value] += 1 - pop += 1. - - r = 0 - c = 0 - # kernel ------------------------------------------- - out_data[r * cols + c] = kernel(histo,pop,eimage_data[(r+centre_r) * ecols + c + centre_c], - bitdepth,maxbin,midbin,p0,p1) - # kernel ------------------------------------------- - - # main loop - r = 0 - for even_row in range(0,rows,2): - # ---> west to east - for c in range(1,cols): - for s in range(num_se_e): - rr = r + se_e_r[s] + centre_r - cc = c + se_e_c[s] + centre_c - if emask_data[rr * ecols + cc]: - value = eimage_data[rr * ecols + cc] - histo[value] += 1 - pop += 1. - for s in range(num_se_w): - rr = r + se_w_r[s] + centre_r - cc = c + se_w_c[s] + centre_c - 1 - if emask_data[rr * ecols + cc]: - value = eimage_data[rr * ecols + cc] - histo[value] -= 1 - pop -= 1. - - # kernel ------------------------------------------- - out_data[r * cols + c] = kernel(histo,pop,eimage_data[(r+centre_r) * ecols + c + centre_c], - bitdepth,maxbin,midbin,p0,p1) - # kernel ------------------------------------------- - - r += 1 # pass to the next row - if r>=rows: - break - - # ---> north to south - for s in range(num_se_s): - rr = r + se_s_r[s] + centre_r - cc = c + se_s_c[s] + centre_c - if emask_data[rr * ecols + cc]: - value = eimage_data[rr * ecols + cc] - histo[value] += 1 - pop += 1. - for s in range(num_se_n): - rr = r + se_n_r[s] + centre_r - 1 - cc = c + se_n_c[s] + centre_c - if emask_data[rr * ecols + cc]: - value = eimage_data[rr * ecols + cc] - histo[value] -= 1 - pop -= 1. - - # kernel ------------------------------------------- - out_data[r * cols + c] = kernel(histo,pop,eimage_data[(r+centre_r) * ecols + c + centre_c], - bitdepth,maxbin,midbin,p0,p1) - # kernel ------------------------------------------- - - # ---> east to west - for c in range(cols-2,-1,-1): - for s in range(num_se_w): - rr = r + se_w_r[s] + centre_r - cc = c + se_w_c[s] + centre_c - if emask_data[rr * ecols + cc]: - value = eimage_data[rr * ecols + cc] - histo[value] += 1 - pop += 1. - for s in range(num_se_e): - rr = r + se_e_r[s] + centre_r - cc = c + se_e_c[s] + centre_c + 1 - if emask_data[rr * ecols + cc]: - value = eimage_data[rr * ecols + cc] - histo[value] -= 1 - pop -= 1. - - # kernel ------------------------------------------- - out_data[r * cols + c] = kernel(histo,pop,eimage_data[(r+centre_r) * ecols + c + centre_c], - bitdepth,maxbin,midbin,p0,p1) - # kernel ------------------------------------------- - - r += 1 # pass to the next row - if r>=rows: - break - - # ---> north to south - for s in range(num_se_s): - rr = r + se_s_r[s] + centre_r - cc = c + se_s_c[s] + centre_c - if emask_data[rr * ecols + cc]: - value = eimage_data[rr * ecols + cc] - histo[value] += 1 - pop += 1. - for s in range(num_se_n): - rr = r + se_n_r[s] + centre_r - 1 - cc = c + se_n_c[s] + centre_c - if emask_data[rr * ecols + cc]: - value = eimage_data[rr * ecols + cc] - histo[value] -= 1 - pop -= 1. - - # kernel ------------------------------------------- - out_data[r * cols + c] = kernel(histo,pop,eimage_data[(r+centre_r) * ecols + c + centre_c], - bitdepth,maxbin,midbin,p0,p1) - # kernel ------------------------------------------- - - # release memory allocated by malloc - - free(se_e_r) - free(se_e_c) - free(se_w_r) - free(se_w_c) - free(se_n_r) - free(se_n_c) - free(se_s_r) - free(se_s_c) - - free(histo) - - return out - - diff --git a/skimage/rank/setup.py b/skimage/rank/setup.py index 854748b8..b7cac4dc 100644 --- a/skimage/rank/setup.py +++ b/skimage/rank/setup.py @@ -14,7 +14,6 @@ def configuration(parent_package='', top_path=None): cython(['_core8.pyx'], working_path=base_path) cython(['_core16.pyx'], working_path=base_path) - cython(['_core16p.pyx'], working_path=base_path) cython(['_core16b.pyx'], working_path=base_path) cython(['_crank8.pyx'], working_path=base_path) cython(['_crank8_percentiles.pyx'], working_path=base_path) @@ -26,8 +25,6 @@ def configuration(parent_package='', top_path=None): include_dirs=[get_numpy_include_dirs()]) config.add_extension('_core16', sources=['_core16.c'], include_dirs=[get_numpy_include_dirs()]) - config.add_extension('_core16p', sources=['_core16p.c'], - include_dirs=[get_numpy_include_dirs()]) config.add_extension('_core16b', sources=['_core16b.c'], include_dirs=[get_numpy_include_dirs()]) config.add_extension('_crank8', sources=['_crank8.c'],