利用多层感知机实现高分影像中的道路提取

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、使用简单的多层感知机模型,模型待优化。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值