int NI_FindObjects(PyArrayObject* input, npy_intp max_label, npy_intp* regions) { int kk; npy_intp size, jj; NI_Iterator ii; char *pi; NPY_BEGIN_THREADS_DEF; NPY_BEGIN_THREADS; /* get input data, size and iterator: */ pi = (void *)PyArray_DATA(input); size = 1; for(kk = 0; kk < input->nd; kk++) size *= input->dimensions[kk]; if (!NI_InitPointIterator(input, &ii)) goto exit; if (input->nd > 0) { for(jj = 0; jj < 2 * input->nd * max_label; jj++) regions[jj] = -1; } else { for(jj = 0; jj < max_label; jj++) regions[jj] = -1; } /* iterate over all points: */ for(jj = 0 ; jj < size; jj++) { switch (NI_NormalizeType(input->descr->type_num)) { CASE_FIND_OBJECT_POINT(pi, regions, input->nd, input->dimensions, max_label, ii, Bool); CASE_FIND_OBJECT_POINT(pi, regions, input->nd, input->dimensions, max_label, ii, UInt8); CASE_FIND_OBJECT_POINT(pi, regions, input->nd, input->dimensions, max_label, ii, UInt16); CASE_FIND_OBJECT_POINT(pi, regions, input->nd, input->dimensions, max_label, ii, UInt32); #if HAS_UINT64 CASE_FIND_OBJECT_POINT(pi, regions, input->nd, input->dimensions, max_label, ii, UInt64); #endif CASE_FIND_OBJECT_POINT(pi, regions, input->nd, input->dimensions, max_label, ii, Int8); CASE_FIND_OBJECT_POINT(pi, regions, input->nd, input->dimensions, max_label, ii, Int16); CASE_FIND_OBJECT_POINT(pi, regions, input->nd, input->dimensions, max_label, ii, Int32); CASE_FIND_OBJECT_POINT(pi, regions, input->nd, input->dimensions, max_label, ii, Int64); break; default: NPY_END_THREADS; PyErr_SetString(PyExc_RuntimeError, "data type not supported"); goto exit; } NI_ITERATOR_NEXT(ii, pi); } exit: NPY_END_THREADS; return PyErr_Occurred() ? 0 : 1; }
int NI_FindObjects(PyArrayObject* input, npy_intp max_label, npy_intp* regions) { npy_intp size, jj; NI_Iterator ii; char *pi; NPY_BEGIN_THREADS_DEF; NPY_BEGIN_THREADS; /* get input data, size and iterator: */ pi = (void *)PyArray_DATA(input); size = PyArray_SIZE(input); if (!NI_InitPointIterator(input, &ii)) goto exit; if (PyArray_NDIM(input) > 0) { for (jj = 0; jj < 2 * PyArray_NDIM(input) * max_label; jj++) { regions[jj] = -1; } } else { for(jj = 0; jj < max_label; jj++) regions[jj] = -1; } /* iterate over all points: */ for(jj = 0 ; jj < size; jj++) { switch (PyArray_TYPE(input)) { CASE_FIND_OBJECT_POINT(NPY_BOOL, npy_bool, pi, regions, input, max_label, ii); CASE_FIND_OBJECT_POINT(NPY_UBYTE, npy_ubyte, pi, regions, input, max_label, ii); CASE_FIND_OBJECT_POINT(NPY_USHORT, npy_ushort, pi, regions, input, max_label, ii); CASE_FIND_OBJECT_POINT(NPY_UINT, npy_uint, pi, regions, input, max_label, ii); CASE_FIND_OBJECT_POINT(NPY_ULONG, npy_ulong, pi, regions, input, max_label, ii); CASE_FIND_OBJECT_POINT(NPY_ULONGLONG, npy_ulonglong, pi, regions, input, max_label, ii); CASE_FIND_OBJECT_POINT(NPY_BYTE, npy_byte, pi, regions, input, max_label, ii); CASE_FIND_OBJECT_POINT(NPY_SHORT, npy_short, pi, regions, input, max_label, ii); CASE_FIND_OBJECT_POINT(NPY_INT, npy_int, pi, regions, input, max_label, ii); CASE_FIND_OBJECT_POINT(NPY_LONG, npy_long, pi, regions, input, max_label, ii); CASE_FIND_OBJECT_POINT(NPY_LONGLONG, npy_longlong, pi, regions, input, max_label, ii); CASE_FIND_OBJECT_POINT(NPY_FLOAT, npy_float, pi, regions, input, max_label, ii); CASE_FIND_OBJECT_POINT(NPY_DOUBLE, npy_double, pi, regions, input, max_label, ii); default: NPY_END_THREADS; PyErr_SetString(PyExc_RuntimeError, "data type not supported"); goto exit; } NI_ITERATOR_NEXT(ii, pi); } exit: NPY_END_THREADS; return PyErr_Occurred() ? 0 : 1; }