从栅格数据中提取训练数据并保存到CSV文件(制作遥感场景分类训练集)

import csv
import numpy as np
import rasterio
import pandas as pd

def readTif(fileName):
    try:
        dataset = rasterio.open(fileName)
        return dataset
    except rasterio.errors.RasterioIOError:
        print(f"文件 {fileName} 无法打开")
        return None

orgin_path = r'F:\datasets\ZY1E\不透水面提取\MIMFormer\HRMSI.tif'
sample_path = r'F:\datasets\ZY1E\不透水面提取\labels.tif'
csv_filename = r'F:\datasets\ZY1E\不透水面提取\labels.csv'
num_bands = 8
csv_head_name = [f'Band{i}' for i in range(1, num_bands + 1)] + ['Label', 'LabelName']
labels_name = {1: "Water", 2: "Other"}

ori_dataset = readTif(orgin_path)
label_dataset = readTif(sample_path)

if ori_dataset is not None and label_dataset is not None:
    label_matri = label_dataset.read(1)
    data_matri = ori_dataset.read()
    nonzero_indices = np.nonzero(label_matri)
    count = len(nonzero_indices[0])

    # 准备数据
    data = []
    for i in range(count):
        row, col = nonzero_indices[0][i], nonzero_indices[1][i]
        band_values = data_matri[:, row, col].tolist()
        label = label_matri[row, col]
        label_name = labels_name.get(label, 'Unknown')
        band_values.extend([label, label_name])
        data.append(band_values)

    # 使用 pandas 写入 CSV
    df = pd.DataFrame(data, columns=csv_head_name)
    df.to_csv(csv_filename, index=False)
    print(f"已将数据写入 CSV 文件: {csv_filename}")

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Python与遥感

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

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

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

打赏作者

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

抵扣说明:

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

余额充值