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

本篇文章介绍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. 定义簇的数量。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-18 18:32:02       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-18 18:32:02       97 阅读
  3. 在Django里面运行非项目文件

    2024-03-18 18:32:02       78 阅读
  4. Python语言-面向对象

    2024-03-18 18:32:02       88 阅读

热门阅读

  1. 程序员应该如何选择职业赛道?

    2024-03-18 18:32:02       36 阅读
  2. 鸿蒙内核系统

    2024-03-18 18:32:02       41 阅读
  3. 5.66 BCC工具之offwaketime.py解读

    2024-03-18 18:32:02       39 阅读
  4. 备份恢复新体验!pgBackRest与IvorySQL的完美融合

    2024-03-18 18:32:02       31 阅读
  5. Spring概述总结

    2024-03-18 18:32:02       44 阅读