4 votos

Cómo comprobar dañado trama de datos?

Estoy trabajando con miles de azulejos (2 km x 2 km) 4-banda de NAIP imágenes. Cuando me jugaba las imágenes en Erdas, el programa dañado muchos de los azulejos. La captura de pantalla muestra un ejemplo de uno de los corruptos de los rásteres. Usted puede ver que hay una pequeña franja de tiempo real de los valores de los píxeles en la parte superior de ese rango de 0 - 255. Es probable que no podría ser una tira en cualquiera de los lados de la imagen. La mayor zona negra que contiene todos los valores 0.

Mis intentos de programación de escaneo de los azulejos para un máximo de píxeles valor de 0 o de un único número de píxeles de 0 error debido a la pequeña área de la legítima de los valores de píxeles. Este es un enfoque simplificado he estado usando:

import arcpy

# input raster data is 8-bit unsigned integer with 4 bands (CIR)
raster = r'D:\temp\4310605_ne_4_2.tif'

p = arcpy.GetRasterProperties_management(raster, "MAXIMUM")

if p == 0:
     print "there is a problem"

¿Qué método rápido y eficaz que puedo utilizar para la comprobación de 4 bandas en los archivos tiff para estos corruptos áreas?

enter image description here

4voto

Aaron Puntos 25882

Edificio en FelixIP la respuesta, el siguiente método comprueba 1) valores cero en un 200x200m área que se encuentra en el centro de la imagen y 2) corrupto rásteres que no va a leer. La mala archivos se añaden a una de las dos listas basadas en el problema. La eficiencia es buena, con el análisis de secuencias de comandos ~2 azulejos/seg.


import arcpy, os, numpy

arcpy.env.workspace = r'D:\temp\tiles'

rasters = arcpy.ListRasters()

counter = 1
length = len(rasters)

badTiffs = []
corruptTiffs = []

for ras in rasters:
    try:
        r = arcpy.sa.Raster(ras)

        lowerLeft = arcpy.Point(r.extent.XMin + 820,r.extent.YMin + 820)

        myArray = arcpy.RasterToNumPyArray(ras,lowerLeft,200,200)

        if numpy.max(myArray) == 0:
            badTiffs.append(ras)

        print "%s of %s rasters processed" % (counter, length)

    except RuntimeError:
        corruptTiffs.append(ras)

    counter = counter + 1

del counter

2voto

FelixIP Puntos 4035

Reemplazar coordenadas del punto a continuación por trama medida en el centro de coordenadas del punto de

    p=arcpy.Point()
    with arcpy.da.UpdateCursor(pntFile,("SHAPE@XY",theFLD)) as rows:
            for row in rows:
                    XY=row[0]
                    p.X,p.Y=XY
                    myArray = arcpy.RasterToNumPyArray(raster,p,1,1,-9999)
                    row[1]=myArray[0,0]
                    rows.updateRow(row)
                    arcpy.SetProgressorPosition()
            del row,rows

y si myArray[0,0]=0 hay un 99% de probabilidades de que hay un problema

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X