基于K-means与CNN的遥感影像分类方法

基于K-means与CNN的遥感影像分类
一、引言
1.研究背景
航天遥感技术是一种通过卫星对地观测获取遥感图像信息数据的技术,这些图像数据在各领域都发挥着不可或缺的作用。遥感图像分类主要是根据地面物体电磁波辐射在遥感图像上的特征,判断识别地面物体的属性,进而为目标检测与识别等其他应用提供辅助信息,也可以作为最终结果提供基础地理信息用于地图绘测、抢险救灾、军事侦察等领域。遥感影像分类是遥感技术应用的一个重要环节。
遥感影像分类就是利用计算机通过对遥感图像中各类地物的光谱信息和空间信息进行分析,选择特征,将图像中各个像元按照某种规则或算法划分不同的类别,然后获得遥感图像中与实际地物的对应信息,从而实现图像的分类。遥感图像计算机分类的依据是遥感图像像素的相似度。常使用距离和相关系数来衡量相似度。常见的分类方法有:监督分类、非监督分类法
2.研究内容
各方面学者对遥感图像的分类有着诸多研究,提出了许多分类方法,按是否需要选取标记样本可将分类方法分为监督分类和非监督分类。根据最小分类单元可将分类方法分为基于像元的分类、基于对象的分类,以及基于混合像元分解的分类。此外,不同类型的遥感图像(多光谱遥感图像、高光谱遥感图像、合成孔径雷达图像) 分类方法也不尽相同。由于目标分类通常是在特征空间中进行的,因此特征的表达与学习是实现目标分类的关键。根据表达和学习特征的方式,可将现有的遥感图像分类方法大致分为三类: 基于人工特征描述的分类方法、基于机器学习的分类方法和基于深度学习的分类方法。需要注意的是,这三类方法并没有严格的区分界线,相互之间互有重叠和借鉴。本次研究分别使用了一种机器学习和一种深度学习方法进行模型的构建。

二、分类方法

  1. K-means算法
    K-means算法是一种较典型的逐点修改迭代的动态聚类算法,也是一种普遍采用的方法,其要点是以误差平方和为准则函数。一般的作法是先按某些原则选择一些代表点作为聚类的核心,然后把其余的待分点按某种方法(判据准则)分到各类中去,完成初始分类。初始分类完成以后,重新计算各聚类中心,完成了第一次迭代。然后修改聚类中心,以便进行下一次迭代。这种修改有两种方案,即逐点修改和逐批修改。逐点修改类中心就是一个像元样本按某一原则归属于某一组类后,就要重新计算这个组类的均值,并且以新的均值作为凝聚中心点进行下一次像元聚类。逐批修改类中心就是在全部像元样本按某一组的类中心分类之后,再计算修改各类的均值,作为下一次分类的凝聚中心点。
    代码展示:
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分类结果(红色:耕地,绿色:森林,蓝色:水体),如图所示:
在这里插入图片描述

  1. CNN算法
    CNN卷积网络采用“端对端”的特征学习,通过多层处理机制揭示隐藏于数据中的非线性特征,能够从大量训练集中自动学习全局特征(这种特征被称为“学习特征”),是其在遥感影像自动目标识别取得成功的重要原因,也标志特征模型从手工特征向学习特征转变。本次实验CNN网络架构中设计了四层卷积+池化,然后使用Relu激活函数,最后采用Softmax进行归一化处理计算每个目标类别在所有可能的目标类中的概率,即可对输入的图片进行分类。
    代码展示:
# 设计模型: 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

  • 40
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 基于k-means聚类算法进行心脏影像分割是一种常用的方法。这种方法的主要思想是将心脏影像中的像素数据划分为不同的类别,以达到分割心脏的目的。 首先,我们需要选择一个适当的k值来表示我们希望将影像分割为多少个部分。然后,将心脏影像中的所有像素点作为数据点,并将其输入到k-means算法中进行聚类。k-means算法通过计算像素点与聚类中心之间的距离来确定每个像素点所属的类别。 在每轮迭代中,k-means算法会根据数据点和聚类中心的距离进行重新分配,即将每个像素点分配给距离最近的聚类中心。然后,根据重新分配的结果,更新聚类中心的位置。这个过程会不断迭代,直到算法收敛,即聚类中心的更新不再变化。 最后,根据聚类的结果,我们可以将同一类别的像素点标记为相同的颜色或像素值,从而实现心脏影像的分割。这种分割方法可以帮助医生更好地观察和分析心脏影像,进一步识别心脏病变或进行疾病诊断和治疗。 需要注意的是,k-means算法对于初始聚类中心的选择非常敏感,选择不当可能导致分割结果不准确。因此,在进行分割前,通常需要先对心脏影像进行预处理,如平滑化、降噪等,以提高聚类的准确性和稳定性。另外,根据具体的影像特点,也可以采用其他适合的聚类算法来进行分割,以获得更好的分割效果。 ### 回答2: 基于k-means聚类算法的心脏影像分割可以通过以下步骤实现: 首先,收集一组心脏影像数据集。这些数据可以是2D或3D影像,包含了心脏的不同部位和结构。 接下来,将每个影像划分为像素或体素,并将它们表示为特征空间中的点。这些点的坐标由影像的强度信息决定。 然后,选择一个合适的k值,并从数据集中随机选择k个点作为初始聚类中心。 对于每个点,计算其与k个聚类中心的距离,并将其归类为与之最接近的聚类中心。 计算每个聚类中心的新坐标,作为该聚类中所有点的平均值。重复该过程,直到聚类中心的位置不再改变或达到预定的迭代次数。 最后,根据聚类结果,将每个像素或体素标记为相应的类别。可以使用不同的颜色或灰度级别表示不同的类别,以便观察和分析结果。 基于k-means聚类算法的心脏影像分割能够根据影像的相似性将其划分为不同的区域或结构,这对于后续的心脏疾病分析和治疗规划非常有帮助。然而,需要注意的是,k-means算法对于初始聚类中心的选择非常敏感,且对于不同形状、大小和强度差异较大的影像可能效果不佳。因此,在具体实施时需要综合考虑算法参数和影像特点,以获得准确的分割结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

perfect Yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值