/
BELEGO
/
GIS_APPLICATION
Обзор
Документация
Войти
/
BELEGO
/
GIS_APPLICATION
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
python-service/app/debug_unity7.py
167 строк
6 KB
HACKER_LAPTOP
update downloaders
23 апр 2026, 04:32
23 апр 2026, 04:32
638e804
Код
Авторство
О чём код?
# debug_visualize_only.py import os import sys import numpy as np from osgeo import gdal import matplotlib.pyplot as plt from PIL import Image # Добавляем PIL для сохранения PNG # Добавляем путь к модулям проекта current_file_path = os.path.abspath(__file__) project_root = os.path.dirname(os.path.dirname(os.path.dirname(current_file_path))) sys.path.append(os.path.dirname(current_file_path)) def visualize_tiff_bands(relative_folder_path): """ Визуализация TIFF файлов с сохранением PNG в папку со скриптом """ print(f"=== ВИЗУАЛИЗАЦИЯ TIFF ФАЙЛОВ ===") print(f"Путь: {relative_folder_path}") # Абсолютный путь к папке с данными folder_path = os.path.join(project_root, relative_folder_path) print(f"Абсолютный путь: {folder_path}") # Путь для сохранения PNG (папка со скриптом) script_dir = os.path.dirname(current_file_path) print(f"Папка скрипта (куда сохранятся PNG): {script_dir}") if not os.path.exists(folder_path): print(f"ОШИБКА: Папка не найдена!") return # Параметры target_bands = ("B1", "B2", "B3", "B4", "B5", "B6", "B7") visualize_rgb_bands = ("B7", "B6", "B2") # Находим файлы all_files = os.listdir(folder_path) tif_files = [f for f in all_files if f.lower().endswith(".tif")] if not tif_files: print("ОШИБКА: В папке нет TIFF файлов!") return # Ищем файлы для каждого канала image_files = [] for band in target_bands: found = [f for f in tif_files if f"_{band}." in f] if found: image_files.append(found[0]) else: print(f"ВНИМАНИЕ: Канал {band} не найден") if len(image_files) < 3: print("ОШИБКА: Недостаточно каналов для визуализации!") return # Загружаем данные print(f"\nЗагружаем каналы: {[band for band in target_bands if any(f'_{band}.' in f for f in image_files)]}") # Загружаем первый канал для получения размеров first_band_path = os.path.join(folder_path, image_files[0]) first_band_ds = gdal.Open(first_band_path) width, height = first_band_ds.RasterXSize, first_band_ds.RasterYSize # Создаем словарь для каналов band_dict = {} img_data = {} # Загружаем только нужные для визуализации каналы for band in visualize_rgb_bands: for file in image_files: if f"_{band}." in file: band_path = os.path.join(folder_path, file) ds = gdal.Open(band_path) if ds: data = ds.ReadAsArray() img_data[band] = data band_dict[band] = data print(f" Загружен канал {band}: {file}") print(f" Min={data.min():.2f}, Max={data.max():.2f}, Mean={data.mean():.2f}") break if len(img_data) < 3: print("ОШИБКА: Не удалось загрузить все каналы для визуализации!") return # Нормализуем каналы def normalize_band(band): min_val, max_val = np.min(band), np.max(band) if max_val > min_val: return (band - min_val) / (max_val - min_val) return np.zeros_like(band) # Создаем RGB изображение rgb_bands = [] for band in visualize_rgb_bands: if band in img_data: rgb_bands.append(normalize_band(img_data[band])) rgb_image = np.dstack(rgb_bands) print(f"\nСоздано RGB изображение:") print(f" Размер: {rgb_image.shape}") print(f" Диапазон: [{rgb_image.min():.4f}, {rgb_image.max():.4f}]") # Анализ черного фона black_threshold = 0.01 black_mask = np.max(rgb_image, axis=2) <= black_threshold black_count = np.sum(black_mask) total_pixels = black_mask.size percentage = black_count / total_pixels * 100 print(f"\nАнализ черного фона (порог={black_threshold}):") print(f" Черных пикселей: {black_count:,} из {total_pixels:,} ({percentage:.1f}%)") # Создаем RGBA изображение alpha = np.ones_like(black_mask, dtype=np.float32) alpha[black_mask] = 0 rgba_image = np.dstack((rgb_image, alpha)) # СОХРАНЕНИЕ PNG В ПАПКУ СО СКРИПТОМ print(f"\n=== СОХРАНЕНИЕ PNG ===") # Получаем базовое имя из первого файла base_name = image_files[0].rsplit('_', 1)[0] png_filename = f"{base_name}_rgba.png" png_path = os.path.join(script_dir, png_filename) # Конвертируем в 8-битный формат (0-255) rgba_8bit = (rgba_image * 255).astype(np.uint8) # Создаем и сохраняем изображение через PIL img_pil = Image.fromarray(rgba_8bit, mode='RGBA') img_pil.save(png_path, 'PNG') print(f"Сохранено RGBA изображение в PNG: {png_path}") print(f"Размер файла: {os.path.getsize(png_path) / 1024:.1f} KB") # ВИЗУАЛИЗАЦИЯ - ТОЛЬКО RGBA ИЗОБРАЖЕНИЕ print(f"\n=== ВИЗУАЛИЗАЦИЯ RGBA С ПРОЗРАЧНОСТЬЮ ===") # Создаем одну фигуру с RGBA изображением plt.figure(figsize=(12, 10)) # Отображаем RGBA изображение plt.imshow(rgba_image) plt.title(f'RGBA с прозрачностью') plt.axis('off') plt.tight_layout() print(f"\n=== ГРАФИК СОЗДАН ===") print("Закройте окно графика для завершения...") plt.show() print("\n=== ВИЗУАЛИЗАЦИЯ ЗАВЕРШЕНА ===") if __name__ == "__main__": # Указываем путь для визуализации relative_folder_path = "geo-images/LC09_L1TP_145021_20220507_20230417_02_T1/" # Запускаем визуализацию visualize_tiff_bands(relative_folder_path)