1、数据与目的
实验数据: 分辨率为0.5m的高分遥感影像
实验目的:提取影响中的沥青路面道路
2、影像数据处理
前期数据处理在ENVI中实现。主要包括影像裁剪,道路矢量化,图像二值化。
2-1 数据裁剪
裁剪的目的:在图像中裁剪除两块有代表性的区域,分别作为机器学习的样本和测试数据。
裁剪效果:
train data:
test data:
2-2 裁剪区域目标要素(道路)矢量化
目的:创建道路mask,并输出道路区域影像
2-3 裁剪区域以2-2结果为mask输出道路
输出结果:
2-4 将2-3结果二值化
利用决策树,将2-3结果二值化,其中,道路区域为1,非道路区为0,二值化表达式:b1 gt 0
二值化结果:
3、机器学习识别
实验使用keras,使用多层感知机实现,最终预测结果为某一像素是道路的概率
实验中用到gdal库进行tiff数据的打开与保存
3-1 影像数据导入
from osgeo import gdal_array
import numpy as np
x_train_src="cut/cutcross.tif"
y_train_src="testdb/ch3.tif"
x_test_src="cut/cut2.tif"
y_test_src="testdb/ch7.tif"
x_train=gdal_array.LoadFile(x_train_src)
y_train=gdal_array.LoadFile(y_train_src)
x_test=gdal_array.LoadFile(x_test_src)
y_test=gdal_array.LoadFile(y_test_src)
3-2 数据矩阵处理
主要包括数据格式转换与范围转换,以满足机器学习模型要求。
最终将x_train转化为(n,3)的格式,n为 row*col ; y_train为(n,1)的二值矩阵
y_train与t_test类似。
3-3 创建模型与学习
hap=Sequential()
hap.add(Dense(256,activation='relu',input_shape=(3,)))
hap.add(Dense(128,activation='relu'))
hap.add(Dense(64,activation='relu'))
hap.add(Dense(32,activation='relu'))
hap.add(Dense(16,activation='relu'))
hap.add(Dense(1,activation='sigmoid'))
hap.compile(optimizer=SGD(),loss="binary_crossentropy",metrics=['accuracy'])
hap.fit(x_train,y_train,epochs=1,validation_data=(x_test,y_test))
3-4 模型测试
读入一块新的数据进行测试效果
原始影像(左)与检测结果(右)
4、实验缺陷
1、仅传入三个波段作为学习数据,未考虑影像中地物的空间特征。
2、使用影像切片学习的方式,操作复杂,效率低。
3、使用简单的多层感知机模型,模型待优化。