diff --git a/skimage/feature/censure.py b/skimage/feature/censure.py index b63c5207..1175235f 100644 --- a/skimage/feature/censure.py +++ b/skimage/feature/censure.py @@ -14,11 +14,14 @@ def _get_filtered_image(image, n_scales, mode): scales = np.zeros((image.shape[0], image.shape[1], n_scales)) for i in range(n_scales): n = i + 1 - inner_wt = (1.0 / (2 * n + 1)**2) - outer_wt = (1.0 / (12 * n**2 + 4 * n)) + # Constant multipliers for the outer region and the inner region + # of the bilevel filters with the constraint of keeping the DC bias + # 0. + inner_weight = (1.0 / (2 * n + 1)**2) + outer_weight = (1.0 / (12 * n**2 + 4 * n)) integral_img = integral_image(image) filtered_image = np.zeros(image.shape) - _censure_dob_loop(image, n, integral_img, filtered_image, inner_wt, outer_wt) + _censure_dob_loop(image, n, integral_img, filtered_image, inner_weight, outer_weight) scales[:, :, i] = filtered_image return scales elif mode == 'Octagon': @@ -43,10 +46,10 @@ def _get_filtered_image(image, n_scales, mode): ni = inner_shape[n - 1][1] outer_pixels = (mo + 2 * no)**2 - 2 * no * (no + 1) inner_pixels = (mi + 2 * ni)**2 - 2 * ni * (ni + 1) - outer_wt = 1.0 / (outer_pixels - inner_pixels) - inner_wt = 1.0 / inner_pixels + outer_weight = 1.0 / (outer_pixels - inner_pixels) + inner_weight = 1.0 / inner_pixels - _censure_octagon_loop(image, integral_img, integral_img1, integral_img2, integral_img3, integral_img4, filtered_image, outer_wt, inner_wt, mo, no, mi, ni) + _censure_octagon_loop(image, integral_img, integral_img1, integral_img2, integral_img3, integral_img4, filtered_image, outer_weight, inner_weight, mo, no, mi, ni) scales[:, :, k] = filtered_image return scales diff --git a/skimage/feature/censure_cy.pyx b/skimage/feature/censure_cy.pyx index 29c91378..75f58278 100644 --- a/skimage/feature/censure_cy.pyx +++ b/skimage/feature/censure_cy.pyx @@ -7,10 +7,10 @@ cimport numpy as cnp import numpy as np -def _censure_dob_loop(double[:, ::1] image, cnp.int16_t n, +def _censure_dob_loop(double[:, ::1] image, Py_ssize_t n, double[:, ::1] integral_img, double[:, ::1] filtered_image, - double inner_wt, double outer_wt): + double inner_weight, double outer_weight): cdef Py_ssize_t i, j cdef double inner, outer @@ -19,7 +19,7 @@ def _censure_dob_loop(double[:, ::1] image, cnp.int16_t n, for j in range(2 * n, image.shape[1] - 2 * n): inner = integral_img[i + n, j + n] + integral_img[i - n - 1, j - n - 1] - integral_img[i + n, j - n - 1] - integral_img[i - n - 1, j + n] outer = integral_img[i + 2 * n, j + 2 * n] + integral_img[i - 2 * n - 1, j - 2 * n - 1] - integral_img[i + 2 * n, j - 2 * n - 1] - integral_img[i - 2 * n - 1, j + 2 * n] - filtered_image[i, j] = outer_wt * outer - (inner_wt + outer_wt) * inner + filtered_image[i, j] = outer_weight * outer - (inner_weight + outer_weight) * inner def _slanted_integral_image(double[:, ::1] image, @@ -58,7 +58,7 @@ def _censure_octagon_loop(double[:, ::1] image, double[:, ::1] integral_img, double[:, ::1] integral_img3, double[:, ::1] integral_img4, double[:, ::1] filtered_image, - double outer_wt, double inner_wt, + double outer_weight, double inner_weight, int mo, int no, int mi, int ni): cdef Py_ssize_t i, j, o_m, i_m, o_set, i_set @@ -82,4 +82,4 @@ def _censure_octagon_loop(double[:, ::1] image, double[:, ::1] integral_img, inner += integral_img2[i - i_set, j - i_m] - integral_img2[i - i_m + 1, j - i_set - 1] - integral_img[i - i_m, -1] - integral_img[i - i_set - 1, j + i_m - 1] + integral_img[i - i_m, j + i_m - 1] + integral_img[i - i_set - 1, -1] inner += integral_img3[i - i_m, j + i_set] - integral_img3[i - i_set - 1, j + i_m - 1] - integral_img[-1, j + i_set] - integral_img[i + i_m - 1, j + i_m - 1] + integral_img[-1, j + i_m - 1] + integral_img[i + i_m - 1, j + i_set] - filtered_image[i, j] = outer_wt * outer - (outer_wt + inner_wt) * inner + filtered_image[i, j] = outer_weight * outer - (outer_weight + inner_weight) * inner