Python使用 k 均值对遥感图像进行语义分割

本文介绍了如何应用K-means算法对遥感图像进行语义分割,以研究2000年至2023年咸海水面的变化。通过对比不同距离度量(欧几里得、曼哈顿、切比雪夫),发现曼哈顿距离在该任务中表现最佳。计算结果显示咸海水面面积减少了约88%-89%。
摘要由CSDN通过智能技术生成

本篇文章介绍K-means语义分割来估计 2000 年至 2023 年咸海水面的变化

让我们先看一下本教程中将使用的数据。这是同一地区的两张 RGB 图像,间隔 23 年,但很明显地表特性和大气条件(云、气溶胶等)不同。这就是为什么我决定训练两个独立的 k-Means 模型,每个图像一个。

首先,我们导入必要的库并将数据上传

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread('MOD_01.jpg')
img2 = mpimg.imread('MOD_24.jpg')

 可以看到图像覆盖的区域相当大,所以我建议放大一点:

img = img[140:600,110:500,:]
img2 = img2[140:600,110:500,:]

fig, ax = plt.subplots(ncols=2, figsize=(16,9))
ax[0].imshow(img)
ax[1].imshow(img2)
for i in range(2):
  ax[i].set_facecolor('black')
  ax[i].set_xticks([])
  ax[i].set_yticks([])
ax[0].set_title('2000-08-01', fontsize=26)
ax[1].set_title('2023-08-01', fontsize=26)
plt.show()

在 ML 阶段之前的最后一步,让我们将图像转换为pandas数据帧(每个图像通道一列)。我这样做是为了我的解释的可见性。如果你想对其进行优化,最好使用numpy数组。 

df = pd.DataFrame({ 'R' : img[:,:, 0 ].flatten(), 'G' : img[:,:, 1 ].flatten(), 'B' :img[:,: , 2 ].flatten()}) 
df2 = pd.DataFrame({ 'R' : img2[:,:, 0 ].flatten(), 'G' : img2[:,:, 1 ].flatten(), 'B' :img2[:,:, 2 ].flatten()})

k-均值

那么该算法背后的想法是什么呢?

想象一下,您使用两个标准来判断食物的味道:甜度和价格。记住这一点,我将为您提供一组可能的饮食选择:

我敢打赌你的大脑已经把这些选项分成了三类:水果、饮料和面包。基本上,您无意识地对二维数据进行了聚类,这些数据由一对值(甜度;价格)定义。

 

在k-Means的情况下,算法的目标非常相似 - 在 n 维空间中找到预设数量的簇k(例如,除了甜度和价格之外,您还想考虑营养、健康、存在感)冰箱中食物的数量,在本例中,n = 5)。 

该算法包括以下阶段:

I. 定义簇的数量。

  • 13
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

gis收藏家

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

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

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

打赏作者

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

抵扣说明:

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

余额充值