哈工大遥感图像监督分类
- 格式:doc
- 大小:359.00 KB
- 文档页数:9
Harbin Institute of Technology
遥感图像监督分类
实验报告
课程名称:遥感信息处理导论
院系:电子与信息工程学院
姓名:
学号:
授课教师:
哈尔滨工业大学
- 1 -
1. 实验目的
(1) 学习理解监督分类的基本方法
(2) 使用matlab 实现用一种监督分类方法对多光谱图像的分类
2. 实验原理
监督分类常用于遥感图像数据的定量分析,采用适当的算法为图像中的像素分配类别标号,这些类别标号代表特定的地物种类。本次实验中采用最大似然分类器。常用的监督分类方法包括最大似然分类法、最小距离分类法和平行六面体分类法。
监督分类的分类步骤包括:
(1) 确定地物种类:将图像划分为一些信息类,如水体、城区、农作物、牧场等。 (2) 选择训练样本:通过实地考察、地图、航空照片或对图像的假彩色相片判断获得各个类别中最具代表性的原型数据。
(3) 估计所用分类器的参数:根据选定的训练样本对分类器的参数进行估计,包括对概率模型的统计特性以及分界面方程,对某一类别来说这些参数被称为该类别的特征。
(4) 分类:利用训练好的分类器,为图像中的所有像素指定地物种类(类别),实现对整个图像感兴趣区域的分类。 (5) 归纳分类结果:列表或专题(类别)制图。
(6) 评定分类精度:利用已知类别标号的测试数据,评定最终分类结果的精度。 此次实验使用最大似然分类方法,最大似然分类的基本思想为:
假设不同种类的地物在光谱空间中服从多维正态分布,根据贝叶斯理论,设图像中的一个光谱类表示为i ω,其中1,...,i M =,在分类问题中利用类后验概率
(|)i p x ω判定某一像素属于哪一类别。
贝叶斯分类准则为:
如果(|)(|)i j p x p x ωω>,j i ∀≠,那么i x ω∈
后验概率与先验概率满足如下关系式:
(|)(|)()/()i i i p x p x p p x ωωω=
将正态分布概率表达式带入上式,整理得最终判别函数为:
如果()()i j g x g x >,j i ∀≠,那么i x ω∈
其中111
()ln ()ln ()()22
t i i i i i i g x p x m x m ω-=-∑--∑-,()i p ω是i ω的先验概率,
i m 是根据样本估计出的i ω的均值向量,i ∑是估计出的i ω的协方差矩阵。
3. 实验步骤
(1) 读取实验数据:
待分类的多光谱图像读取如下:
参照的真实地物图如下:
(2) 读入groundtruth.tif 选取训练样本和测试样本。
根据真实地物图选取训练样本和测试样本,训练样本选真实地物图中每种类别的所有像素。检验样本选择真实地物图中每种类别的前一半像素。
(3)估计最大似然分类器参数:
假设各个类别出现的概率是相等的,采用上述训练样本,得到四个类别的均值向量和协方差矩阵如下表所示。
(4)用计算出的判别函数对原图像进行分类,为原图像中的每个像素分配合适的
标号,得到的分类结果。
4.实验结果与分析
下图为分类完成后的分类结果,
图中白色表示类别1,浅灰色表示类别2,深灰色表示类别3,黑色表示类别4,与groundtruth.tif中给定的相同。
判断检验样本的分类是否正确,将正确分类的检验样本数除以检验样本的总数得
由统计结果可以看出,这次实验中最大似然分类器的分类精度达到98%以上。实验中将四个类别假设为等概率事件,若确切知道各类别先验概率分类精度还应有所提高。
5.实验程序
close all;
%读取img图像
spectrumImg=multibandread('tm7envi.img', [2000 2000 6], 'uint8 ',0,'bsq','ieee-le');
%将img图像文件读入为三维数据,即每个波段2000*2000个像素,每个像素8比特,共6个波段的数据
groundTruthImg=imread('groundtruth.tif'); %读入真实地面图片
imgClassified = zeros(2000,2000);
imgClassifiedShow = zeros(2000,2000,3);
%参数初始化
%第1类
numPixelClassify1 = 0;
spectrumImgClassify1 = [];
%第2类
numPixelClassify2 = 0;
spectrumImgClassify2 = [];
%第3类
numPixelClassify3 = 0;
spectrumImgClassify3 = [];
%第4类
numPixelClassify4 = 0;
spectrumImgClassify4 = [];
%用给定的每个分类的所有像素点做为训练样本,对训练样本进行分类,将每个待分类的像素点的各波段的亮度值放入对应的数组
for i0=1:2000;
for j0=1:2000;
pixel_groundTruthImg =
uint8(groundTruthImg(i0,j0));
switch pixel_groundTruthImg
case 255 %第1类;像素的亮度值为255
numPixelClassify1 = numPixelClassify1 + 1;
for num=1:6;
spectrumImgClassify1(numPixelClassify1,num) = uint8(spectrumImg(i0,j0,num));
end spectrumImgClassify1(numPixelClassify1,7) = i0; spectrumImgClassify1(numPixelClassify1,8) = j0;
case 191 %第2类
numPixelClassify2 = numPixelClassify2 + 1;
for num=1:6;
spectrumImgClassify2(numPixelClassify2,num) = uint8(spectrumImg(i0,j0,num));
end spectrumImgClassify2(numPixelClassify2,7) = i0;
spectrumImgClassify2(numPixelClassify2,8) = j0;
case 127 %第3类
numPixelClassify3 = numPixelClassify3 + 1;
for num=1:6;
spectrumImgClassify3(numPixelClassify3,num) = uint8(spectrumImg(i0,j0,num));
end spectrumImgClassify3(numPixelClassify3,7) = i0;
spectrumImgClassify3(numPixelClassify3,8) = j0;
case 63 %第4类
numPixelClassify4 = numPixelClassify4 + 1;
for num=1:6;
spectrumImgClassify4(numPixelClassify4,num) = uint8(spectrumImg(i0,j0,num));
end spectrumImgClassify4(numPixelClassify4,7) = i0;