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.