在已知训练样本情况下,利用最小距离法对遥感影像进行分类的代码
时间: 2024-03-08 16:46:45 浏览: 21
最小距离法分类是一种简单易实现的遥感影像分类方法。下面是一个利用最小距离法对遥感影像进行分类的 Python 代码示例:
```python
import numpy as np
import gdal
# 读取遥感影像数据
img_path = 'your_image_path.tif'
img_dataset = gdal.Open(img_path)
img_rows = img_dataset.RasterYSize
img_cols = img_dataset.RasterXSize
img_bands = img_dataset.RasterCount
img_data = np.zeros((img_rows, img_cols, img_bands))
for i in range(img_bands):
band = img_dataset.GetRasterBand(i+1)
img_data[:, :, i] = band.ReadAsArray()
# 读取训练样本数据
train_data_path = 'your_train_data_path.npy'
train_data = np.load(train_data_path)
# 最小距离分类
result_data = np.zeros((img_rows, img_cols))
for i in range(img_rows):
for j in range(img_cols):
point = img_data[i, j, :]
min_dist = float('inf')
min_class = 0
for k in range(train_data.shape[0]):
dist = np.linalg.norm(point - train_data[k, :-1])
if dist < min_dist:
min_dist = dist
min_class = train_data[k, -1]
result_data[i, j] = min_class
# 保存分类结果
result_path = 'your_result_path.tif'
driver = gdal.GetDriverByName('GTiff')
result_dataset = driver.Create(result_path, img_cols, img_rows, 1, gdal.GDT_Byte)
result_dataset.GetRasterBand(1).WriteArray(result_data)
result_dataset.FlushCache()
result_dataset = None
```
其中,`img_path` 是遥感影像数据的路径,`train_data_path` 是训练样本数据的路径,`result_path` 是分类结果的保存路径。在 `train_data` 中,每一行代表一个样本,最后一列为该样本所属的类别。对于每个像素点,计算它与每个训练样本的距离,选择距离最小的样本所属的类别作为分类结果。最后将分类结果保存为 GeoTIFF 格式的文件。