1#cython: cdivision=True 2#cython: nonecheck=False 3#cython: wraparound=False 4import numpy as np 5cimport numpy as cnp 6 7from .._shared.fused_numerics cimport np_floats 8cnp.import_array() 9 10 11def moments_hu(np_floats[:, :] nu): 12 if np_floats is cnp.float32_t: 13 dtype = np.float32 14 else: 15 dtype = np.float64 16 17 cdef np_floats[::1] hu = np.zeros((7, ), dtype=dtype) 18 cdef np_floats t0 = nu[3, 0] + nu[1, 2] 19 cdef np_floats t1 = nu[2, 1] + nu[0, 3] 20 cdef np_floats q0 = t0 * t0 21 cdef np_floats q1 = t1 * t1 22 cdef np_floats n4 = 4 * nu[1, 1] 23 cdef np_floats s = nu[2, 0] + nu[0, 2] 24 cdef np_floats d = nu[2, 0] - nu[0, 2] 25 hu[0] = s 26 hu[1] = d * d + n4 * nu[1, 1] 27 hu[3] = q0 + q1 28 hu[5] = d * (q0 - q1) + n4 * t0 * t1 29 t0 *= q0 - 3 * q1 30 t1 *= 3 * q0 - q1 31 q0 = nu[3, 0]- 3 * nu[1, 2] 32 q1 = 3 * nu[2, 1] - nu[0, 3] 33 hu[2] = q0 * q0 + q1 * q1 34 hu[4] = q0 * t0 + q1 * t1 35 hu[6] = q1 * t0 - q0 * t1 36 return np.asarray(hu) 37