11 votos

Histograma correspondiente utilizando Python para mejorar mosaicking proceso de múltiples superposición de los rásteres?

Estoy tratando de hacer el histograma correspondiente utilizando Python para mejorar la mosaicking proceso de múltiples superposición de los rásteres. Me estoy basando mi código en la que se encuentra en:

http://www.idlcoyote.com/ip_tips/histomatch.html

A la fecha, he conseguido recortar el área de superposición de dos adyacentes rásteres y aplanar la matriz.

así que tengo dos 1 dimensiones de las matrices de la misma longitud.

Entonces he escrito el siguiente código en la que se encuentra en el sitio web anterior. En el código mostrado me han sustituido dos pequeños conjuntos de datos para el gd y bd de imágenes.

import matplotlib.pyplot as plt
from scipy.interpolate import interp1d

bins = range(0,100, 10)

gd_hist = [1,2,3,4,5,4,3,2,1]

bd_hist = [2,4,6,8,10,8,6,4,2]

nPixels = len(gd_hist)

# here we are creating the cumulative distribution frequency for the bad image
cdf_bd = []
for k in range(0, len(bins)-1):
    b = sum(bd_hist[:k]) 
    cdf_bd.append(float(b)/nPixels)

# here we are creating the cumulative distribution frequency for the good image
cdf_gd = []
for l in range(0, len(bins)-1):
    g = sum(gd_hist[:l])
    cdf_gd.append(float(g)/nPixels) 


# we plot a histogram of the number of 
plt.plot(bins[1:], gd_hist, 'g')
plt.plot(bins[1:], bd_hist, 'r--')
plt.show()        

# we plot the cumulative distribution frequencies of both images
plt.plot(bins[1:], cdf_gd, 'g')
plt.plot(bins[1:], cdf_bd, 'r--')
plt.show()

z = []
# loop through the bins
for m in range(0, len(bins)-1):

    p = [cdf_bd.index(b) for b in cdf_bd if b < cdf_gd[m]] 
    if len(p) == 0:
        z.append(0)
    else:
        # if p is not empty, find the last value in the list p
        lastval = p[len(p)-1]

        # find the bin value at index 'lastval'
        z.append(bins[lastval])

plt.plot(bins[1:], z, 'g')
plt.show()

# look into the 'bounds_error'
fi = interp1d(bins[1:], z, bounds_error=False, kind='cubic')  
plt.plot(bins[1:], gd_hist, 'g')
plt.show
plt.plot(bins[1:], fi(bd_hist), 'r--')
plt.show()

Mi programa de parcelas de los histogramas y distribuciones de frecuencia acumulada de éxito...y yo que pensaba que tenía la parte de conseguir la transformación de la función de la 'z' correcto....pero luego cuando utilice la función de distribución de 'fi' en el 'bd_hist' para tratar de igualar a la gd conjunto de datos todo se va en forma de pera.

Yo no soy un matemático y es muy probable que me ha pasado por alto algo bastante obvio.

2voto

Mientras que no puedo comentar sobre la propuesta de implementación, es posible que desee comprobar una implementación existente de histograma de coincidencia hecho de GRASS GIS 7 (aquí un addon):

https://trac.osgeo.org/grass/browser/grass-addons/grass7/imagery/i.histo.match

Para el manual y ver un ejemplo, consulte

http://grass.osgeo.org/grass70/manuals/addons/i.histo.match.html

El código está publicado bajo la GPL2+ licencia.

1voto

pat Puntos 86

Como un salvaje fudge; No estoy seguro de que usted necesita un PDF si tienes los datos de recuento en las categorías de...
Podría convertir la cuenta de cada valor para cada uno de los diferentes histograma en valores XY y, a continuación, utilizar algún tipo de regresión indicador para comprobar que coinciden? Es decir, para dos perfectamente idénticos histogramas, un análisis de correlación proporcionaría y R cuadrado de 1.0.

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