diff --git a/skimage/feature/censure_cy.pyx b/skimage/feature/censure_cy.pyx index 1c352fde..f8c712f8 100644 --- a/skimage/feature/censure_cy.pyx +++ b/skimage/feature/censure_cy.pyx @@ -18,55 +18,57 @@ def _censure_dob_loop(Py_ssize_t n, cdef Py_ssize_t n2 = 2 * n cdef double total_weight = inner_weight + outer_weight - # top-left pixel - inner = (integral_img[n2 + n, n2 + n] - + integral_img[n2 - n - 1, n2 - n - 1] - - integral_img[n2 + n, n2 - n - 1] - - integral_img[n2 - n - 1, n2 + n]) + with nogil: - outer = integral_img[2 * n2, 2 * n2] + # top-left pixel + inner = (integral_img[n2 + n, n2 + n] + + integral_img[n2 - n - 1, n2 - n - 1] + - integral_img[n2 + n, n2 - n - 1] + - integral_img[n2 - n - 1, n2 + n]) - filtered_image[n2, n2] = (outer_weight * outer - - total_weight * inner) + outer = integral_img[2 * n2, 2 * n2] - # left column - for i in range(n2 + 1, integral_img.shape[0] - n2): - inner = (integral_img[i + n, n2 + n] - + integral_img[i - n - 1, n2 - n - 1] - - integral_img[i + n, n2 - n - 1] - - integral_img[i - n - 1, n2 + n]) + filtered_image[n2, n2] = (outer_weight * outer + - total_weight * inner) - outer = (integral_img[i + n2, 2 * n2] - - integral_img[i - n2 - 1, 2 * n2]) + # left column + for i in range(n2 + 1, integral_img.shape[0] - n2): + inner = (integral_img[i + n, n2 + n] + + integral_img[i - n - 1, n2 - n - 1] + - integral_img[i + n, n2 - n - 1] + - integral_img[i - n - 1, n2 + n]) - filtered_image[i, n2] = (outer_weight * outer - - total_weight * inner) + outer = (integral_img[i + n2, 2 * n2] + - integral_img[i - n2 - 1, 2 * n2]) - # top row - for j in range(n2 + 1, integral_img.shape[1] - n2): - inner = (integral_img[n2 + n, j + n] - + integral_img[n2 - n - 1, j - n - 1] - - integral_img[n2 + n, j - n - 1] - - integral_img[n2 - n - 1, j + n]) + filtered_image[i, n2] = (outer_weight * outer + - total_weight * inner) - outer = (integral_img[2 * n2, j + n2] - - integral_img[2 * n2, j - n2 - 1]) - - filtered_image[n2, j] = (outer_weight * outer - - total_weight * inner) - - # remaining block - for i in range(n2 + 1, integral_img.shape[0] - n2): + # top row for j in range(n2 + 1, integral_img.shape[1] - n2): - 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]) + inner = (integral_img[n2 + n, j + n] + + integral_img[n2 - n - 1, j - n - 1] + - integral_img[n2 + n, j - n - 1] + - integral_img[n2 - n - 1, j + n]) - outer = (integral_img[i + n2, j + n2] - + integral_img[i - n2 - 1, j - n2 - 1] - - integral_img[i + n2, j - n2 - 1] - - integral_img[i - n2 - 1, j + n2]) + outer = (integral_img[2 * n2, j + n2] + - integral_img[2 * n2, j - n2 - 1]) - filtered_image[i, j] = (outer_weight * outer - - total_weight * inner) + filtered_image[n2, j] = (outer_weight * outer + - total_weight * inner) + + # remaining block + for i in range(n2 + 1, integral_img.shape[0] - n2): + for j in range(n2 + 1, integral_img.shape[1] - n2): + 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 + n2, j + n2] + + integral_img[i - n2 - 1, j - n2 - 1] + - integral_img[i + n2, j - n2 - 1] + - integral_img[i - n2 - 1, j + n2]) + + filtered_image[i, j] = (outer_weight * outer + - total_weight * inner) diff --git a/skimage/feature/tests/test_censure.py b/skimage/feature/tests/test_censure.py index 95bfcda3..ecd8a90f 100644 --- a/skimage/feature/tests/test_censure.py +++ b/skimage/feature/tests/test_censure.py @@ -2,6 +2,7 @@ import numpy as np from numpy.testing import assert_array_equal, assert_raises from skimage.data import moon from skimage.feature import CENSURE +from skimage._shared.testing import test_parallel img = moon() @@ -53,6 +54,7 @@ def test_keypoints_censure_moon_image_dob(): assert_array_equal(expected_scales, detector.scales) +@test_parallel() def test_keypoints_censure_moon_image_octagon(): """Verify the actual Censure keypoints and their corresponding scale with the expected values for Octagon filter."""