最小距离法监督分类
来源:互联网 发布:工作日志管理系统源码 编辑:程序博客网 时间:2024/05/29 10:33
/ int Snum;//分类数目
fscanf(fp,"%d",&Snum);//从分文件中读取分类数目
int *SampleNum;//每类像元的个数
int i,j;
for(Snum,SampleNum=new int[Snum], i=0;i<Snum;i++)
{
fscanf(fp,"%d",&j);
fscanf(fp,"%d",&SampleNum[i]);//读取每个样本的数目
}
//为各类设置颜色
COLORREF*Setcolor=new COLORREF[Snum];//声请每类的颜色值
memset(Setcolor,0,sizeof(COLORREF)*Snum);
for(int i2=0;i2<Snum;i2++)
{
CColorDialog ColorDlg;
if(ColorDlg.DoModal()==IDOK)
{
Setcolor[i2]=ColorDlg.GetColor();//获得颜色数目
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~求各类在各波段的均值
double **Average=new double *[Snum];//声请各类均值数组
for(int c=0;c<Snum;c++)
{
Average[c]=new double[band];//c为一个类别,Average[c]表示为各类别在各波段的均值
memset(Average[c],0,sizeof(double)*band);//讲个波段的均值置零
}
for(int i1=0;i1<Snum;i1++)
{
double** Sample=new double*[band];//六波段总的每类像元数
for(j=0;j<band;j++)//第一个标识符表示波段,第二个标识符表示类别的样本
//合起来标识在第j个波段底i个类别的样本坐标
{
Sample[j]=new double[SampleNum[i1]];//声请各个波段的样本类别
memset(Sample[j],0,sizeof(double)*SampleNum[i1]);
}
CPoint *point=new CPoint[SampleNum[i1]];//存点位置
int position;
for(int m=0;m<SampleNum[i1];m++)
{
fscanf(fp,"%d",&point[m].x);
fscanf(fp,"%d",&point[m].y);
position=(point[m].y-1)*width+(point[m].x-1);
for(int n=0;n<band;n++)
Sample[n][m]=Input[n][position];//保存坐标点的像素值
}
//??????????????????????????????
for(int x=0;x<band;x++)
{
DOUBLE temp=0;
for(int y=0;y<SampleNum[i1];y++)
{
temp=temp+Sample[x][y];
}
Average[i1][x]=temp/SampleNum[i1];//第i类在第x波段上的均值
}
delete []Sample;
delete []point;
}
//Average[i][x]为第i类在第x波段上的均值,i从1到Snum(5类),x从0到5
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//为每一个像元归类
CWindowDC dc(this);
BYTE *D=new BYTE[Snum];//开辟一个距离数组空间,便于比较
memset(D,0,sizeof(BYTE)*Snum);
BYTE *Output=new BYTE[width*height];
memset(Output,0,sizeof(BYTE)*width*height);
for(int k=0;k<width*height;k++)//像元个数扫描整个图像数据
{
for(int i3=1;i3<=Snum;i3++)//类别数,扫描整个类别空间
{
for(j=0;j<band;j++)//波段数,扫描整个波段数据
{
//Input[j][k]表示在第j波段第第k个像元的像素值
D[i3]=D[i3]+fabs(Input[j][k]-Average[i3][j]);
//计算第K个像元在整个波段空间的距离与各样本类别的距离大小
}
}
int Min=D[1];//在第K个像元的前提下比较第k个像元的距离大小值,并保存最小值和其ID号
int belong=1;//像元属于哪一类
for(int i4=2;i4<=Snum;i4++)
{
if(Min>D[i4])//循环迭代类别,比较Snum次
{
Min=D[i4];//保存最小的那个距离
belong=i4;//保存类别标识
}
}
Output[k]=belong;//输出途中记录类别标识,具有一一对应关系
}
for(int i5=0;i5<height;i5++)
{
for(int j1=0;j1<width;j1++)
{
dc.SetPixel(j1,i5,Setcolor[Output[i5*width+j1]]);
//由于类别标识与颜色间的一一对应关系,直接获得标识输出
}
}
}
- 最小距离法监督分类
- 遥感影像分类(监督分类,最小距离法)
- 最小距离法
- 基于最小距离分类器的图像识别
- 最小距离
- 有监督回归:最小二乘学习法
- 分类模型与算法--距离判别法
- 分治法求最小点对距离
- 圆的拟合(距离最小法)
- 有监督分类:基于最小二乘法的分类
- 有监督分类:支持向量机分类
- 基于最大最小距离的分类数目上限K确定的聚类方法
- 论文笔记3《基于信息增益和最小距离分类的决策树改进算法》
- 分类与聚类 监督学习与无监督学习
- 分类与聚类 监督学习与无监督学习
- 机器学习模型的基本分类--有监督、无监督
- 距离度量分类体系
- 各种距离(分类)
- android-API之FingerPaint手指绘图详解
- 防御式编程
- 很好的一个学习网站
- at 命令来安排命令、脚本或程序在指定的日期和时间运行。您也可以使用此命令查看现有的计划任务。
- Irrlicht 0.1引擎源码分析与研究(三)
- 最小距离法监督分类
- 2560 Freckles (最小生成树)
- Android用户界面之notifaction(状态栏通知)
- SIP呼叫流程典型流程图解及其详细解释
- C++ Primer学习笔记:STL顺序容器
- 在Hbase中选择多少个column family才合适呢?
- 安装Ubuntu心要做的12件事【转载】
- [ZZ]VBOX穿过主机访问虚拟机中的网站
- 如何在RAC环境下修改Oracle字符集