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