image augmentImages

Generación Masiva de Parches para Segmentación de Cobertura Terrestre

Scénario de test & Cas d'usage

Contexto empresarial

Una agencia geoespacial necesita entrenar un modelo de segmentación de imágenes para clasificar la cobertura del suelo (bosque, agua, urbano) a partir de imágenes satelitales de alta resolución. Dado que las imágenes originales son muy grandes, el objetivo es generar un conjunto de datos masivo de parches pequeños (256x256) que cubran toda la superficie de las imágenes de entrada, aplicando mutaciones para simular diferentes condiciones atmosféricas y estacionales.
Sobre el conjunto : image

Procesamiento, manipulación y análisis de imágenes.

Descubrir todas las acciones de image
Preparación de datos

Creación de una tabla que referencia dos imágenes satelitales de gran tamaño (simuladas).

¡Copiado!
1DATA mycas.imagenes_satelite;
2 LENGTH region_id $10 image_path $200;
3 INPUT region_id $ image_path $;
4 DATALINES;
5 AMAZONAS /path/to/large_satellite_image_1.tif
6 CONGO /path/to/large_satellite_image_2.tif
7 ;
8RUN;
9 
10PROC CAS;
11 image.loadImages /
12 path='imagenes_satelite'
13 casOut={name='cas_satelite', caslib='mycas', replace=true}
14 TABLE={name='imagenes_satelite', caslib='mycas'}
15 copyVars={'region_id'};
16RUN;

Étapes de réalisation

1
Utilizar 'sweepImage' para barrer cada imagen satelital con una ventana de 256x256 y un solapamiento del 50% ('stepSize'=128). Para cada parche, generar dos versiones: una con cambio de color y otra más nítida.
¡Copiado!
1PROC CAS;
2 image.augmentImages /
3 TABLE={name='cas_satelite', caslib='mycas'}
4 seed=2024
5 augmentations={{
6 sweepImage=true, width=256, height=256, stepSize=128,
7 mutations={{colorShifting=true}, {sharpen=true}}
8 }}
9 casOut={name='parches_satelite', caslib='mycas', replace=true}
10 copyVars={'region_id'}
11 image='_image_';
12RUN;
2
Contar el número de parches generados para verificar que el barrido y la mutación múltiple han funcionado como se esperaba, produciendo un gran volumen de datos.
¡Copiado!
1PROC CAS;
2 SIMPLE.numRows /
3 TABLE={name='parches_satelite', caslib='mycas'};
4RUN;

Resultado esperado


La acción debe ejecutarse sin errores de memoria, a pesar del gran número de parches generados. La tabla de salida 'parches_satelite' debe contener un número muy elevado de filas (dependerá del tamaño de las imágenes de entrada, pero se esperan miles o millones de parches). Cada imagen original habrá generado `2 * (N_parches_horizontales * N_parches_verticales)` filas en la tabla de salida. La columna 'region_id' debe estar correctamente propagada a todos los parches generados.