Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

ScaleSpaceFilter.h

Go to the documentation of this file.
00001 /***************************************************************************
00002  *cr
00003  *cr            (C) Copyright 1995-2019 The Board of Trustees of the
00004  *cr                        University of Illinois
00005  *cr                         All Rights Reserved
00006  *cr
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  * RCS INFORMATION:
00011  *
00012  *      $RCSfile: ScaleSpaceFilter.h,v $
00013  *      $Author: johns $        $Locker:  $             $State: Exp $
00014  *      $Revision: 1.9 $        $Date: 2019/01/17 21:21:01 $
00015  *
00016  ***************************************************************************
00017  * DESCRIPTION:
00018  *   Perform scale-space filtering on 3-D volumes, e.g., cryo-EM density maps,
00019  *   for use in subsequent image segmentation algorithms.
00020  ***************************************************************************/
00021 
00022 #ifndef SCALE_SPACE_FILTER_H
00023 #define SCALE_SPACE_FILTER_H
00024 
00025 #include "GaussianBlur.h"
00026 #include "CUDASegmentation.h"
00027 
00028 enum MERGE_POLICY {
00029   MERGE_HILL_CLIMB,
00030   MERGE_WATERSHED_HILL_CLIMB,
00031   MERGE_WATERSHED_OVERLAP
00032 };
00033 
00034 template <typename GROUP_T, typename IMAGE_T>
00035 class ScaleSpaceFilter {
00036   public:
00037 
00038     ScaleSpaceFilter(int w,
00039                      int h, 
00040                      int d,
00041                      long nGroups,
00042                      float initial_blur_sigma,
00043                      float blur_multiple,
00044                      bool use_cuda);
00045 
00046     ~ScaleSpaceFilter();
00047 
00048     long merge(GROUP_T* segments, GaussianBlur<IMAGE_T>* gaussian, MERGE_POLICY policy);
00049 
00050     long merge_with_watershed(GROUP_T* segments, GaussianBlur<IMAGE_T>* gaussian);
00051 
00052   private:
00053     int   width;
00054     int   height;
00055     int   depth;
00056     long  heightWidth;
00057     long  nVoxels;
00058     long  nGroups;
00059     float blur_multiple;
00060     float current_blur;
00061     bool  use_cuda;
00062     gpuseg_temp_storage gpu_seq_tmp;
00063     gpuseg_temp_storage gpu_scanwork_tmp;
00064     gpuseg_temp_storage gpu_grpmaxidx_tmp;
00065 
00066     unsigned long* max_idx;
00067     GROUP_T* group_map;
00068 
00069     long find_local_maxima(long curr_idx, IMAGE_T* image);
00070 
00071     long sequentialize_group_nums(GROUP_T* segments, long max_group_num);
00072 
00073     long sequentialize_group_nums_cpu(GROUP_T* segments, long max_group_num);
00074 
00075     void find_groups_max_idx(GROUP_T* segments, GaussianBlur<IMAGE_T>* gaussian);
00076 
00077     void find_groups_max_idx_cpu(GROUP_T* segments, IMAGE_T* image);
00078 
00079     void watershed_overlap_merge_cpu(GROUP_T* segments, GROUP_T* new_segments);
00080 
00081     void watershed_hill_climb_merge_cpu(GROUP_T* segments, GROUP_T* new_segments, IMAGE_T* image);
00082 
00083     void hill_climb_merge_cpu(GROUP_T* segments, IMAGE_T* image);
00084 
00085     void watershed_overlap_merge(GROUP_T* segments, GaussianBlur<IMAGE_T>* gaussian);
00086 
00087     void watershed_hill_climb_merge(GROUP_T* segments, GaussianBlur<IMAGE_T>* gaussian);
00088 
00089     void hill_climb_merge(GROUP_T* segments, GaussianBlur<IMAGE_T>* gaussian);
00090 
00091     template <typename ARRAY_T>
00092     ARRAY_T* allocate_array(long num_elements);
00093 
00094     template <typename ARRAY_T>
00095     void free_array(ARRAY_T*& arr);
00096 
00097 };
00098 
00099 #endif

Generated on Wed Apr 17 02:46:34 2024 for VMD (current) by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002