以下是一个简单的Python代码示例,用于使用极化SAR数据对农作物进行分类:
```python
import numpy as np
import matplotlib.pyplot as plt
import gdal
# 读取极化SAR数据
filename = "polsar.tif"
dataset = gdal.Open(filename)
polsar = dataset.ReadAsArray()
# 计算特征参数
hh = polsar[0,:,:]
hv = polsar[1,:,:]
vv = polsar[2,:,:]
hh_hv = np.divide(hh, hv, out=np.zeros_like(hh), where=hv!=0)
hv_vv = np.divide(hv, vv, out=np.zeros_like(hv), where=vv!=0)
# 组合特征参数
features = np.stack((hh, hv, vv, hh_hv, hv_vv), axis=-1)
# 定义农作物分类标签
labels = np.zeros_like(hh)
labels[100:200, 100:200] = 1 # 将一部分区域标记为作物1
labels[300:400, 300:400] = 2 # 将另一部分区域标记为作物2
# 将特征参数和标签合并成一个数据集
dataset = np.zeros((features.shape[0], features.shape[1], features.shape[2]+1))
dataset[:,:,:-1] = features
dataset[:,:, -1] = labels
# 随机划分数据集为训练集和测试集
np.random.shuffle(dataset)
train_size = int(0.8 * dataset.shape[0])
train_data = dataset[:train_size,:,:]
test_data = dataset[train_size:,:,:]
# 定义分类模型
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=100, max_depth=10, random_state=0)
# 训练分类模型
X_train = train_data[:,:,:-1].reshape((-1, features.shape[-1]))
y_train = train_data[:,:,-1].ravel()
model.fit(X_train, y_train)
# 在测试集上进行分类预测
X_test = test_data[:,:,:-1].reshape((-1, features.shape[-1]))
y_test = test_data[:,:,-1].ravel()
y_pred = model.predict(X_test)
# 计算分类精度
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
# 可视化分类结果
plt.subplot(1,2,1)
plt.imshow(y_test.reshape((test_data.shape[1], test_data.shape[2])), cmap='jet')
plt.title("Ground Truth")
plt.subplot(1,2,2)
plt.imshow(y_pred.reshape((test_data.shape[1], test_data.shape[2])), cmap='jet')
plt.title("Prediction")
plt.show()
```
需要注意的是,这只是一个简单的示例代码,实际应用中需要根据具体情况进行调整和优化。