¿Cómo solucionar un proceso de mosaico grande que está fallando?

11

Necesito crear mosaicos de aproximadamente 550 Gb de imágenes tif juntas y el software que he probado sigue fallando. El área se ha dividido en zonas para que la más pequeña tenga aproximadamente 200 fichas.

He utilizado las últimas versiones de ERDAS (Imagine and Mapper), ArcINFO y Global Mapper en un Intel Xeon E31245, DELL, 3.30 gigahercios, 16 GB de RAM, Win 7 Professional de 64 bits. Máquina Mullti-core (4 en total), Hyper-thread (8 en total). Mi C tiene 700GB gratis y D tiene 1.5TB.

Estoy buscando usar Grass (nunca lo he hecho antes) pero i.image.mosaic solo parece manejar solo 4 archivos ... algunos de los míos tienen 600 mosaicos. ¿Alguna otra opción o software de código abierto para probar?

Lo sentimos, debería agregar que no podemos usar un dataset de mosaico (o equivalente en otro software) ya que necesitamos crear zonas con áreas definidas sin datos como ecw para que puedan abrirse en cualquier software SIG y combinarse con una resolución menor / anterior datos cuando los nuevos datos no existen a la perfección.

ingrese la descripción de la imagen aquíUn ejemplo de cómo se ven algunos archivos en mosaico en diferentes sofware. Global Mapper / ERDAS están bien, pero no es correcto en arcgis.

--- INFORMACIÓN ANTERIOR ---

ingrese la descripción de la imagen aquí

Perdón por el dibujo preliminar. Por lo tanto, tener las áreas coloreadas como 5 zonas minimizará las áreas sin datos en el AOI más grande.

En arcgis, el código es el siguiente (esto se ejecuta como modelo y no en python, ya que no puedo hacer que tome la entrada tifList).

arcpy.MosaicToNewRaster_management(tifList+";" +mask,RootOutput,"Tile1.tif","PROJCS['GDA_1994_MGA_Zone_55',GEOGCS['GCS_GDA_1994',DATUM['D_GDA_1994',SPHEROID['GRS_1980',6378137.0,298.257222101]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]],PROJECTION['Transverse_Mercator'],PARAMETER['False_Easting',500000.0],PARAMETER['False_Northing',10000000.0],PARAMETER['Central_Meridian',147.0],PARAMETER['Scale_Factor',0.9996],PARAMETER['Latitude_Of_Origin',0.0],UNIT['Meter',1.0]]","16_BIT_UNSIGNED","0.5","3","MAXIMUM","#")

# Replace a layer/table view name with a path to a dataset (which can be a layer file) or create the layer/table view within the script
# The following inputs are layers or table views: "test2"

arcpy.CopyRaster_management(OutputFile,RootOutput+"Tile1b.tif","#","256","256","NONE","NONE","16_BIT_UNSIGNED")

donde tifList debería leerse desde un archivo csv pero esto no funcionó en python, así que estoy ejecutando lo anterior en un modelo ...

Tengo 1.5TB + espacio libre en mi disco, pero el proceso se bloquea con un error 9999.

¿Procesarían incluso 100 fichas? ¿Deberíamos considerar dividir más las zonas?

GeorgeC
fuente
3
Esa es una cantidad increíble de datos para impulsar. No estás tratando de fusionarlo en un archivo TIF descomunal, ¿verdad? Sugeriría crear un dataset de mosaico o un servicio de mapas en caché .
blah238
sí, es ... no, será idealmente 7 ecw individuales o tif (si usa arcgis). Puedo agregar una imagen del tamaño / zonas, pero no estoy seguro de si eso sería útil.
GeorgeC
Según sus comentarios sobre su organización que utiliza MapInfo y otro software, en lugar de ArcGIS, estoy eliminando mi respuesta, ya que realmente no resuelve sus necesidades en absoluto. Sin embargo, le sugiero que incluya algunos detalles sobre sus requisitos de software en su pregunta para evitar un mayor viaje por el camino de Esri.
Obtenga espacial
@ GetSpatial: gracias por la respuesta detallada. Es una solución a corto plazo y probablemente la usaremos, pero como mencioné en mi pregunta, somos realmente independientes del software y tenemos los grandes (ESRI / ERDAS / MAPINFO y Global Mapper). La clave para nosotros es el resultado: ~ 5 mosaicos con áreas definidas sin datos para que se puedan utilizar otras imágenes. Los ECW deben tener los datos sin datos definidos en todo el software. Hemos encontrado que algunos mosaicos no retienen las propiedades sin datos en diferentes programas. Publicaré un ejemplo. Gracias de nuevo. Me gustaría pedirle que mantenga su respuesta aquí, la votaré.
GeorgeC

Respuestas:

9

Tendré que usar las sugerencias de 2nd @ blah238 de usar algún otro método de acceso a datos que no sea crear una sola imagen en mosaico. Una simple suposición diría que no hay un escritorio que pueda manejar la cantidad de datos que tendrías que procesar para hacer un mosaico de todos esos mosaicos.
Para desglosarlo, probablemente hay dos lugares donde se está quedando sin espacio.

  1. El primero va a estar en tu memoria RAM. Para mosaico de datos, está fusionando todo en un solo archivo, lo que significa idealmente, que todo el archivo se mantendrá en la memoria. No tiene 550 GB de RAM, lo que significa que habrá lectura / escritura desde la memoria virtual. Eso es suficiente para bloquear el proceso allí mismo.
  2. Es probable que el otro problema sea el espacio en el disco duro. Muchas de las operaciones ráster crean archivos temporales en su directorio de "espacio de trabajo" que son bastante grandes. Puede haber 2 o 3 o más de estos incluso antes de que se escriba el conjunto de datos final, por lo que es concebible utilizar todo el espacio en disco durante el procesamiento.

Ahora, para otras soluciones. Como se menciona en los comentarios anteriores, existe la opción de crear un conjunto de datos de mosaico . Este conjunto de datos le permitirá no solo tratar todos los mosaicos individuales como una sola imagen integrada, sino que también mantiene los metadatos sobre los mosaicos individuales que contiene. También le permite realizar operaciones ráster como Sombreado .

La otra opción que recomendaría, en base a su comentario acerca de querer separar las zonas, sería crear un Catálogo Ráster . Un catálogo de ráster es esencialmente una capa de grupo. Puede agregarle múltiples datasets ráster. Se pueden administrar en una geodatabase e importar los rásteres, o simplemente crear un conjunto de datos no administrado donde el Catálogo de ráster mantiene las rutas a los conjuntos de datos ráster originales. Cuando carga esta capa en ArcMap, puede configurar las propiedades de visualización para que solo se carguen en un cierto número de mosaicos ráster a la vez, o establecer la escala y la resolución de la pantalla.
Actualmente estoy usando un catálogo ráster para colocar un conjunto de fotos aéreas de más de 100 GB. El rendimiento es muy bueno. Si está buscando un tipo diferente de almacenamiento de datos simplemente para administrar una gran cantidad de mosaicos, realmente lo recomendaría.

Aquí hay un código que puede usar para crear un catálogo de ráster y luego importar un espacio de trabajo de mosaicos en él:

import arcpy
import os

newdir = r"c:\data"
dbname = "Aerialphotos.gdb"
gdbdir = os.path.join(newdir, dbname)
rcat = "AerialCatalog"

arcpy.CreateRasterCatalog_management(gdbdir, rcat,
                                     "NAD 1983 StatePlane California VI FIPS 0406 (US Feet).prj", 
                                     "NAD 1983 StatePlane California VI FIPS 0406 (US Feet).prj",
                                     "MAX_FILE_SIZE_4GB", "1000", "3000", "9000",
                                     "UNMANAGED", "")

#Load all raster datasets in workspace to Raster Catalog
rcatdir = os.path.join(gdbdir, rcat)
rastertiledir = os.path.join(newdir, "tiles")

arcpy.WorkspaceToRasterCatalog_management(rastertiledir, rcatdir,
                                          "INCLUDE_SUBDIRECTORIES",
                                          "PROJECT_ONFLY")

¡Espero que esto ayude!

------------- Editar

Aquí hay un gráfico de los mosaicos manejados por mi catálogo de ráster. Tenga en cuenta que puede elegir que se muestren las tramas o los datos ráster. El catálogo de ráster tiene una tabla de atributos a la que puede agregar campos, por ejemplo, si desea agregar designaciones de zona como en su gráfico. Luego, puede elegir mostrar solo esos rásteres en una zona en particular.
Al imprimir en un gráfico desde la vista de diseño, se utiliza la resolución completa de los rásteres, por lo que no hay pérdida de calidad en la impresión.

ingrese la descripción de la imagen aquí

Aquí está el mismo gráfico, pero muestra algunos de los datos ráster, junto con algunos marcos.

ingrese la descripción de la imagen aquí

Consigue espacial
fuente
Gracias por su tiempo en esto. Es una buena solución a corto plazo, pero como la organización utiliza Mapinfo y otro software, realmente necesitamos poder crear ecw con el área del consejo dividida en aproximadamente 5 zonas. Mapinfo tiene capas sin costura (similar a Raster Catalog). Pero es importante que se definan áreas sin datos para que podamos subyacer las nuevas imágenes con imágenes más antiguas que tengan una cobertura más amplia y reduzcamos la cantidad de archivos para abrir.
GeorgeC
1
En el futuro, probablemente obtendrá una respuesta más relevante si proporciona este tipo de información en su pregunta inicial.
Obtenga espacial
1
¿Has mirado qué servicios de mapas web puede consumir MapInfo? Sospecho que querrá colocar versiones en caché de todos estos datos en un servidor para el consumo de su organización, no los datos en bruto. Creo que lo que no requiere datos es un punto discutible con los servicios de mapas, ya que simplemente no crearía mosaicos donde no hay datos, y lo que esté debajo se mostrará.
blah238
7

Sé que llego tarde a la fiesta. Pero aquí está mi sugerencia.

1) tamaño de imagen
Si sus originales de 550 GB no están comprimidos, debe convertirlos a archivos tiff comprimidos jpeg. Guárdelos individualmente (no fusionados). Puedes comprimir usando arcgis, gdal, lo que quieras. La compresión te llevará a alrededor de 23 GB. No cree pirámides / vistas generales todavía. Para comprimir puedes usar cualquier programa gis que quieras, pero me gusta usar gdal, así que el comando es básicamente este:

gdalwarp -multi -wm 512 --config  GDAL_CACHEMAX 512 -co compress=jpeg -co tiled=yes -co jpeg_quality=70 -co PHOTOMETRIC=YCBCR -co INTERLEAVE=PIXEL uncompressed.tif compressed.tif

Puede crear fácilmente un archivo bat que pase por todos sus tiffs sin comprimir. Me gusta usar gdalwarp para comprimir mis imágenes en lugar del gdal_translate habitual, porque es más rápido (usando la opción múltiple para multi-core y -wm para mucha memoria).

2) manejo como una sola imagen
Puede crear un mosaico "virtual" utilizando el formato gdal vrt. Esto es compatible con arcgis, qgis, mapserver, etc. No estoy seguro acerca de global mapper e mapinfo. El formato .vrt es solo un archivo xml que enumera sus imágenes. Ese es un comando único para crear:

gdalbuildvrt nameofmosaic.vrt compressed_tif_folder\*.tif

Este archivo tiene unos pocos kb de tamaño.

3) visualización acelerada
Tienes que construir pirámides / vistas generales. Simplemente use su software preferido para esto. Siguiendo con las herramientas de gdal puedes:

gdaladdo -ro -r average --config COMPRESS_OVERVIEW JPEG --config JPEG_QUALITY_OVERVIEW 70 nameofmosaic.vrt 2 4 8 16 32 64 128

Esto llevará mucho tiempo. Esté listo para esperar de 2 a 3 días de procesamiento continuo.

4) uso del mosaico
Cargue el mosaico virtual en su programa gis. Será rápido porque está leyendo las descripciones generales que están en 1 archivo como un ecw. Cuando acercas la resolución real de tus imágenes, solo se leerán las pocas imágenes visibles de las imágenes comprimidas, y eso también es muy rápido.

5) manejo de las áreas sin datos que muestran negro
Tiene 3 soluciones para esto: i) use un formato de archivo que maneje nodata, lo que será complicado; o ii) use una banda alfa o iii) un archivo de máscara. Puede crear una banda alfa automáticamente en el paso 2 diciéndole a GDAL que desea que las áreas de nodos estén en la banda alfa; simplemente agregue la opción -addalpha:

gdalbuildvrt -addalpha nameofmosaic.vrt compressed_tif_folder\*.tif

El problema con las bandas alfa es que se comprimen mal. Entonces sus vistas generales serán más grandes. Si te parece bien, entonces ya terminaste.

Si desea crear un archivo de máscara, entonces es un poco más complicado. Y creo que esto no encaja en la presente pregunta.

Espero que esto ayude. Puede encontrar información sobre las herramientas de gdal buscando en Google. Un montón de cosas interesantes alrededor.

Duarte Carreira
fuente
1
Buen post. Tenga en cuenta que gdalwarp cuando la deformación (por ejemplo, reproyección, remuestreo, etc.) tiene un problema de larga data con la creación de resultados mucho más grandes de lo necesario cuando se utiliza la compresión. En estos casos, es mejor omitir la compresión en la fase gdalwarp y continuar con una gdal_translate -co compress=xxxposterior. Esto no es un problema si solo se usa como traductor (como se sugiere aquí).
Matt Wilkie
1
Gracias. Creo que ese problema está resuelto ya que últimamente he estado proyectando y comprimiendo al mismo tiempo y obtuve buenas relaciones.
Duarte Carreira
5

Un único archivo ECW maneja fácilmente 550 gb de datos TIF de entrada. Tenemos muchos clientes que comprimen conjuntos de datos mucho más grandes que esto, así que no piense que el formato no es capaz en esta área.

Su estrategia de dividir el proyecto en pequeños mosaicos para minimizar el área nula también es un buen enfoque con la versión de formato actual, ya que reducirá el tiempo de compresión

Su ejemplo incluye referencia a datos de entrada de 16 bits sin firmar. Recomendaría volver a escalar a 8 bits si es posible (dependiendo de sus requisitos)

Explique por qué no pudo procesar su proyecto usando IMAGINE o ERMapper ya que sin esta información no puedo ayudarlo. O mejor aún contacte al equipo de soporte local

Tenga en cuenta que al usar el formato de conjunto de datos de mosaico de ESRI, lo que las respuestas anteriores no mencionan es el requisito para generar la capa de pirámide / descripción general. Sin ella, el rendimiento sufrirá considerablemente. Es probable que pueda crear los archivos equivalentes de ECW en la misma cantidad de tiempo, pero haya mejorado la calidad de imagen y los requisitos de almacenamiento de salida significativamente más pequeños.

Chris Tweedie
fuente
1
Según la nueva información proporcionada, las áreas nulas de ECW no se muestran correctamente en ESRI porque todavía empaquetan el SDK v3 muy antiguo que no tiene soporte de canal de opacidad (simplemente se ignora). Para solucionar esto, visite erdas.com y descargue el complemento ArcGIS ECW que instalará el v4 SDK con soporte de opacidad y los ECW mostrarán lo mismo que en el software Globalmapper y ERDAS
Chris Tweedie
Solo para tener en cuenta que este complemento solucionó el "problema" en ArcGIS, pero luego rompió la visualización de Mapinfo ecw y, por lo tanto, tuvo que desinstalarse en cualquier máquina que tuviera ambas.
GeorgeC
4

Aunque es claramente mejor usar una de las otras opciones mencionadas, puede intentar lo siguiente:

gdalbuildvrt index.vrt *.tif
gdal_translate -of "GTiff" -co "COMPRESS=LZW" -co "TILED=YES" -co "BIGTIFF=YES" index.vrt out.tif

Esto crea un formato virtual GDAL y luego se convierte a un solo GeoTiff.

Matthew Snape
fuente
3

Eso me suena bastante familiar, también producimos grandes archivos ECW individuales de 500 también 1TB de archivos TIF. Pero no duraría en ArcGIS (ArcObjects y el motor de geoprocesamiento), ya que no puede realizar un mosaico de esta cantidad de manera confiable. Si desea permanecer en el mundo de ESRI, le recomendaría mosaico de fragmentos de aproximadamente 50 GB o incluso más pequeños a la vez a un conjunto de datos ráster almacenado en una geodatabase de archivos. La herramienta mosaico tiende a bloquearse después de un tiempo, por lo que es una buena idea dejar que ArcGIS libere memoria después de algunos GigaBytes.

Otra posibilidad es utilizar una geodatabase SDE de empresa o grupo de trabajo. Con SDE obtienes las herramientas de línea de comandos SDE anticuadas, que se basan en una arquitectura robusta de C ++ que no son las cosas poco confiables de ArcObjects. Con el comando "sderaster -o mosaic ...", puede crear mosaicos en un RasterDataset hasta que su almacén de Base de datos esté lleno. También hay comandos para construir pirámides y estadísticas para el RasterDataset, de lo contrario no es muy útil, porque la mayoría de los clientes no pueden guardar las imágenes en la memoria cuando lo leen, como blah238 mencionado anteriormente. Pero las pirámides (de hecho, la indexación espacial) deberían resolver este problema.

Pero estas soluciones no lo ayudan con MapInfo con seguridad. Mencionaste que ya has probado ERDAS Mapper. Esa es también la herramienta que preferiría. Ya hicimos mosaicos de 16000 archivos TIF, cada uno de 50 MB de tamaño juntos, que son 800 GB. Luego lo comprimimos en un solo ECW con una relación de compresión de 1:20 que resultó en un archivo ECW de 30 GB. Me pregunto si esto no funciona para ti ...

Al menos todo el proceso se estaba ejecutando en un solo núcleo Pentium 4 1,6 GHz con 2 GB de RAM, por lo que el hardware no debería ser el problema. Estamos utilizando Windows Server 2003 (u otro sistema operativo del servidor) porque utiliza mejor los recursos de hardware. Tenga en cuenta que todo el proceso de compresión necesita mucho tiempo. Nuestra máquina estuvo trabajando alrededor de 5 semanas en ese único archivo, y debido a que a veces también fallaba, tuvimos que hacer esto varias veces, pero al final obtuvimos nuestro archivo ECW.

No conozco otro sistema o mecanismo para almacenar grandes cantidades de rásteres de una manera neutral en su mayoría de proveedores. Todas las formas mencionadas anteriormente son muy específicas de ESRI. Al menos con Oracle RASTER y una implementación bastante similar en PostGIS, hay dos variantes basadas en datos que, además, no son neutrales para el proveedor, sino que se abren a través de la interfaz SQL / MM.

Espero que esto ayude un poco.

Jürgen Zornig
fuente
Gracias por su aliento, que funcionó en conjuntos de datos aún más grandes. Con ERDAS, el problema no era solo el tamaño del conjunto de datos que causaba un bloqueo, sino también las áreas sin datos que no se definían correctamente. Ver pregunta actualizada. ¿Ha documentado el proceso que utilizó en ERDAS y puede compartirlo?
GeorgeC