1 votos

Cálculo de los píxeles de borde dentro de una red de pesca

Tengo un raster con tres clases de cobertura del suelo.

Para una celda de la cuadrícula de red, quiero calcular cuántos píxeles (en %) son "píxeles de borde" (píxeles de diferentes clases de terreno que se tocan). Por ejemplo, si la cuadrícula sólo contiene una clase de cobertura del suelo, el % de píxeles de borde es 0%. Si hay dos o más clases y muchos píxeles de borde/limítrofes, entonces la cantidad de píxeles de borde es superior al 0%.

¿Cómo puedo hacerlo en ArcGIS Pro?

Cuando busco en Internet una herramienta, me devuelve Edge detection for deep learning, que es una exageración.

1voto

FelixIP Puntos 4035

Depende de lo que entiendas por píxel de borde. La imagen de abajo muestra la salida de las estadísticas focales (2 por 2 celdas, Rango) y la línea límite vectorial. Tenga en cuenta que las células donde FS trama igual a 0 son transparentes:

enter image description here

Podrías probar con estadísticas de 3 en 3:

enter image description here

Más atractivo para mí es esto:

  • derivar líneas de límite internas (ráster a polígono polígono a línea, eliminar características con LEFT_FID=-1)
  • tamponarlas en 0,5*ancho_celda
  • dividir el área del búfer por el tamaño de la celda

enter image description here enter image description here

0voto

keeganiden Puntos 61

Se podría escribir un script en python (por ejemplo, utilizando rasterio) que creara un nuevo raster que clasificara los píxeles de la cobertura del suelo como "borde" o no, y entonces sólo sería cuestión de contar los píxeles de "borde" dentro de una celda de red.

import rasterio
import numpy

landcover_dataset = rasterio.open(yourInputFilePath)
landcover_band = dataset.read(1)

def IsEdge(band,r,c):
    #Make a function that looks at pixels adjacent to the pixel at (r, c) in band and returns True if it's an edge pixel, else False

edge_band = numpy.empty((#same size as input))
for r, row in enumerate(landcover_band):
    for c, column in enumerate(landcover_band):
        if IsEdge(landcover_band, r, c):
            edge_band[r][c] = 0
        else:
            edge_band[r][c] = 0

with rasterio.open(yourOutputFilepath, #same profile as input) as new_dataset:
    new_dataset.write(new_band)

0voto

John Kramlich Puntos 286

He aquí otro enfoque, utilice la herramienta Estadísticas y establecer el tipo de estadística en VARIEDAD, esto cuenta el número de clases de píxeles en la vecindad 3x3.

Por tanto, el raster de la cubierta terrestre de entrada podría ser algo así:

Sample

El resultado es este, cualquier cosa mayor que 1 debe ser un píxel adyacente a otra u otras clases.

result

Este enfoque no sólo identifica los píxeles de borde, sino que el valor da una indicación de cuántas clases de terreno son adyacentes.

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