01: #ifndef __INCLUDE_CLUSTERING_H__
02: #define __INCLUDE_CLUSTERING_H__
03:
04: #include <windows.h>
05: #include "wingui.h"
06: #include "ipcommon.h"
07:
08:
09:
10: #define MAX_PNTS 3000
11: #define MAX_CLSTR 3000
12: #define KC_INITK 100
13: #define KC_MINERR 1.0
14:
15: #define VQ_INITK 100
16: #define VQ_MAXBLK 300
17: #define VQ_BLKSZ 4
18: #define VQ_DIM 16
19: #define CVQ_DIM 48
20: #define VQ_MINERR 5.0
21:
22:
23:
24: enum CLUSTER_DISP_OPTION {
25: CLUT_DCENT=0,
26: CLUT_DALLPOINT=1,
27: CLUT_DALL=2,
28: };
29:
30:
31:
32: typedef struct CLUSTERING_DATA {
33: int num_pnts;
34: int num_clstr;
35: int p_clstr[MAX_PNTS];
36: POINT points[MAX_PNTS];
37: POINT cclstr[MAX_CLSTR];
38: } ClutData;
39:
40:
41:
42: typedef struct COLOR_VECTOR {
43: BYTE d[CVQ_DIM];
44: } C_vector;
45: typedef struct VECTOR_QUANTIZE_DATA {
46: int x_block,y_block;
47: int b_clstr[VQ_MAXBLK][VQ_MAXBLK];
48: BYTE vector[VQ_MAXBLK][VQ_MAXBLK][VQ_DIM];
49: BYTE main_vector[MAX_CLSTR][VQ_DIM];
50: } VQData;
51: typedef struct C_VECTOR_QUANTIZE_DATA {
52: int x_block,y_block;
53: int b_clstr[VQ_MAXBLK][VQ_MAXBLK];
54: C_vector* cv;
55:
56: BYTE main_vector[MAX_CLSTR][CVQ_DIM];
57: } CVQData;
58:
59: int obtain_points_data(LPBYTE inBuf,ClutData& cltd);
60: void shuffle_points_data(ClutData& cltd);
61: double calc_vdistance(int y,int x,int n,VQData& vqd);
62: void obtain_vector_data(LPBYTE inb,VQData& vqd);
63: double calc_c_vdistance(int y,int x,int n,CVQData& vqd);
64: void obtain_c_vector_data(LPBYTE inb,CVQData& vqd);
65:
66:
67:
68:
69: void clustering_NNmethod(LPBYTE inBuf,int clstr_r,int dopt=CLUT_DCENT);
70:
71: void clustering_Tree(LPBYTE inBuf,int clstr_r,int dopt=CLUT_DCENT);
72:
73: void clustering_Kmean(LPBYTE inBuf,int clstr_r,int K_number=KC_INITK,
74: int dopt=CLUT_DCENT);
75:
76:
77:
78: double vector_quantize(LPBYTE inb,int K_number=VQ_INITK);
79: double c_vector_quantize(LPBYTE inb,int K_number);
80:
81: #endif