00001
00002
00003
00004
00005
00006 #if !defined(AFX_LAYOUT_H__41A5307C_A00B_418A_A668_D1C2E20618DF__INCLUDED_)
00007 #define AFX_LAYOUT_H__41A5307C_A00B_418A_A668_D1C2E20618DF__INCLUDED_
00008
00009 #include <string>
00010 #include "../ObjectVector_hm/objcluster.h"
00011 #include "../PageLayoutLib/objectInfoClass.h"
00012
00013 struct rectangle
00014 {
00015 long left;
00016 long top;
00017 long right;
00018 long bottom;
00019
00020 rectangle & operator = (rectangle b)
00021 {
00022 left = b.left;
00023 top = b.top;
00024 right = b.right;
00025 bottom = b.bottom;
00026 return *this;
00027 }
00028
00029
00030 };
00031
00032
00033 class Clayout
00034 {
00035 public:
00036 Clayout & operator = (Clayout & a);
00037
00038 double m_pageheight;
00039 double m_pagewidth;
00040
00041 objvector * m_pObjectList;
00042 int m_nbObjects;
00043
00044 objcluster* m_pClusterList;
00045 int m_nbClusters;
00046
00047
00048 void BoundingBox(objectInfo * obj, int objcount, struct rectangle &r);
00049 void Rotate(CTMatrix<double> &obj);
00050 void ImportObjects(objectInfo *obj, int objcount);
00051
00052
00053
00054 void KmeansObjClustering(Clayout * pLayouts, int nObj, int nDoc, int nCluster, int maxiteration, objvector sigma, bool use_zero_flag = false);
00055
00056
00057
00058 void NormalizeObjects(Clayout * pLayouts, int nDoc, objvector &avg, objvector &sigma);
00059
00060
00061 void Weight_Clusters_against(Clayout * pLayout, double probability_range = 0.5);
00062
00063
00064 void SaveClustersToDisk(string fname, bool saveweights = true);
00065 void LoadClustersFromDisk(string fname);
00066
00067 Clayout();
00068 virtual ~Clayout();
00069 void Reset();
00070
00071 private:
00072 CTArray<int> m_index;
00073
00074
00075
00076
00077
00078 };
00079
00080 #endif // !defined(AFX_LAYOUT_H__41A5307C_A00B_418A_A668_D1C2E20618DF__INCLUDED_)