遥感图像地物分类流程
1. 制作标签
使用arcgis pro或者arcgis或者envi,画标签,保存为tiff格式
2. 处理标签数据
用python gdal库安装 osgdal库,如果安装失败就需要下载 对应库得 .whl去安装,网站具体搞忘了,可以百度
或者rasterio库
2.1 读入tif数据
def readTif(fileName):
"""
dataset包含了tif文件得属性比如
波段数
高
宽
数据
"""
dataset = rasterio.open(fileName)
if dataset == None:
print(fileName + "文件无法打开")
return None
# print(dataset.width)
return dataset
2.2 处理数据
import csv
# 提取栅格图像信息,制作数据
ori_dataset = readTif(orgin_path)
label_dataset = readTif(sample_path)
width = ori_dataset.width # 宽
height = ori_dataset.height # 高
bands = ori_dataset.count # 波段数
# ori_data = for k in range(bands)
label_matri = label_dataset.read(1) #读出标签的矩阵
data_matri = ori_dataset.read() #原始图像的矩阵
count = np.count_nonzero(label_matri) #非零就是标签, 有多少非零的就代表样本像素是多少
print(count)
train_data = np.zeros((count, 8), dtype=data_matri.dtype) # 新建一个count*8的numpy数组,第8维度是原始图像的某一像素点对应的标签,0~6代表这一个像素点对应的7ge波段,landsata影像
nonzero_indices = np.nonzero(label_matri) #非零索引, 返回的是
"""
(row:array([ 30, 31, 31, ..., 390, 390, 390], dtype=int64), col:array([166, 165, 166, ..., 186, 187, 188], dtype=int64))
"""
print(nonzero_indices)
# 写入数据csv, 提取训练数据
# 将 train_data 写入 CSV 文件
csv_file = open(csv_filename, mode='w', newline='')
csv_writer = csv.writer(csv_file)
# 写入 CSV 文件的标题行,包括 Label 和 LabelName
csv_writer.writerow(csv_head_name)
for i in range(count):
print(i)
row, col = nonzero_indices[0][i], nonzero_indices[1][i]
train_data[i, :7] = data_matri[:, row, col]
train_data[i, 7] = label_matri[row, col]
label = int(train_data[i, 7])
row_data = train_data[i]
row_data = np.append(row_data, labels_name[label]) # 在数据行中添加 LabelName
csv_writer.writerow(row_data)
print(f"已将数据写入 CSV 文件: {
csv_filename}")
csv_file.close()
2.3 数据格式
生成的数据格式如下
Band1,Band2,Band3,Band4,Band5,Band6,Band7,Label,LabelName
812,774,969,1111,1152,1146,1069,2,building
801,755,846,1016,1177,1411,1472,2,building
794,748,949,1179,1202,1399,1383,2,building
605,567,691,877,1537,1880,2070,2,building
602,556,768,994,1506,1625,1607,2,building
613,570,768,1045,1394,1483,1460,2,building
465,408,562,772,963,1035,990,2,building
549,484,648,828,969,1096,1028,2,building