模式识别实验报告_3
- 格式:pdf
- 大小:475.60 KB
- 文档页数:13
第一次实验
实验目的:
1.学习使用ENVI
2.会用MATLAB读入遥感数据并进行处理
实验内容:
一学习使用ENVI
1.使用ENVI打开遥感图像(任选3个波段合成假彩色图像,保存写入报告)
2.会查看图像的头文件(保存或者copy至报告)
3.会看地物的光谱曲线(保存或者copy至报告)
4.进行数据信息统计(保存或者copy至报告)
5.设置ROI,对每类地物自己添加标记数据,并保存为ROI文件和图像文件(CMap贴到报告中)。
6.使用自己设置的ROI进行图像分类(ENVI中的两种有监督分类算法)(分类算法名称和分类结果写入报告)
二MATLAB处理遥感数据(提交代码和结果)
7.用MATLAB读入遥感数据(zy3和DC两个数据)
8.用MATLAB读入遥感图像中ROI中的数据(包括数据和标签)
9.把图像数据m*n*L(其中m表示行数,n表示列数,L表示波段数),重新排列为N*L的二维矩阵(其中N=m*n),其中N表示所有的数据点数量m*n。(提示,用reshape函数,可以help查看这个函数的用法)
10.计算每一类数据的均值(平均光谱),并把所有类别的平均光谱画出来(plot)(类似下面的效果)。
11.画出zy3数据中“农作物类别”的数据点(自己ROI标记的这个类别的点)在每个波段的直方图(matlab函数:nbins=50;hist(Xi,nbins),其中Xi表示这类数据在第i波段的数值)。计算出这个类别数据的协方差矩阵,并画出(figure,imagesc(C),colorbar)。
1.打开遥感图像如下:
2.查看图像头文件过程如下:
3.地物的光谱曲线如下:
4.数据信息统计如下:
(注:由于保存的txt文件中的数据信息过长,所以采用截图的方式只显示了出一部分数据信息)
5.设置ROI,对每类地物自己添加标记数据,CMap如下:
6.使用自己设置的ROI进行图像分类(使用支持向量机算法和最小距离算法),支持向量机算法分类结果如下:
最小距离算法分类结果如下:
对比两种算法的分类结果可以看出支持分量机算法分类结果比最小距离算法分类结果好一些。
Matlab处理遥感数据
用MATLAB读入遥感数据及遥感图像中ROI中的数据(包括数据和标签)如下:
Img=multibandread('zy3sample1',[400,400,4],'float',0,'bsq','n',{' Band','Direct',[1:4]});%将高光谱数据读入
GT=multibandread('ddzm',[400,400,1],'uint8',0,'bsq','n',{'Band',' Direct',[1:1]});%将ground truth读入(也就是带标签的CMap或说ROI信息读入)test_class=1:4;
C=length(test_class);
NbRow=400;
NbCol=400;
NbDim=4;
dataname='zy3';
第一种方式读入带标签数据
[X,Y]=ExtractDataFromROI(Img,GT);
img1=reshape(Img,NbRow*NbCol,NbDim);把图像数据m*n*L(其中m表示行数,n表示列数,L表示波段数),重新排列为N*L的二维矩阵(其中N=m*n)。
计算每一类数据的均值(平均光谱)
T=1:5
T(2)=length(find(Y==1));
for i=3:5
T(i)=T(i-1)+length(find(Y==(i-1)));
end
for j=1:4
for n=1:4
s(n,j)=sum(X(T(n):T(n+1),j))/(T(n+1)-T(n));
end
end
figure(5);
plot(s);
输出结果:
%画直方图和求协方差矩阵
nbins=50;
figure(1);
hist(X(T(2):T(3),1),nbins); figure(2);
hist(X(T(2):T(3),2),nbins); figure(3);
hist(X(T(2):T(3),3),nbins); figure(4);
hist(X(T(2):T(3),4),nbins); C=cov(X(T(2):T(3),:)); figure(6);
imagesc(C);
colorbar;
输出结果:
实验心得:本次实验分为两个部分,第一部分比较简单,就是学会ENVI软件的基本操作,第二部分则相对困难,特别是求平均光谱遇到很大困难,通过借鉴并询问同学才得以解决,总之,第一次实验学到了很多。
第二次实验:
实验目标:
1.掌握K-means算法原理
2.用MATLAB实现k-means算法,并进行结果分析
实验原理:
本次实验是用MATLAB实现k-means算法,首先简述一下k-means算法的算法思想。
该方法事先取定K个类别和选取K个初始聚类中心,按最小距离原则将各数据点分配到K类中的某一类,之后不断地计算类心和调整各模式的类别,最终使各数据点到其判属类别中心的距离平方之和最小。
而本次实验程序的思路也是严格按照k-means算法的算法思想进行的,我先用rand函数随机产生四个初始聚类类心,然后用欧式距离计算类心与分类点间的距离,随后按最小距离原则将各数据点分配到4类中的某一类,之后进行四次迭代重复计算类心和调整各模式的类别,最终使各数据点到其判属类别中心的距离