00001
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef eman_boxingtools_h__
00037 #define eman_boxingtools_h__ 1
00038
00039 #include "emdata.h"
00040 #include "geometry.h"
00041 #include <vector>
00042 using std::vector;
00043
00044 #include <vector>
00045 using std::vector;
00046
00047 #include <map>
00048 using std::map;
00049
00050 #include <gsl/gsl_matrix.h>
00051
00052 namespace EMAN
00053 {
00060 class BoxingTools
00061 {
00062 public:
00063 BoxingTools() {}
00064 ~BoxingTools() {}
00065
00076 static vector<float> get_min_delta_profile(const EMData* const image, int x, int y, int radius);
00077
00089 static bool is_local_maximum(const EMData* const image, int x, int y, int radius, EMData* const exclusion_map);
00090
00091
00092 static vector<IntPoint> auto_correlation_pick(const EMData* const image, float threshold, int radius, const vector<float>& profile, EMData* const exclusion,const int cradius, int mode=1);
00093
00094 static bool hi_brid(const EMData* const image, int x, int y, int radius,EMData* const exclusion_map, vector<float>& profile);
00095
00096 static void set_radial_non_zero(EMData* const exclusion, int x, int y, int radius);
00097
00098 static IntPoint find_radial_max(const EMData* const map, int x, int y, int radius);
00099
00100 static map<unsigned int, unsigned int> classify(const vector<vector<float> >& data, const unsigned int& classes = 4);
00101
00102 static Vec3f get_color( const unsigned int index );
00103
00104 static void set_region( EMData* const image, const EMData* const mask, const int x, const int y, const float& val );
00105
00106 enum CmpMode {
00107 SWARM_DIFFERENCE,
00108 SWARM_RATIO,
00109 SWARM_AVERAGE_RATIO
00110 };
00111
00112 static void set_mode( const CmpMode m ) { mode = m; }
00113 private:
00114
00115
00116 static vector<Vec3f> colors;
00117 static CmpMode mode;
00118 };
00119
00120 class BoxSVDClassifier
00121 {
00122 public:
00123 BoxSVDClassifier(const vector<vector<float> >& data, const unsigned int& classes = 4);
00124
00125 ~BoxSVDClassifier();
00126
00127 map< unsigned int, unsigned int> go();
00128
00129
00130
00131
00132 static map< unsigned int, unsigned int> colorMappingByClassSize( const map< unsigned int, unsigned int>& grouping );
00133 private:
00134 const vector<vector<float> >& mData;
00135
00136 unsigned int mColumns;
00137 unsigned int mRows;
00138
00139 unsigned int mClasses;
00140
00141
00142 map< unsigned int, unsigned int> randomSeedCluster(const gsl_matrix* const svd_coords, unsigned int matrix_dims);
00143 map< unsigned int, unsigned int> getIterativeCluster(const gsl_matrix* const svd_coords, const map< unsigned int, unsigned int>& current_grouping);
00144
00145 bool setDims( const vector<vector<float> >& data );
00146
00147 vector<vector<float> > getDistances( const gsl_matrix* const svd_coords, const gsl_matrix* const ref_coords);
00148
00149 map< unsigned int, unsigned int> getMapping(const vector<vector<float> >& distances);
00150 };
00151
00152 }
00153
00154 #endif // eman_boxingtools_h__