code2

来源:互联网 发布:股市数据怎么看 编辑:程序博客网 时间:2024/05/02 00:39
// msImageProcessor.h: interface for the msImageProcessor class.////////////////////////////////////////////////////////////////////////#if !defined(AFX_MSIMAGEPROCESSOR_H__55169B04_4FDC_4B19_8920_006B81E67ECA__INCLUDED_)#define AFX_MSIMAGEPROCESSOR_H__55169B04_4FDC_4B19_8920_006B81E67ECA__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#include "MeanShift.h"//include prototypes of additional strucuters//used for image segmentation...//include region list used to store boundary pixel//indeces for each region#include"RegionList.h"//include region adjacency list class used for//region pruning and transitive closure#include"RAList.h"//define constants//image pruning#defineTOTAL_ITERATIONS14#define BIG_NUM0xffffffff//BIG_NUM = 2^32-1#define NODE_MULTIPLE10//data space conversion...const double Xn= 0.95050;const double Yn= 1.00000;const double Zn= 1.08870;//const double Un_prime= 0.19780;//const double Vn_prime= 0.46830;const double Un_prime= 0.19784977571475;const double Vn_prime= 0.46834507665248;const double Lt= 0.008856;//RGB to LUV conversionconst double XYZ[3][3] = {{  0.4125,  0.3576,  0.1804 },{  0.2125,  0.7154,  0.0721 },{  0.0193,  0.1192,  0.9502 }};//LUV to RGB conversionconst double RGB[3][3] = {{  3.2405, -1.5371, -0.4985 },{ -0.9693,  1.8760,  0.0416 },{  0.0556, -0.2040,  1.0573 }};//define data typestypedef unsigned char byte;//define enumerationsenum imageType {GRAYSCALE, COLOR};//define prototypeclass msImageProcessor: public MeanShift {public:  /*/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/  /* Class Constructor and Destructor */  /*\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/*/  msImageProcessor( void );        //Default Constructor ~msImageProcessor( void );        //Class Destructor /*/\/\/\/\/\/\/\/\/\/\/\/\/\*/ /* Input Image Declaration  */ /*\/\/\/\/\/\/\/\/\/\/\/\/\/*/  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  //<--------------------------------------------------->|//  //|                                                    |//  //|Method Name:     |//  //|   ============     |//  //|  * Define Image *                   |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Description:     |//  //|============     |//  //|                                                    |//  //|   Uploads an image to be segmented by the image    |//  //|   segmenter class.                                 |//  //|                                                    |//  //|   An image is defined by specifying the folloing:  |//  //|                                                    |//  //|   <* data *>                                       |//  //|   A one dimensional unsigned char array of RGB     |//  //|   vectors.                                         |//  //|                                                    |//  //|   <* type *>                                       |//  //|   Specifies the image type: COLOR or GREYSCALE.    |//  //|                                                    |//  //|   <* height *>                                     |//  //|   The image height.                                |//  //|                                                    |//  //|   <* width *>                                      |//  //|   The image width.                                 |//  //|                                                    |//  //|   This method uploads the image and converts its   |//  //|   data into the LUV space. If another conversion   |//  //|   is desired data may be uploaded into this class  |//  //|   via the procedure MeanShift::UploadInput().      |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Usage:           |//  //|   ======           |//  //|DefineImage(data, type, height, width)       |//  //|                                                    |//  //<--------------------------------------------------->|//  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  void DefineImage(byte*,imageType, int, int);  void DefineBgImage(byte*, imageType , int , int ); /*/\/\/\/\/\/\*/ /* Weight Map */ /*\/\/\/\/\/\/*/  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  //<--------------------------------------------------->|//  //|                                                    |//  //|Method Name:     |//  //|   ============     |//  //|     * Set Weight Map *                  |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Description:     |//  //|============     |//  //|                                                    |//  //|   Uploads weight map specifying for each pixel     |//  //|   in the image a value between 0 and 1 - 1 indica- |//  //|   ting the presence of an edge and 0 the absense   |//  //|   of an edge.                                      |//  //|                                                    |//  //|   The arguments to this method are:                |//  //|                                                    |//  //|   <* weightMap *>                                  |//  //|   A floating point array of size (height x width)  |//  //|   specifying at location (i,j) the edge strength   |//  //|   of pixel (i,j). (e.g. pixel (i,j) has an edge    |//  //|   strength of weightMap[j*width+i]).               |//  //|                                                    |//  //|   <* epsilon *>                                    |//  //|   A floating point number specifying the threshold |//  //|   used to fuse regions during transitive closure.  |//  //|                                                    |//  //|   Note: DefineImage must be called prior to call-  |//  //|         ing this method. DefineImage is used to    |//  //|         define the dimensions of the image.        |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Usage:           |//  //|   ======           |//  //|SetWeightMap(weightMap, epsilon)             |//  //|                                                    |//  //<--------------------------------------------------->|//  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  void SetWeightMap(float*, float);  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  //<--------------------------------------------------->|//  //|                                                    |//  //|Method Name:     |//  //|   ============     |//  //|   * Remove Weight Map *                 |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Description:     |//  //|============     |//  //|                                                    |//  //|   Removes weight map. An error is NOT flagged      |//  //|   if a weight map was not defined prior to calling |//  //|   this method.                                     |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Usage:           |//  //|   ======           |//  //|RemoveWeightMap(void)                        |//  //|                                                    |//  //<--------------------------------------------------->|//  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  void RemoveWeightMap(void); /*/\/\/\/\/\/\/\/\/\*/ /* Image Filtering  */ /*\/\/\/\/\/\/\/\/\/*/  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  //<--------------------------------------------------->|//  //|                                                    |//  //|Method Name:     |//  //|   ============     |//  //|                   *  Filter  *                     |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Description:     |//  //|============     |//  //|                                                    |//  //|   Apply mean shift filter to the defined image,    |//  //|   defined either via MeanShift::DefineLInput or    |//  //|   msImageProcessor::DefineImage. The resulting     |//  //|   segmented image is stored in the private data    |//  //|   members of the image segmenter class which can   |//  //|   be obtained by calling image msImageProcessor::  |//  //|   GetResults().                                    |//  //|                                                    |//  //|   The arguments to this method are:                |//  //|                                                    |//  //|   <* sigmaS *>                                     |//  //|   The spatial radius of the mean shift window.     |//  //|                                                    |//  //|   <* sigmaR *>                                     |//  //|   The range radius of the mean shift window.       |//  //|                                                    |//  //|   <* speedUpLevel *>                               |//  //|   Determines if a speed up optimization should be  |//  //|   used to perform image filtering. A value of      |//  //|   NO_SPEEDUP turns this optimization off and a     |//  //|   value of SPEEDUP turns this optimization on.     |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Usage:           |//  //|   ======           |//  //|Filter(sigmaS, sigmaR, speedUpLevel)         |//  //|                                                    |//  //<--------------------------------------------------->|//  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  void Filter(int, float, SpeedUpLevel); /*/\/\/\/\/\/\/\/\/\/\/\*/ /* Image Region Fusing  */ /*\/\/\/\/\/\/\/\/\/\/\/*/  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  //<--------------------------------------------------->|//  //|                                                    |//  //|Method Name:     |//  //|   ============     |//  //|  *  Fuse Regions  *                 |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Description:     |//  //|============     |//  //|                                                    |//  //|   Fuses the regions of a filtered image,           |//  //|   defined either via MeanShift::DefineLInput or    |//  //|   msImageProcessor::DefineImage. The resulting     |//  //|   segmented image is stored in the private data    |//  //|   members of the image segmenter class which can   |//  //|   be obtained by calling image msImageProcessor::  |//  //|   GetResults().                                    |//  //|                                                    |//  //|   The arguments to this method are:                |//  //|                                                    |//  //|   <* sigmaR *>                                     |//  //|   The range radius that defines similar color      |//  //|   amongst image regions.                           |//  //|                                                    |//  //|   <* minRegion *>                                  |//  //|   The minimum density a region may have in the     |//  //|   resulting segmented image. All regions have      |//  //|   point density < minRegion are pruned from the    |//  //|   image.                                           |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Usage:           |//  //|   ======           |//  //|FuseRegions(sigmaR, minRegion)               |//  //|                                                    |//  //<--------------------------------------------------->|//  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  void FuseRegions(float, int); /*/\/\/\/\/\/\/\/\/\/\*/ /* Image Segmentation */ /*\/\/\/\/\/\/\/\/\/\/*/  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  //<--------------------------------------------------->|//  //|                                                    |//  //|Method Name:     |//  //|   ============     |//  //|     *  Segment  *                   |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Description:     |//  //|============     |//  //|                                                    |//  //|   Segments the defined image, defined either via   |//  //|   MeanShift::DefineLInput or msImageProcessor::De- |//  //|   fineImage. The resulting segmented image is      |//  //|   stored in the private data members of the image  |//  //|   processor class which can be obtained by calling |//  //|   ImageSegmenter::GetResults().                    |//  //|                                                    |//  //|   The arguments to this method are:                |//  //|                                                    |//  //|   <* sigmaS *>                                     |//  //|   The spatial radius of the mean shift window.     |//  //|                                                    |//  //|   <* sigmaR *>                                     |//  //|   The range radius of the mean shift window.       |//  //|                                                    |//  //|   <* minRegion *>                                  |//  //|   The minimum density a region may have in the     |//  //|   resulting segmented image. All regions have      |//  //|   point density < minRegion are pruned from the    |//  //|   image.                                           |//  //|                                                    |//  //|   <* speedUpLevel *>                               |//  //|   Determines if a speed up optimization should be  |//  //|   used to perform image filtering. A value of      |//  //|   NO_SPEEDUP turns this optimization off and a     |//  //|   value of SPEEDUP turns this optimization on.     |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Usage:           |//  //|   ======           |//  //|Segment(sigmaS, sigmaR, minRegion,           |//  //|                       speedUpLevel)                |//  //|                                                    |//  //<--------------------------------------------------->|//  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//   void Segment(int, float, int, SpeedUpLevel);  /*/\/\/\/\/\/\/\/\/\/\/\/\*/  /* Data Space Conversion  */  /*\/\/\/\/\/\/\/\/\/\/\/\/*/  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  //<--------------------------------------------------->|//  //|                                                    |//  //|Method Name:     |//  //|   ============     |//  //| *  RGB To LUV  *                    |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Description:     |//  //|============     |//  //|                                                    |//  //|   Converts an RGB vector to LUV.                   |//  //|                                                    |//  //|   The arguments to this method are:                |//  //|                                                    |//  //|   <* rgbVal *>                                     |//  //|   An unsigned char array containing the RGB        |//  //|   vector.                                          |//  //|                                                    |//  //|   <* luvVal *>                                     |//  //|   A floating point array containing the LUV        |//  //|   vector.                                          |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Usage:           |//  //|   ======           |//  //|RGBtoLUV(rgbVal, luvVal)                     |//  //|                                                    |//  //<--------------------------------------------------->|//  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  void RGBtoLUV(byte*, float*);  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  //<--------------------------------------------------->|//  //|                                                    |//  //|Method Name:     |//  //|   ============     |//  //| *  LUV To RGB  *                    |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Description:     |//  //|============     |//  //|                                                    |//  //|   Converts an LUV vector to RGB.                   |//  //|                                                    |//  //|   The arguments to this method are:                |//  //|                                                    |//  //|   <* luvVal *>                                     |//  //|   A floating point array containing the LUV        |//  //|   vector.                                          |//  //|                                                    |//  //|   <* rgbVal *>                                     |//  //|   An unsigned char array containing the RGB        |//  //|   vector.                                          |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Usage:           |//  //|   ======           |//  //|LUVtoRGB(luvVal, rgbVal)                     |//  //|                                                    |//  //<--------------------------------------------------->|//  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  void LUVtoRGB(float*, byte*);  /*/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/  /*  Filtered and Segmented Image Output */  /*\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/*/  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  //<--------------------------------------------------->|//  //|                                                    |//  //|Method Name:     |//  //|   ============     |//  //|      *  Get Raw Data  *                 |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Description:     |//  //|============     |//  //|                                                    |//  //|   Returns the resulting filtered or segmented im-  |//  //|   age data after calling Filter() or Segment().    |//  //|                                                    |//  //|   The arguments to this method are:                |//  //|                                                    |//  //|   <* outputImageData *>                            |//  //|   A floating point array containing the vector     |//  //|   data of the filtered or segmented image.         |//  //|                                                    |//  //|   NOTE: If DefineImage was used to specify the     |//  //|         the input to this class, outputImageData   |//  //|         is in the LUV data space.                  |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Usage:           |//  //|   ======           |//  //|GetRawData(outputImageData)                  |//  //|                                                    |//  //<--------------------------------------------------->|//  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  void GetRawData(float*);  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  //<--------------------------------------------------->|//  //|                                                    |//  //|Method Name:     |//  //|   ============     |//  //| *  Get Results  *                   |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Description:     |//  //|============     |//  //|                                                    |//  //|   Returns the resulting filtered or segmented im-  |//  //|   age after calling Filter() or Segment().         |//  //|                                                    |//  //|   The arguments to this method are:                |//  //|                                                    |//  //|   <* outputImage *>                                |//  //|   An unsigned char array containing the RGB        |//  //|   vector data of the output image.                 |//  //|                                                    |//  //|   To obtain the un-converted (LUV) data space      |//  //|   output one may use                               |//  //|   msImageProcessor::GetRawData().                  |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Usage:           |//  //|   ======           |//  //|GetResults(outputImage)                      |//  //|                                                    |//  //<--------------------------------------------------->|//  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  void GetResults(byte*);  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  //<--------------------------------------------------->|//  //|                                                    |//  //|Method Name:     |//  //|   ============     |//  //| *  Get Boundaries  *                |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Description:     |//  //|============     |//  //|                                                    |//  //|   Returns the boundaries of each region of the     |//  //|   segmented image using a region list object,      |//  //|   available after filtering or segmenting the      |//  //|   defined image.                                   |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Usage:           |//  //|   ======           |//  //|regionList = GetBoundaries()                 |//  //|                                                    |//  //<--------------------------------------------------->|//  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  RegionList *GetBoundaries( void );  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  //<--------------------------------------------------->|//  //|                                                    |//  //|Method Name:     |//  //|   ============     |//  //|        * Get Regions *                  |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Description:     |//  //|============     |//  //|                                                    |//  //|   Returns the regions of the processed image.      |//  //|   Each region in the image is uniquely character-  |//  //|   ized by its location and color (e.g. RGB).       |//  //|   GetRegions() therefore returns the following     |//  //|   information about the regions of the processed   |//  //|   image:                                           |//  //|                                                    |//  //|   <* regionCount *>                                |//  //|   An integer that specifies the number of regions  |//  //|   contained in the processed image.                |//  //|                                                    |//  //|   <* modes *>                                      |//  //|   A floating point array of length regionCount*N   |//  //|   containing the feature space component of each   |//  //|   region (e.g. LUV), and indexed by region label.  |//  //|                                                    |//  //|   <* labels *>                                     |//  //|   An integer array of length (height*width) which  |//  //|   contains at every pixel location (x,y) a label   |//  //|   relating that pixel to a region whose mode is    |//  //|   specified by modes and whose area is specified   |//  //|   by modePointCounts.                              |//  //|                                                    |//  //|   <* modePointCounts *>                            |//  //|   An integer array of length regionCount and ind-  |//  //|   exed by region label, that specifies the region  |//  //|   area (in pixels) for each segmented image reg-   |//  //|   ion. (e.g. Area of region having label specif-   |//  //|   ified by l, has area modePointCounts[l] (pix-    |//  //|   els).)                                           |//  //|                                                    |//  //|   NOTE: Memory for the above integer and floating  |//  //|         point arrays is allocated inside this      |//  //|         method.                                    |//  //|                                                    |//  //|         Also modes stored by the modes array are   |//  //|         not in the RGB space. Instead if the       |//  //|         method DefineImage was used, these data    |//  //|         points are in the LUV space, and if the    |//  //|         method DefineLInput was used these data    |//  //|         points are in whatever space you specified |//  //|         them to be in when calling DefineLInput.   |//  //|                                                    |//  //<--------------------------------------------------->|//  //|                                                    |//  //|Usage:           |//  //|   ======           |//  //|regionCount = GetRegions(labels, modes       |//  //|                                modePointCounts)    |//  //|                                                    |//  //<--------------------------------------------------->|//  //--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//--\\||//  int GetRegions(int**, float**, int**);  void SetSpeedThreshold(float);private:  //========================  // *** Private Methods ***  //========================/*/\/\/\/\/\/\/\/\/\*//*  Image Filtering *//*\/\/\/\/\/\/\/\/\/*/void NonOptimizedFilter(float, float);// filters the image applying mean shift to each point// Advantage: most accurate// Disadvantage: time expensive   void NewNonOptimizedFilter(float, float);void OptimizedFilter1(float, float);// filters the image using previous mode information// to avoid re-applying mean shift to some data points// Advantage: maintains high level of accuracy,//  large speed up compared to non-optimized//  version// Disadvantage: POSSIBLY not as accurate as non-optimized//  version   void NewOptimizedFilter1(float, float);void OptimizedFilter2(float, float);//filter the image using previous mode information//and window traversals to avoid re-applying mean shift to//some data points// Advantage: huge speed up - maintains accuracy good enough//  for segmentation// Disadvantage: not as accurate as previous filters   void NewOptimizedFilter2(float, float);   /***********************************************华丽的分割线**************************************************//*/\/\/\/\/\/\/\/\/\/\/\*//* Image Classification *//*\/\/\/\/\/\/\/\/\/\/\/*/void Connect( void );// classifies mean shift filtered image regions using// private classification structure of this classvoid Fill(int, int);// used by Connect to perform label each region in the// mean shift filtered image using an eight-connected// fill/*/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*//* Transitive Closure and Image Pruning *//*\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/*/void BuildRAM( void );// build a region adjacency matrix using the region list// objectvoid DestroyRAM( void );// destroy the region adjacency matrix: de-allocate its memory// initialize it for re-usevoid TransitiveClosure( void );// use the RAM to apply transitive closure to the image modesvoid ComputeEdgeStrengths( void );// computes the weights of the weighted graph using the weight// map//Usage: Prune(minRegion)void Prune(int);// use the RAM to prune the image of spurious regions (regions// whose area is less than minRegion pixels, where minRegion is// an argument of this method)/*/\/\/\/\/\/\/\/\/\/\/\/\/\/\*//*  Region Boundary Detection *//*\/\/\/\/\/\/\/\/\/\/\/\/\/\/*/void DefineBoundaries( void );// defines the boundaries of each region using the classified segmented// image storing the resulting boundary locations for each region using// a region list object/***********************************************华丽的分割线**************************************************//*/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*//*  Image Data Searching/Distance Calculation *//*\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/*///Usage: InWindow(modeIndex1, modeIndex2)bool InWindow(int, int);//returns true if the range data of the specified data points//are within the defined search window (defined by kernel//bandwidth h[1])float SqDistance(int, int);// computes the normalized square distance between two modes /*/\/\/\/\/\/\/\/\/\/\*//* Memory Management  *//*\/\/\/\/\/\/\/\/\/\/*/void InitializeOutput( void );//Allocates memory needed by this class to perform image//filtering and segmentationvoid DestroyOutput( void );//De-allocates memory needed by this class to perform image//filtering and segmentation  //=============================  // *** Private Data Members ***  //=============================   //##########################################   //#######    IMAGE CLASSIFICATION   ########   //##########################################/////////Image Boundaries/////////RegionList*regionList;// stores the boundary locations for each region/////////Image Regions////////intregionCount;// stores the number of connected regions contained by the// image/////////8 Connected Neighbors/////////intneigh[8];/////////Index Table/////////////////int*indexTable;//used during fill algorithm/////////LUV_data/////////////////   //int            *LUV_data;           //stores modes in integer format on latticefloat*LUV_data;//stores modes in float format on lattice   float          LUV_treshold;        //in float mode this determines what "close" means between modes   //##########################################   //#######   OUTPUT DATA STORAGE     ########   //##########################################////////Raw Data (1 to 1 correlation with input)////////float*msRawData;// Raw data output of mean shift algorithm// to the location of the data point on the lattice////////Data Modes////////int*labels;// assigns a label to each data point associating it to// a mode in modes (e.g. a data point having label l has// mode modes[l])float*modes;// stores the mode data of the input data set, indexed by labels// 存储模态点int*modePointCounts;// stores for each mode the number of point mapped to that mode,// indexed by labels   //##########################################   //#######  REGION ADJACENCY MATRIX  ########   //##########################################//////////Region Adjacency List/////////RAList*raList;// an array of RAList objects containing an entry for each// region of the image//////////RAMatrix Free List///////////RAList*freeRAList;// a pointer to the head of a region adjacency list object// free listRAList*raPool;// a pool of RAList objects used in the construction of the// RAM   //##############################################   //#######  COMPUTATION OF EDGE STRENGTHS #######   //##############################################//////////Epsilon///////////floatepsilon;//Epsilon used for transitive closure//////Visit Table//////unsigned char*visitTable;//Table used to keep track of which pixels have been//already visited upon computing the boundary edge strengths   //##########################################   //#######       IMAGE PRUNING       ########   //##########################################////////Transitive Closure/////////floatrR2;//defines square range radius used when clustering pixels//together, thus defining image regions   float speedThreshold; // the % of window radius used in new optimized filter 2.};#endif

原创粉丝点击