上遥感原理与应用的时候,老师给我们大致讲了一下遥感图像的地物分类问题,大致了解了一下机器学习方法在遥感影像处理方面的应用问题。
下面将所做作业进行一个大致的总结:
数据
训练集一共四种:building、road、vegetation、water,分别对应标签1,2,3,4,测试集为unknown;
数据为高光谱遥感影像数据,包含八个波段,需要对unknown进行逐像素的分类。
数据链接如下:
https://pan.baidu.com/s/1gwa3GdXGxb9sfnbVsbFusw
监督分类-极大似然
一是假设每种地物每个波段都是正态分布的,然后根据贝叶斯判别准则计算测试集每个像素在四种类型中的概率,取概率最大为其地物类型。
代码如下:
cd 'D:\桌面\大三下\遥感原理与应用\exp-1';
clear
clc
load('matlab.mat');
format long g
p=zeros(4,1);
p(1)=size(building,1)/size(sum_Mat,1);
p(2)=size(road,1)/size(sum_Mat,1);
p(3)=size(vegetation,1)/size(sum_Mat,1);
p(4)=size(water,1)/size(sum_Mat,1);
mul=[mean(building);mean(road);mean(vegetation);mean(water)];
SG=cell(4);
SG{
1}=cov(building);
SG{
2}=cov(road);
SG{
3}=cov(vegetation);
SG{
4}=cov(water);
predit=zeros(size(unknown,1),1);
t=zeros(1,4);
for i = 1:size(unknown,1)
p=0;
for j =1 :4
t(j)=( 1/( (2*pi)^(1/2)*det(SG{j})^0.5 ) ) * exp( -0.5*(unknown(i,1:8)-mul(j,:))*inv(SG{j}) *(unknown(i,1:8)-mul(j,:))');
end
[~, x] = max(t);
predit(i)=x;
end
tabulate(predit-unknown(:,9))
end
confuseMat=confusionmat(unknown(:,9),predit);
accuracy=length(find(predit==unknown(:,9)))/size(unknown,1);
K=size(unknown,1);
Pe=sum(sum(confuseMat,2).*diag(confuseMat))/K^2;
Kappar=(accuracy-Pe)/(1-Pe);
这里先验的地物概率并没有用到,因为这里假设了四种地物出现的概率是相等的,实际情况中其实要根据实际的地物情况进行处理。
有监督精度的评价