Computer Vision
February 18

🌍 Продвинутые методы заполнения пропусков в спутниковых снимках

📷 Спутниковые данные играют ключевую роль в экологическом мониторинге, сельском хозяйстве и городском планировании. Однако одним из главных вызовов их использования остаются пропуски в изображениях, вызванные облачностью, неисправностями сенсоров или шумами в передаче данных. В этой статье мы рассмотрим современные методы заполнения пропусков в спутниковых снимках.

Изображение зимней температуры поверхности Суши (LST) со спутника Landsat

Почему заполнять пробелы необходимо?

📊 Пропуски могут искажать расчеты нормализованного индекса вегетации (NDVI), температуры поверхности и др.

✅ Они влияют на моделирование природных процессов и прогнозирование урожая.

✅ Оптимизируют работу алгоритмов машинного обучения.

Методы восстановления

Один из базовых подходов к заполнению пропусков — применение сверточных фильтров. Они анализируют соседние пиксели и используют их значения для восстановления отсутствующих данных. Например, можно применять размывающие фильтры, которые усредняют значение пикселей в зоне пропуска.

🔄 Сверточные фильтры

from scipy import ndimage

def conv_mapping(x):
    if np.isnan(x[60]) and not np.isnan(np.delete(x, 60)).all():
        return np.nanmean(np.delete(x, 60))
    return x[60]

grid_smooth = ndimage.generic_filter(image, function=conv_mapping, footprint=np.ones((11,11)), mode='constant', cval=np.nan)
Результат применения фильтра свертки 11 x 11

Этот метод работает хорошо при небольших пропусках, но при крупных дефектах может привести к потере деталей.

🌟 Инпейнтинг (Inpainting)

Методы инпейнтинга заимствованы из обработки изображений и используются для восстановления фотографий и картин. Они позволяют «закрашивать» пробелы на основе структуры окружающих пикселей.

💚 Telea метод

Алгоритм быстрого распространения заполняет пробелы, распространяя информацию от границ пропусков к центру.

import cv2 as cv

def inpainting(image):
    mask = np.isnan(image).astype('uint8')
    filled = cv.inpaint(image.astype('float32'), mask, 10, cv.INPAINT_TELEA)
    return filled
Результат применения метода Telea Inpainting

Этот метод быстро работает для небольших и локализованных пробелов.

💛 Метод Навье-Стокса

Использует уравнения гидродинамики для заполнения пробелов, распространяя текстурные линии и градиенты.

def inpainting_ns(image):
    mask = np.isnan(image).astype('uint8')
    filled = cv.inpaint(image.astype('float32'), mask, 10, cv.INPAINT_NS)
    return filled
Результат применения метода рисования Навье-Стокса

Итоги

Маленькие пробелы → Сверточный фильтр

Средние → Метод Telea

Крупные → Навье-Стокс

🔗 Применяйте эти методы для более точного анализа спутниковых снимков! 🚀

📢 Подписывайтесь, чтобы не пропустить новые материалы!
🔹 Teletype.in – блог о машинном обучении
🔹 Телеграм-канал – свежие новости и обсуждения