Halcon学习之高斯混合模型
2015-09-24 21:13
531 查看
void testGaussMixtureModels() { //创建一个高斯混合模型对象 //参数说明: NumDim特征空间的维度数量, NumClasses高斯混合模型的类别数目, NumCenters每个类的中心数目, //CovarType协方差矩阵的类型, Preprocessing用来转化特征向量的预处理类型, NumComponents预处理参数:转化特征的数目, RandSeed产生随机数的种子值,用来初始化高斯混合模型 Hlong NumDim=3, NumClasses=3, NumCenters=1; HString CovarType = "spherical", Preprocessing = "normalization"; Hlong NumComponents = 10, RandSeed = 42; HClassGmm classGmm; classGmm.CreateClassGmm(NumDim, NumClasses, NumCenters, CovarType, Preprocessing, NumComponents, RandSeed); //添加一幅图像到高斯混合模型的训练数据 //参数说明: ClassRegions选择的图像中对象区域, GMMHandle高斯混合模型句柄,Randomize添加的高斯噪声在训练数据中的标准差 HRegion ClassRegions; double Randomize=1.0; HImage fruit("fruit.jpg"); Hlong width, height; fruit.GetImageSize(&width, &height); HWindow fruitWin(0, 0, width, height); fruitWin.DispColor(fruit); fruitWin.SetColor("red");//设置窗口字体颜色 ClassRegions = fruitWin.DrawRegion(); ClassRegions = ClassRegions.ConcatObj(fruitWin.DrawRegion()).ConcatObj(fruitWin.DrawRegion());//选三类图片对象 fruit.AddSamplesImageClassGmm(ClassRegions, classGmm, Randomize);//添加图像中选定的对象到高斯混合模型中 //训练一个高斯混合模型 //参数说明: MaxIter,Threshold终止期望最大的错误相对改变的阈值, ClassPriors指定计算先验类的方法, Regularize放置协方差奇异的正规值,Centers发现每个类中心的数量, Iter每个类执行迭代的数量 Hlong MaxIter=10; double Threshold=0.001; HString ClassPriors = "training"; double Regularize=0.0001; HTuple Centers; HTuple Iter; Centers = classGmm.TrainClassGmm(MaxIter, Threshold, ClassPriors, Regularize, &Iter); //通过一个高斯混合模型对一个图像进行分类 //参数说明:GMMHandle高斯混合模型句柄, RejectionThreshold拒绝分类的阈值 double RejectionThreshold = 0.5; HRegion region=fruit.ClassifyImageClassGmm(classGmm, RejectionThreshold); fruitWin.SetColor("blue"); fruitWin.DispRegion(region); fruitWin.Click(); //高斯混合模型序列化与反序列化 HSerializedItem item = classGmm.SerializeClassGmm(); HClassGmm serialclassGmm; serialclassGmm.DeserializeClassGmm(item); //高斯混合模型写入和读出文件 classGmm.WriteClassGmm("classGmm.ggc"); HClassGmm fileclassGmm; fileclassGmm.ReadClassGmm("classGmm.ggc"); //高斯混合模型样本数据写入和读出文件 classGmm.WriteSamplesClassGmm("classSampleGmm"); HClassGmm filesampleclassGmm; filesampleclassGmm.CreateClassGmm(NumDim, NumClasses, NumCenters, CovarType, Preprocessing, NumComponents, RandSeed);//必须先创建,不然调用出错 filesampleclassGmm.ReadSamplesClassGmm("classSampleGmm"); //获得高斯混合模型中的训练数据 HClassTrainData classTrainData = classGmm.GetClassTrainDataGmm(); //返回高斯混合模型的参数 //参数说明: NumDim特征空间维度数, NumClasses高斯混合模型的分类数, MinCenters每个高斯混合模型类的中心最小数, MaxCenters每个高斯混合模型类的中心最大值, CovarType协方差的类型 Hlong NumDim1,NumClasses1; HTuple MinCenters1, MaxCenters1; HString CovarType1; NumDim1 = classGmm.GetParamsClassGmm(&NumClasses1, &MinCenters1, &MaxCenters1, &CovarType1); cout << "特征空间维度数: " << NumDim1 << " 分类数: " << NumClasses1 <<endl<< " 类的中心最小数: " << (double)MinCenters1 << " 类的中心最大值: " << (double)MaxCenters1 << " 协方差的类型: " << (HString)CovarType1 << endl; //计算预处理高斯混合模型的特征向量的信息内容 //参数说明:Preprocessing用来转换特征向量的预处理类型,InformationCont转换特征向量的相对信息内容,CumInformationCont转换特征向量的累积信息内容 HString Preprocessing1 = "principal_components"; HTuple InformationCont, CumInformationCont; InformationCont = classGmm.GetPrepInfoClassGmm(Preprocessing1, &CumInformationCont); //从高斯混合模型的训练数据中返回一个训练样本 Hlong NumSample=0; HTuple Features; Hlong ClassID; Features = classGmm.GetSampleClassGmm(NumSample, &ClassID); cout << endl; cout << "ClassID: " << ClassID << endl; //返回存储在高斯混合模型中训练数据的训练样本个数 Hlong NumSample1; NumSample1 = classGmm.GetSampleNumClassGmm(); cout << endl; cout << "训练样本个数: " << NumSample1 << endl; //清除高斯混合模型的训练数据 classGmm.ClearSamplesClassGmm(); }
相关文章推荐
- lintcode-Segmemt Tree Build II-439
- java socket 长连接 nputStream的read 阻塞问题情况之一
- [一道搜狗输入法的面试题]C++转换构造函数和类型转换函数
- 搜狐2016笔试题
- Halcon学习之超盒分类
- 动态规划—输出所有的最长公共子序列
- HDU - 3008 Warcraft0(完全背包)
- Linux内核笔记——进程管理之执行体
- Halcon学习之K最近邻分类
- JavaScript程序编码规范
- Javascript 学习备忘(一)
- 使用git来控制版本 并分享到github上(自学或分享必备)
- Babelfish(二分)
- java 操作excel
- 如何寻找连通域的重心
- cocos2d遍历所有body+判断触摸点是否在动态物体的形状内
- Factorial Trailing Zeroes
- WebAPI 身份认证解决方案——Phenix.NET企业应用软件快速开发平台.使用指南.21.WebAPI服务(一)
- java web总结(JNDI的配置)
- struts2结合spring json序列化问题