基于K-means与CNN的遥感影像分类
一、引言
1.研究背景
航天遥感技术是一种通过卫星对地观测获取遥感图像信息数据的技术,这些图像数据在各领域都发挥着不可或缺的作用。遥感图像分类主要是根据地面物体电磁波辐射在遥感图像上的特征,判断识别地面物体的属性,进而为目标检测与识别等其他应用提供辅助信息,也可以作为最终结果提供基础地理信息用于地图绘测、抢险救灾、军事侦察等领域。遥感影像分类是遥感技术应用的一个重要环节。
遥感影像分类就是利用计算机通过对遥感图像中各类地物的光谱信息和空间信息进行分析,选择特征,将图像中各个像元按照某种规则或算法划分不同的类别,然后获得遥感图像中与实际地物的对应信息,从而实现图像的分类。遥感图像计算机分类的依据是遥感图像像素的相似度。常使用距离和相关系数来衡量相似度。常见的分类方法有:监督分类、非监督分类法
2.研究内容
各方面学者对遥感图像的分类有着诸多研究,提出了许多分类方法,按是否需要选取标记样本可将分类方法分为监督分类和非监督分类。根据最小分类单元可将分类方法分为基于像元的分类、基于对象的分类,以及基于混合像元分解的分类。此外,不同类型的遥感图像(多光谱遥感图像、高光谱遥感图像、合成孔径雷达图像) 分类方法也不尽相同。由于目标分类通常是在特征空间中进行的,因此特征的表达与学习是实现目标分类的关键。根据表达和学习特征的方式,可将现有的遥感图像分类方法大致分为三类: 基于人工特征描述的分类方法、基于机器学习的分类方法和基于深度学习的分类方法。需要注意的是,这三类方法并没有严格的区分界线,相互之间互有重叠和借鉴。本次研究分别使用了一种机器学习和一种深度学习方法进行模型的构建。
二、分类方法
rs_data_trans = rs_data.transpose(1,2,0)
rs_data.shape, rs_data_trans.shape
rs_data_1d = rs_data_trans.reshape(-1, rs_data_trans.shape[2])
rs_data_1d.shape
cl = cluster.KMeans(n_clusters=4) # create an object of the classifier
param = cl.fit(rs_data_1d) # train it
img_cl = cl.labels
img_cl = img_cl.reshape(rs_data_trans[:,:,0].shape)
prof = rs.profile
prof.update(count=1)
with rio.open('result.tif','w',**prof) as dst:
dst.write(img_cl, 1)
fig, (ax1,ax2) = plt.subplots(figsize=[15,15], nrows=1,ncols=2)
show(rs, cmap='gray', vmin=vmin, vmax=vmax, ax=ax1)
show(img_cl, ax=ax2)
ax1.set_axis_off()
ax2.set_axis_off()
fig.savefig("pred.png", bbox_inches='tight')
plt.show()
K-means分类结果(红色:耕地,绿色:森林,蓝色:水体),如图所示:
# 设计模型: CNN + maxpool
model = tf.keras.models.Sequential([
# 我们的数据是150x150而且是三通道的,所以我们的输入应该设置为这样的格式。
tf.keras.layers.Conv2D(32, (3, 3),
activation='relu',
input_shape=(256, 256, 3)),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(64, (3, 3),
activation='relu'),
tf.keras.layers.MaxPooling2D(3, 3),
tf.keras.layers.Conv2D(128, (3, 3),
activation='relu'),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(128, (3, 3),
activation='relu'),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Flatten(), # 512 neuron hidden layer
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(21, activation='softmax') #'sigmoid' ])
对以下图进行识别,输出为森林类别(It is forest),如图所示:
三、总结
深度学习在计算机视觉领域的巨大成功,遥感智能分析提供了重要机遇;机器学习创新,也为遥感影像分类带来更多思路。近年来这些算法被广泛应用在遥感领域,在大范围目标自动快速检测、复杂场景精细分类、地表参数快速识别等方面展示了巨大优势和发展潜力,不断提升智能影像分类效率与质量,为遥感大数据的智能信息提取带来发展契机。
遥感大数据是时空科技发展的新阶段,遥感图像分类、量化、预测,已经由传统的统计数学分析、定量遥感建模分析逐渐向数据驱动的智能分析转变。以智能分析为标志的遥感大数据时代已经到来,如何广泛、深化其应用,还值得产业界、学术界不断探索。但其无疑将在空天产业、智慧城市、政企数字化各领域带来一场深刻变革。
代码:
CNN:
https://gitee.com/A-xinss/cnn-to-remote-sensing-image-classification
CNN-进阶版
K-Means:
https://gitee.com/A-xinss/k-means-to-remote-sensing-image-classification