如何训练 5000对配准好的可见光图像SAR合成孔雷达图像数据集 如何用于遥感、地理信息系统(GIS)、环境监测 SAR图像数据集
5000对配准好的可见光图像SAR图像数据集 (尺寸800*800) tif格式 5000对 可见光图像数据集 SAR图像数据集 sar数据集 RGB图像数据集 RGB数据集 遥感地理信息系统环境监测
5000对 配准好的可见光图像 和SAR图像数据集 (尺寸800*800) tif格式 5000对 可见光图像数据集 SAR图像数据集 sar数据集 RGB图像数据集 RGB数据集
数据集概述
你提到的数据集包含5000对配准好的可见光图像和SAR(合成孔径雷达)图像,尺寸为800x800,格式为TIFF。这种数据集非常适合用于遥感、地理信息系统(GIS)、环境监测等领域的研究和应用开发。
数据集结构
dataset/
├── visible/ # 可见光图像
│ ├── img1.tif
│ ├── img2.tif
│ └── ...
├── sar/ # SAR图像
│ ├── img1.tif
│ ├── img2.tif
│ └── ...
数据预处理
1. 加载和显示图像
import cv2
import numpy as np
import os
# 加载可见光和SAR图像
def load_images(visible_dir, sar_dir):
visible_images = []
sar_images = []
for filename in os.listdir(visible_dir):
if filename.endswith(".tif"):
visible_path = os.path.join(visible_dir, filename)
sar_path = os.path.join(sar_dir, filename)
visible_img = cv2.imread(visible_path, cv2.IMREAD_COLOR)
sar_img = cv2.imread(sar_path, cv2.IMREAD_GRAYSCALE)
visible_images.append(visible_img)
sar_images.append(sar_img)
return np.array(visible_images), np.array(sar_images)
visible_dir = "dataset/visible"
sar_dir = "dataset/sar"
visible_data, sar_data = load_images(visible_dir, sar_dir)
print("Visible Images Shape:", visible_data.shape)
print("SAR Images Shape:", sar_data.shape)
2. 图像归一化
def normalize_images(images):
normalized = images.astype('float32') / 255.0
return normalized
visible_data_norm = normalize_images(visible_data)
sar_data_norm = normalize_images(sar_data)
3. 数据划分
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
visible_data_norm, sar_data_norm, test_size=0.2, random_state=42
)
print("Train Visible Shape:", X_train.shape)
print("Test SAR Shape:", y_test.shape)
模型构建与训练
使用U-Net进行可见光到SAR图像转换
import tensorflow as tf
from tensorflow.keras import layers, models
def unet_model(input_shape):
inputs = layers.Input(shape=input_shape)
# 编码器
conv1 = layers.Conv2D(64, 3, activation='relu', padding='same')(inputs)
conv1 = layers.Conv2D(64, 3, activation='relu', padding='same')(conv1)
pool1 = layers.MaxPooling2D(pool_size=(2, 2))(conv1)
conv2 = layers.Conv2D(128, 3, activation='relu', padding='same')(pool1)
conv2 = layers.Conv2D(128, 3, activation='relu', padding='same')(conv2)
pool2 = layers.MaxPooling2D(pool_size=(2, 2))(conv2)
# 中间层
conv3 = layers.Conv2D(256, 3, activation='relu', padding='same')(pool2)
conv3 = layers.Conv2D(256, 3, activation='relu', padding='same')(conv3)
# 解码器
up4 = layers.Conv2DTranspose(128, 2, strides=(2, 2), padding='same')(conv3)
merge4 = layers.concatenate([up4, conv2], axis=3)
conv4 = layers.Conv2D(128, 3, activation='relu', padding='same')(merge4)
conv4 = layers.Conv2D(128, 3, activation='relu', padding='same')(conv4)
up5 = layers.Conv2DTranspose(64, 2, strides=(2, 2), padding='same')(conv4)
merge5 = layers.concatenate([up5, conv1], axis=3)
conv5 = layers.Conv2D(64, 3, activation='relu', padding='same')(merge5)
conv5 = layers.Conv2D(64, 3, activation='relu', padding='same')(conv5)
outputs = layers.Conv2D(1, 1, activation='sigmoid')(conv5)
model = models.Model(inputs=[inputs], outputs=[outputs])
return model
input_shape = (800, 800, 3) # 输入是RGB可见光图像
model = unet_model(input_shape)
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.summary()
训练模型
history = model.fit(X_train, y_train,
validation_data=(X_test, y_test),
epochs=50,
batch_size=8)
model.save("visible_to_sar_unet.h5")
模型评估与可视化
import matplotlib.pyplot as plt
# 可视化损失曲线
plt.plot(history.history['loss'], label='train_loss')
plt.plot(history.history['val_loss'], label='val_loss')
plt.legend()
plt.title('Training and Validation Loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.show()
# 预测测试集
preds = model.predict(X_test)
# 显示原始SAR图像与预测结果
for i in range(5):
plt.figure(figsize=(10, 5))
plt.subplot(1, 3, 1)
plt.title("Visible Input")
plt.imshow(X_test[i])
plt.subplot(1, 3, 2)
plt.title("True SAR Image")
plt.imshow(y_test[i], cmap='gray')
plt.subplot(1, 3, 3)
plt.title("Predicted SAR Image")
plt.imshow(preds[i].squeeze(), cmap='gray')
plt.show()
总结
如何使用深度学习模型(如U-Net)来处理可见光图像并生成对应的SAR图像。
以上文字及代码仅供参考。