本文最后更新于 2025-05-09,文章内容可能已经过时。

要将数据归一化到0到255之间,之前一直归一化到0到1之间导致无法训练起来。

import os
import numpy as np
import tifffile

# 输入和输出路径
input_directory = '/TMP_EXT_DRIVE_DO_NOT_USE/new_desert_forest_snow2_normalized/pca30_HWC/val'
output_directory = '/TMP_EXT_DRIVE_DO_NOT_USE/new_desert_forest_snow2_normalized/images/val'

# 创建输出目录
os.makedirs(output_directory, exist_ok=True)

# 获取所有 TIFF 文件
tiff_files = [f for f in os.listdir(input_directory) if f.endswith('.tiff')]

# 遍历处理
for i, tiff_file in enumerate(tiff_files, 1):
    # 读取图像 (H, W, C)
    image = tifffile.imread(os.path.join(input_directory, tiff_file)).astype(np.float32)

    # 初始化归一化图像
    image_normalized = np.zeros_like(image)

    # 对每个通道分别归一化到 [0, 255]
    for c in range(image.shape[2]):
        band = image[:, :, c]
        band_min = np.min(band)
        band_max = np.max(band)
        if band_max > band_min:
            image_normalized[:, :, c] = (band - band_min) / (band_max - band_min) * 255.0
        else:
            image_normalized[:, :, c] = 0.0

    # 转为 uint8 类型并保存
    image_normalized_uint8 = image_normalized.astype(np.uint8)
    tifffile.imwrite(os.path.join(output_directory, f'{os.path.splitext(tiff_file)[0]}.tiff'), image_normalized_uint8)

    print(f"归一化完成:{i}/{len(tiff_files)}")

print("所有高光谱图像已逐通道归一化到 [0, 255] 并保存。")