00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00022 #ifndef CUDA_SEGMENTATION
00023 #define CUDA_SEGMENTATION
00024
00025 typedef struct {
00026 void *tmp_d;
00027 unsigned long sz;
00028 } gpuseg_temp_storage;
00029
00030 void free_gpu_temp_storage(gpuseg_temp_storage *tmp);
00031
00032 template <typename GROUP_T>
00033 long sequentialize_groups_cuda(GROUP_T* groups_d, GROUP_T* group_map_d,
00034 unsigned long nVoxels, unsigned long nGroups,
00035 gpuseg_temp_storage *tmp = NULL,
00036 gpuseg_temp_storage *scanwork = NULL);
00037
00038 template <typename GROUP_T, typename IMAGE_T>
00039 void find_groups_max_idx_cuda(GROUP_T* groups_d, IMAGE_T* image_d, unsigned long* max_idx, unsigned long nVoxels, unsigned long nGroups, gpuseg_temp_storage *tmp = NULL);
00040
00041 template <typename GROUP_T, typename IMAGE_T>
00042 void hill_climb_merge_cuda(GROUP_T* groups_d, IMAGE_T* image_d, unsigned long* max_idx_d, GROUP_T* group_map_d,
00043 int height, int width, int depth, unsigned long nGroups);
00044
00045 template <typename IN_T, typename OUT_T>
00046 void copy_and_convert_type_cuda(IN_T* in, OUT_T* out, long num_elements);
00047
00048 template <typename GROUP_T, typename IMAGE_T>
00049 void watershed_hill_climb_merge_cuda(GROUP_T* segments_d, GROUP_T* new_segments_d, IMAGE_T* image_d,
00050 GROUP_T* group_map_d, unsigned long* max_idx_d,
00051 long height, long width, long depth, unsigned long nGroups);
00052
00053 #endif