mirror of
https://github.com/wassname/scikit-image.git
synced 2026-06-27 23:08:44 +08:00
45 lines
1.0 KiB
Cython
45 lines
1.0 KiB
Cython
#cython: cdivision=True
|
|
#cython: boundscheck=False
|
|
#cython: nonecheck=False
|
|
#cython: wraparound=False
|
|
cimport numpy as cnp
|
|
|
|
|
|
cdef float integrate(cnp.ndarray[float, ndim=2, mode="c"] sat,
|
|
int r0, int c0, int r1, int c1):
|
|
"""
|
|
Using a summed area table / integral image, calculate the sum
|
|
over a given window.
|
|
|
|
This function is the same as the `integrate` function in
|
|
`skimage.transform.integrate`, but this Cython version significantly
|
|
speeds up the code.
|
|
|
|
Parameters
|
|
----------
|
|
sat : ndarray of float
|
|
Summed area table / integral image.
|
|
r0, c0 : int
|
|
Top-left corner of block to be summed.
|
|
r1, c1 : int
|
|
Bottom-right corner of block to be summed.
|
|
|
|
Returns
|
|
-------
|
|
S : int
|
|
Sum over the given window.
|
|
"""
|
|
cdef float S = 0
|
|
|
|
S += sat[r1, c1]
|
|
|
|
if (r0 - 1 >= 0) and (c0 - 1 >= 0):
|
|
S += sat[r0 - 1, c0 - 1]
|
|
|
|
if (r0 - 1 >= 0):
|
|
S -= sat[r0 - 1, c1]
|
|
|
|
if (c0 - 1 >= 0):
|
|
S -= sat[r1, c0 - 1]
|
|
return S
|