File: BrainModelVolumeRegionOfInterest.h

package info (click to toggle)
caret 5.6.4~dfsg.1-3
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd, wheezy
  • size: 31,904 kB
  • ctags: 28,901
  • sloc: cpp: 378,050; python: 6,718; ansic: 5,507; makefile: 333; sh: 46
file content (140 lines) | stat: -rw-r--r-- 5,913 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140

#ifndef __BRAIN_MODEL_VOLUME_REGION_OF_INTEREST_H__
#define __BRAIN_MODEL_VOLUME_REGION_OF_INTEREST_H__

/*LICENSE_START*/
/*
 *  Copyright 1995-2002 Washington University School of Medicine
 *
 *  http://brainmap.wustl.edu
 *
 *  This file is part of CARET.
 *
 *  CARET is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  CARET is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with CARET; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */
/*LICENSE_END*/

#include <vector>

#include "BrainModelAlgorithmException.h"

class BrainSet;
class VolumeFile;

/// keeps track of the volume used interactively for region of interest operations
/// and performs operations using the region of interest
class BrainModelVolumeRegionOfInterest {
   public:
      // constructor
      BrainModelVolumeRegionOfInterest(BrainSet* brainSetIn);
      
      // destructor
      ~BrainModelVolumeRegionOfInterest();

      // set the volume ROI to all voxels in volume
      void setVolumeROIToAllVoxels(const VolumeFile* vf);
      
      // set the volume ROI to all displayed voxels in volume
      void setVolumeROIToAllDisplayedVoxels(const VolumeFile* vf);
      
      // set the volume ROI to all voxels within a range in volume
      void setVolumeROIToVoxelsInRangeOfValues(const VolumeFile* vf,
                                               const float minValue,
                                               const float maxValue);
      
      // set the volume ROI to all paint voxels with the specified name
      void setVolumeROIToPaintIDVoxels(const VolumeFile* vf,
                                       const QString& paintName);
                                       
      /// get the display volume ROI in graphics windows flag
      bool getDisplayVolumeROI() const { return displayVolumeROI; }
      
      /// set display the volume ROI in graphics windows flag
      void setDisplayVolumeROI(const bool b) { displayVolumeROI = b; }
      
      // get the number of voxels in the ROI
      int getNumberOfVoxelsInROI() const;
            
      /// get the region of interest volume
      VolumeFile* getROIVolume() { return roiVolume; }
      
      // assign paint id to paint volume for ROI voxels
      void operationAssignPaintVolumeID(VolumeFile* paintVolume,
                               const QString& paintName) const throw (BrainModelAlgorithmException);
       
      // assign function value to functional volume for ROI voxels
      void operationAssignFunctionalVolumeValue(VolumeFile* functionalVolume,
                                    const float value) const throw (BrainModelAlgorithmException);
      
      // paint region center of gravity report
      void operationPaintRegionCenterOfGravity(const VolumeFile* paintVolume,
                                      QString& reportTextOut) const throw (BrainModelAlgorithmException);
      
      // paint percentage report
      void operationPaintPercentageReport(const VolumeFile* paintVolume,
                                 QString& reportTextOut) const throw (BrainModelAlgorithmException);

      // probabilistic paint volume overlap analysis
      void operationPaintOverlapAnalysis(const std::vector<VolumeFile*>& paintVolumes,
                                QString& reportTextOut) const throw (BrainModelAlgorithmException); 
      
      // segmentation region center of gravity report
      void operationSegmentationRegionCenterOfGravity(const VolumeFile *segmentVolume,
                                             QString& reportTextOut) const throw (BrainModelAlgorithmException);

   protected:
      // reset the ROI volume
      void resetROIVolume(const VolumeFile* vf,
                          const bool colorTheVolumesVoxelsFlag);
      
      // see if a stereotaxic coordinate is inside the ROI
      bool insideVolumeROI(const float xyz[3]) const;
      
      // determine which voxels are within the ROI volume
      // use std::vector<int> since std::vector<bool> packs the bools into bits
      int determineVoxelsWithinVolumeROI(const VolumeFile* volume,
                                      const float minValue,
                                      const float maxValue,
                                      std::vector<int>& voxelInROI) const;
                                      
      // create the report
      QString createReport(const VolumeFile* operatingVolume,
                        const QString& description,
                        const QString& operationText,
                        const int totalNumberOfVoxels,
                        const int numVoxelsInROI) const;
                        
      // create the report
      QString createReport(const std::vector<VolumeFile*> operatingVolumes,
                        const QString& description,
                        const QString& operationText,
                        const int totalNumberOfVoxels,
                        const int numVoxelsInROI) const;
                        
      /// the brain set using this ROI 
      BrainSet* brainSet;
      
      /// the volume containing the region of interest
      VolumeFile* roiVolume;
      
      /// display the volume ROI
      bool displayVolumeROI;
      
      /// text containing information about the ROI selection
      QString reportROIVolumeInfoText;
};
#endif // __BRAIN_MODEL_VOLUME_REGION_OF_INTEREST_H__