mirror of
https://github.com/wassname/scikit-image.git
synced 2026-06-27 19:48:43 +08:00
Do not acquire GIL for CENSURE
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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."""
|
||||
|
||||
Reference in New Issue
Block a user