//求救!我用经典K均值算法对128维SIFT特征进行聚类时,程序显示无错误,但无法正常进行聚类,程序如下:
//其中我直接将15个128维的SIFT特征描述子放置数组table[][]中,然后存入样本向量m_pattern[][]处理。
#include
#include
#include
#include
#include
#include
typedef struct t_Pattern //样本结构
{
int index; //样本标号
int category; //样本或模板所属类别
double distance; //样品到类中心的距离
double feature[128]; //特征值
}Pattern;
typedef struct t_Center //聚类中心结构
{
int index; //中心编号
double patternnum; //该聚类中心包含的样品数目
double feature[128]; //特征值
}Center;
int patternnum; //样本总数
int centernum; //聚类中心数目
Pattern m_pattern[100]; //样本的数组,预先分配100个样本............
Center m_center[20]; //中心的数组,预先分配10个类..............
double table[15][128]=
{
0.000000, 0.000000, 0.001478, 0.018695, 0.138579, 0.297543, 0.105189, 0.000000, 0.000000, 0.000000, 0.014373, 0.087571, 0.092345, 0.167401, 0.096968, 0.000000, 0.000000, 0.000000, 0.031615, 0.036413, 0.019213, 0.293065, 0.207572, 0.000000, 0.000000, 0.000000, 0.060914, 0.095218, 0.000149, 0.044252, 0.132372, 0.000000, 0.000000, 0.000000, 0.001317, 0.140238, 0.297543, 0.252350, 0.001430, 0.000000, 0.000000, 0.000000, 0.019795, 0.297543, 0.297543, 0.080570, 0.072606, 0.000000, 0.000000, 0.000000, 0.001861, 0.089898, 0.219401, 0.269441, 0.123993, 0.000000, 0.000000, 0.000000, 0.001571, 0.005246, 0.070508, 0.189416, 0.080245, 0.000000, 0.000000, 0.000000, 0.000000, 0.024085, 0.228820, 0.026209, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.082186, 0.187255, 0.000832, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.014648, 0.098495, 0.026186, 0.000344, 0.000000, 0.000000, 0.000000, 0.000000, 0.000374, 0.027496, 0.060621, 0.000231, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
0.011114, 0.000000, 0.000000, 0.000000, 0.057159, 0.312867, 0.172352, 0.000000, 0.113052, 0.000000, 0.000000, 0.000000, 0.062670, 0.141100, 0.159076, 0.000000, 0.125271, 0.000000, 0.000000, 0.003224, 0.120338, 0.011771, 0.103333, 0.000000, 0.045079, 0.000000, 0.000000, 0.005143, 0.312867, 0.116800, 0.000000, 0.000000, 0.029330, 0.000000, 0.000000, 0.002469, 0.297371, 0.312867, 0.098591, 0.000000, 0.142157, 0.000000, 0.000000, 0.002728, 0.085394, 0.084272, 0.146158, 0.000000, 0.108129, 0.000000, 0.000000, 0.002554, 0.312867, 0.161761, 0.064168, 0.000000, 0.011909, 0.000000, 0.000000, 0.000403, 0.312867, 0.284437, 0.000000, 0.000000, 0.011472, 0.000000, 0.000000, 0.001480, 0.114975, 0.022356, 0.000000, 0.000000, 0.061577, 0.000000, 0.000000, 0.001627, 0.036668, 0.002416, 0.000119, 0.000000, 0.014162, 0.000000, 0.000000, 0.001247, 0.159573, 0.049683, 0.000013, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.173631, 0.059612, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
0.006479, 0.000000, 0.000000, 0.000000, 0.275748, 0.275748, 0.023971, 0.000000, 0.049130, 0.000000, 0.000000, 0.000260, 0.275748, 0.275748, 0.016080, 0.000000, 0.275748, 0.000000, 0.000000, 0.002052, 0.271480, 0.098017, 0.034208, 0.000000, 0.275748, 0.000000, 0.000000, 0.000203, 0.027433, 0.004663, 0.028255, 0.000000, 0.032164, 0.000000, 0.000000, 0.000000, 0.114724, 0.123388, 0.041318, 0.000000, 0.084534, 0.000000, 0.000000, 0.000133, 0.275748, 0.264620, 0.040774, 0.000000, 0.275748, 0.000000, 0.000000, 0.001615, 0.275748, 0.080423, 0.022893, 0.000000, 0.275748, 0.000000, 0.000000, 0.000339, 0.105703, 0.013523, 0.008677, 0.000000, 0.003580, 0.000000, 0.000000, 0.000000, 0.003670, 0.005181, 0.004261, 0.000000, 0.044855, 0.000000, 0.000000, 0.000000, 0.000803, 0.010285, 0.006172, 0.000000, 0.116607, 0.000000, 0.000000, 0.000000, 0.000000, 0.000696, 0.003079, 0.000000, 0.077098, 0.000000, 0.000000, 0.000000, 0.010670, 0.002608, 0.001305, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
0.000000, 0.000000, 0.000000, 0.006195, 0.293956, 0.203181, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.034950, 0.293956, 0.202323, 0.000000, 0.000000, 0.000000, 0.000000, 0.030797, 0.160872, 0.293956, 0.066715, 0.017109, 0.000000, 0.000000, 0.000000, 0.172640, 0.143538, 0.038649, 0.035664, 0.038184, 0.000000, 0.000000, 0.000000, 0.000000, 0.016890, 0.293956, 0.260487, 0.000000, 0.000000, 0.000000, 0.000000, 0.002213, 0.092851, 0.293956, 0.293956, 0.000000, 0.000000, 0.000000, 0.000210, 0.096691, 0.293956, 0.293956, 0.008312, 0.000446, 0.000000, 0.000000, 0.001459, 0.107798, 0.145515, 0.041264, 0.040401, 0.046522, 0.000000, 0.000000, 0.000000, 0.000000, 0.001899, 0.048830, 0.039584, 0.000000, 0.000000, 0.000000, 0.000000, 0.000898, 0.011113, 0.038551, 0.051935, 0.000000, 0.000000, 0.000000, 0.000084, 0.044847, 0.051774, 0.009425, 0.001498, 0.000000, 0.000000, 0.000000, 0.000841, 0.036782, 0.012501, 0.001094, 0.001743, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
0.015103, 0.149081, 0.056837, 0.003130, 0.079431, 0.026826, 0.000000, 0.000000, 0.090834, 0.298709, 0.086926, 0.000000, 0.020912, 0.019542, 0.000000, 0.000000, 0.072515, 0.213011, 0.002622, 0.003111, 0.298709, 0.249893, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.011256, 0.298709, 0.103709, 0.000000, 0.000000, 0.000971, 0.065453, 0.186950, 0.146670, 0.033806, 0.002472, 0.000000, 0.000000, 0.022928, 0.298709, 0.298709, 0.097675, 0.052017, 0.019229, 0.000000, 0.000000, 0.042135, 0.162491, 0.016029, 0.136000, 0.298709, 0.113076, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.216417, 0.298709, 0.011875, 0.000000, 0.000000, 0.000000, 0.000000, 0.003660, 0.047887, 0.014998, 0.000000, 0.000000, 0.000000, 0.000000, 0.007331, 0.029890, 0.040663, 0.005875, 0.000000, 0.000000, 0.000000, 0.000796, 0.004268, 0.001136, 0.045108, 0.075995, 0.003645, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.058236, 0.062865, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
0.012101, 0.000000, 0.000000, 0.002210, 0.237052, 0.196940, 0.006296, 0.000000, 0.267750, 0.000000, 0.000000, 0.024923, 0.288121, 0.080369, 0.000050, 0.000000, 0.288121, 0.000000, 0.000000, 0.006856, 0.067859, 0.000518, 0.001542, 0.000000, 0.264672, 0.000000, 0.000000, 0.000623, 0.028561, 0.002637, 0.006459, 0.000000, 0.000000, 0.000000, 0.000000, 0.000008, 0.112409, 0.288121, 0.275381, 0.000000, 0.094172, 0.000000, 0.000000, 0.012037, 0.288121, 0.288121, 0.118569, 0.000000, 0.288121, 0.000000, 0.000000, 0.006313, 0.128273, 0.047308, 0.185033, 0.000000, 0.066795, 0.000000, 0.000000, 0.000000, 0.000143, 0.059218, 0.226946, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000056, 0.034369, 0.102251, 0.000000, 0.002229, 0.000000, 0.000000, 0.000000, 0.010759, 0.064013, 0.059874, 0.000000, 0.002704, 0.000000, 0.000000, 0.000000, 0.002399, 0.020565, 0.067530, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000085, 0.035119, 0.052478, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
0.031076, 0.000000, 0.000000, 0.061918, 0.304867, 0.022727, 0.016577, 0.000000, 0.088152, 0.000000, 0.000000, 0.163414, 0.324761, 0.001875, 0.001223, 0.000000, 0.183948, 0.000000, 0.000000, 0.045094, 0.132226, 0.011027, 0.114634, 0.000000, 0.011333, 0.000000, 0.000000, 0.000108, 0.003479, 0.111896, 0.171431, 0.000000, 0.020272, 0.000000, 0.000000, 0.037489, 0.324761, 0.112579, 0.000445, 0.000000, 0.104688, 0.000000, 0.000000, 0.081284, 0.324761, 0.125544, 0.023769, 0.000000, 0.086699, 0.000000, 0.000000, 0.007780, 0.043093, 0.324761, 0.324761, 0.000000, 0.000125, 0.000000, 0.000000, 0.000000, 0.065951, 0.324761, 0.145248, 0.000000, 0.000000, 0.000000, 0.000000, 0.000093, 0.075148, 0.040769, 0.000000, 0.000000, 0.003228, 0.000000, 0.000000, 0.000369, 0.047258, 0.046116, 0.003109, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.003525, 0.130587, 0.020143, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.021696, 0.112267, 0.000476, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
0.000000, 0.000000, 0.006404, 0.087348, 0.054256, 0.055617, 0.230117, 0.000000, 0.000000, 0.000000, 0.007164, 0.033565, 0.000631, 0.224884, 0.271951, 0.000000, 0.000000, 0.000000, 0.000000, 0.000048, 0.029124, 0.271951, 0.271951, 0.000000, 0.000000, 0.000000, 0.000000, 0.000122, 0.105675, 0.271951, 0.041678, 0.000000, 0.000000, 0.000000, 0.008548, 0.240623, 0.271951, 0.015030, 0.024680, 0.000000, 0.000000, 0.000000, 0.017297, 0.271951, 0.197234, 0.045909, 0.264307, 0.000000, 0.000000, 0.000000, 0.000000, 0.062669, 0.181516, 0.271951, 0.150042, 0.000000, 0.000000, 0.000000, 0.000000, 0.056920, 0.271951, 0.117040, 0.000224, 0.000000, 0.000000, 0.000000, 0.000000, 0.017121, 0.133155, 0.005471, 0.000000, 0.000000, 0.000000, 0.000000, 0.000359, 0.064961, 0.065828, 0.000000, 0.000743, 0.000000, 0.000000, 0.000000, 0.000000, 0.023080, 0.022812, 0.006511, 0.004268, 0.000000, 0.000000, 0.000000, 0.000000, 0.024161, 0.039619, 0.000566, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
0.000000, 0.000000, 0.009328, 0.039517, 0.076076, 0.288357, 0.236892, 0.000000, 0.000000, 0.000000, 0.014250, 0.091747, 0.318058, 0.118403, 0.114596, 0.000000, 0.000000, 0.000000, 0.015101, 0.117092, 0.318058, 0.017261, 0.018200, 0.000000, 0.000000, 0.000000, 0.009171, 0.152293, 0.318058, 0.000011, 0.000000, 0.000000, 0.000000, 0.000000, 0.015003, 0.027151, 0.120991, 0.168515, 0.034496, 0.000000, 0.000000, 0.000000, 0.001707, 0.008413, 0.318058, 0.247432, 0.009030, 0.000000, 0.000000, 0.000000, 0.000000, 0.099070, 0.318058, 0.040121, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.193163, 0.318058, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.007764, 0.007390, 0.000239, 0.010234, 0.007192, 0.000000, 0.000000, 0.000000, 0.000168, 0.001511, 0.030704, 0.025069, 0.005004, 0.000000, 0.000000, 0.000000, 0.000000, 0.024838, 0.086983, 0.001592, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.034452, 0.078538, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
0.030437, 0.037123, 0.002925, 0.009998, 0.287762, 0.065462, 0.000000, 0.000000, 0.015423, 0.034181, 0.027903, 0.059793, 0.287762, 0.038965, 0.000000, 0.000000, 0.106790, 0.148111, 0.102385, 0.060912, 0.213854, 0.039985, 0.000000, 0.000000, 0.029209, 0.212614, 0.287762, 0.013029, 0.009599, 0.000327, 0.000000, 0.000000, 0.020584, 0.028307, 0.001620, 0.010881, 0.287762, 0.207131, 0.000000, 0.000000, 0.077613, 0.067615, 0.005961, 0.020062, 0.287762, 0.121640, 0.000000, 0.000000, 0.190019, 0.212157, 0.052800, 0.022960, 0.287762, 0.078616, 0.000000, 0.000000, 0.053103, 0.190591, 0.248975, 0.084492, 0.064598, 0.005242, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.212071, 0.060157, 0.000000, 0.000000, 0.002909, 0.005584, 0.001401, 0.000764, 0.149788, 0.030161, 0.000000, 0.000000, 0.006324, 0.026273, 0.024373, 0.002502, 0.020602, 0.002375, 0.000000, 0.000000, 0.005403, 0.012049, 0.009565, 0.013885, 0.025112, 0.000560, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
0.000109, 0.000000, 0.000000, 0.000000, 0.003788, 0.190562, 0.187268, 0.000000, 0.004468, 0.000000, 0.000000, 0.001066, 0.006466, 0.039498, 0.321777, 0.000000, 0.121747, 0.000000, 0.000000, 0.018260, 0.099077, 0.003743, 0.155939, 0.000000, 0.321777, 0.000000, 0.000000, 0.007004, 0.031481, 0.000102, 0.005472, 0.000000, 0.000194, 0.000000, 0.000000, 0.000000, 0.005521, 0.092193, 0.321777, 0.000000, 0.019241, 0.000000, 0.000000, 0.005942, 0.206049, 0.083826, 0.167368, 0.000000, 0.084698, 0.000000, 0.000000, 0.055272, 0.321777, 0.186879, 0.020108, 0.000000, 0.321777, 0.000000, 0.000000, 0.138992, 0.321777, 0.032880, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.001273, 0.029015, 0.030178, 0.000000, 0.001765, 0.000000, 0.000000, 0.000591, 0.070801, 0.027187, 0.005007, 0.000000, 0.000000, 0.000000, 0.000000, 0.000718, 0.200207, 0.069334, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.030792, 0.222273, 0.014087, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
0.000000, 0.000000, 0.000000, 0.008583, 0.220748, 0.157737, 0.010810, 0.000000, 0.000528, 0.000000, 0.000000, 0.000441, 0.050602, 0.305019, 0.252781, 0.000000, 0.004927, 0.000000, 0.000000, 0.000455, 0.018792, 0.131822, 0.305019, 0.000000, 0.039349, 0.000000, 0.000000, 0.033141, 0.227633, 0.026389, 0.138028, 0.000000, 0.008711, 0.000000, 0.000000, 0.008004, 0.138197, 0.230398, 0.024184, 0.000000, 0.010993, 0.000000, 0.000000, 0.012782, 0.112381, 0.203259, 0.226808, 0.000000, 0.004612, 0.000000, 0.000000, 0.037142, 0.305019, 0.265682, 0.195780, 0.000000, 0.015749, 0.000000, 0.000000, 0.087154, 0.305019, 0.086009, 0.007954, 0.000000, 0.001339, 0.000000, 0.000000, 0.002232, 0.010777, 0.046102, 0.007969, 0.000000, 0.001485, 0.000000, 0.000000, 0.005523, 0.037624, 0.024684, 0.002008, 0.000000, 0.000018, 0.000000, 0.000000, 0.011107, 0.173688, 0.043913, 0.000075, 0.000000, 0.000000, 0.000000, 0.000000, 0.028517, 0.232233, 0.009514, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
0.000000, 0.000000, 0.032635, 0.314046, 0.249443, 0.000399, 0.000205, 0.000000, 0.000000, 0.000000, 0.052636, 0.279980, 0.314046, 0.015408, 0.000000, 0.000000, 0.000000, 0.000000, 0.025258, 0.105991, 0.314046, 0.078345, 0.000000, 0.000000, 0.000000, 0.000000, 0.000969, 0.018419, 0.262296, 0.103533, 0.000000, 0.000000, 0.000000, 0.000000, 0.057422, 0.194496, 0.161980, 0.074194, 0.160153, 0.000000, 0.000000, 0.000000, 0.001722, 0.072801, 0.314046, 0.094073, 0.018651, 0.000000, 0.000000, 0.000000, 0.000000, 0.084116, 0.314046, 0.124149, 0.000450, 0.000000, 0.000000, 0.000000, 0.001955, 0.089335, 0.314046, 0.092916, 0.000000, 0.000000, 0.000000, 0.000000, 0.010968, 0.007804, 0.006316, 0.030492, 0.047996, 0.000000, 0.000000, 0.000000, 0.000000, 0.012899, 0.028137, 0.022939, 0.002786, 0.000000, 0.000000, 0.000000, 0.000000, 0.046598, 0.060336, 0.000281, 0.000000, 0.000000, 0.000000, 0.000000, 0.001183, 0.042347, 0.031934, 0.000303, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
0.000000, 0.000000, 0.156926, 0.305359, 0.061099, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.073754, 0.305359, 0.051044, 0.000014, 0.000000, 0.000000, 0.008339, 0.064822, 0.101130, 0.130501, 0.076619, 0.004173, 0.000000, 0.000000, 0.001879, 0.076070, 0.305359, 0.008306, 0.003151, 0.000593, 0.000000, 0.000000, 0.000000, 0.000000, 0.005971, 0.305359, 0.305359, 0.000000, 0.000000, 0.000000, 0.001283, 0.008025, 0.003623, 0.305359, 0.305359, 0.009037, 0.000000, 0.000000, 0.010597, 0.087491, 0.235284, 0.094531, 0.135366, 0.012182, 0.000000, 0.000000, 0.000192, 0.018543, 0.305359, 0.130719, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.014957, 0.166354, 0.000000, 0.000000, 0.000000, 0.000386, 0.001664, 0.000061, 0.015077, 0.174168, 0.003800, 0.000000, 0.000000, 0.002949, 0.022200, 0.032920, 0.008067, 0.029050, 0.005845, 0.000000, 0.000000, 0.000000, 0.000038, 0.063465, 0.034116, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
0.000334, 0.000000, 0.000000, 0.000000, 0.080513, 0.289289, 0.289289, 0.000000, 0.175067, 0.000000, 0.000000, 0.000000, 0.003114, 0.029182, 0.289289, 0.000000, 0.289289, 0.000000, 0.000000, 0.000000, 0.047115, 0.027688, 0.033889, 0.000000, 0.289289, 0.000000, 0.000000, 0.000000, 0.037902, 0.033396, 0.007102, 0.000000, 0.025605, 0.000000, 0.000000, 0.000000, 0.054310, 0.094903, 0.253213, 0.000000, 0.155462, 0.000000, 0.000000, 0.000000, 0.018199, 0.027176, 0.289289, 0.000000, 0.137075, 0.000000, 0.000000, 0.000000, 0.289289, 0.198834, 0.053872, 0.000000, 0.025466, 0.000000, 0.000000, 0.000000, 0.289289, 0.231039, 0.010728, 0.000000, 0.012720, 0.000000, 0.000000, 0.000000, 0.000000, 0.016820, 0.016281, 0.000000, 0.077431, 0.000000, 0.000000, 0.000000, 0.007049, 0.001388, 0.013087, 0.000000, 0.057718, 0.000000, 0.000000, 0.000000, 0.156483, 0.043689, 0.000315, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.173142, 0.042398, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000
};
void Init();
double GetDistance(Pattern pattern,Center center);
void CalCenter(Center &pcenter);
int kmeans(int patternnum,int centernum);
void main()
{
int i,j;
Init();
patternnum=15;
centernum=5;
kmeans(15,3);
for (i=0;i
printf("/n第个%d类中的sift特征点个数为:%d/n/n",i,m_center[i].patternnum);
}
}
void Init()
{
int i,j;
for (i=0;i<15;i++)
{
for (j=0;j<128;j++)
{
m_pattern[i].feature[j] = table[i][j];
}
}
}
//计算样品和聚类中心间的距离
double GetDistance(Pattern pattern,Center center)
{
double result=0.00000;
for(int i=0;i<128;i++)
{
result += (pattern.feature[i] - center.feature[i]) * (pattern.feature[i] - center.feature[i]);
}
return (double)sqrt(result);
}
// 计算中心pcenter的特征值(本类所有样品的均值)及样品个数
void CalCenter(Center &pcenter)
{
double temp[128]; //临时存储中心的特征值
int a=0; //记录该类中元素个数
int i,j;
for(i=0;i<128;i++) //中心清空
temp[i]=0.00000;
for (i=0;i
if (m_pattern[i].category == pcenter.index) //累加中心所有样品
{
a++;
for (j=0;j<128;j++) //维数
{
temp[j] += m_pattern[i].feature[j];
}
}
}
pcenter.patternnum=a; //该类中元素个数.........................
for (i=0;i<128;i++) //维数
{
if (a!=0)
{
pcenter.feature[i] = (double)(temp[i]/(double)a); //取均值
}
else
{
pcenter.feature[i] = temp[i];
}
}
}
int kmeans(int patternnum,int centernum)
{
bool change = true; //退出标志,false时表示样品所属类别不再变化,中止计算
int i,j;
int counter = 0; //记录当前已经循环的次数
int times = 500; //循环次数,作比较...............
double distance = 0.9870; //到各中心的距离.................
for (i=0;i
m_pattern[i].distance=0.9870; //最大距离..................
}
//初始化,前centernum个模版各自分为一类
for (i=0;i
m_pattern[i].category = i+1;
m_pattern[i].distance = 0;
for (j=0;j<128;j++) //维数
m_center[i].feature[j] = m_pattern[i].feature[j];
m_center[i].index = i+1;
}
//主循环,开始聚类
while (change && counter
printf("/nenter main cycle:/n");
counter++; //循环次数
change=false;
for (int i=0;i
//计算第i个模式到各个聚类中心的最小距离
int index=1;
distance=0.9870;
for (int j=0;j
{
distance=GetDistance(m_pattern[i],m_center[j]);
index=j; //找到最小距离,是到第index个聚类中心的距离
}
//比较原中心号与新中心号
//相同:更新距离。
//不同:1,新距离小,则归入新中心,更新距离,重新计算前后两个聚类中心模式
// 2,新距离大于原距离,不处理;
if (m_pattern[i].category == m_center[index].index) //属于原类
{
m_pattern[i].distance=distance;
}
else //不属于原类
{
int t_center=m_pattern[i].category; //记录原类号
m_pattern[i].category=m_center[index].index;//归入新类
m_pattern[i].distance=distance;
if (t_center!=0)
{
for (int k=0;k
if(m_center[k].index == t_center)
CalCenter(m_center[k]);//计算原属类中心
}
}
CalCenter(m_center[index]); //计算新属类中心
change=true;
}
}//end for i
}//end for while
free(m_center);
return 1;
}