una segmentacion sal ruido recorrer pimienta para imagenes imagen filtros filtro eliminar convolucion comparar como bilateral python numpy scipy gaussian

python - segmentacion - Cómo obtener un filtro gaussiano ponderado



filtros para imagenes en python (1)

Tenga en cuenta que la siguiente idea no es una solución exacta, pero vale la pena intentarlo.

La idea es usar el parámetro de peso w para repetir los valores correspondientes en x e y . Entonces, si escala w por ejemplo dentro del rango [1,10] todos los valores correspondientes en x y así en y se duplicarán 10 veces para w igual a 10. Es decir, se crearán nuevas x , y . De esta forma, incorporamos el peso como frecuencia de valores en x e y , de hecho. Una vez hecho esto, alimentar a los nuevos con su algoritmo con suerte le dará los resultados deseados como se muestra en los ejemplos trabajados a continuación.

  • Para la primera figura, el espectro azul a rojo corresponde a pesos inferiores a altos. Los números de título son el factor de duplicación como se describió anteriormente.
  • Para la segunda figura, sus datos, no tocamos su formato de color.

Tengo un conjunto de puntos ponderados x,y , como se muestra a continuación (el conjunto completo está aquí ):

# x y w -0.038 2.0127 0.71 0.058 1.9557 1 0.067 2.0016 0.9 0.072 2.0316 0.83 ...

Necesito encontrar una línea suavizada que ajuste estos puntos según la importancia asignada a cada uno, es decir: más peso significa que el punto de datos debería tener más relevancia.

Este es el código que tengo hasta ahora, que básicamente aplica un gaussian_filter1d a los datos (obtuve la idea de esta pregunta: algoritmo de suavizado de líneas en python? ):

import matplotlib.pyplot as plt import numpy as np from scipy.ndimage import gaussian_filter1d # Read data from file. data = np.loadtxt(''data_file'', unpack=True) x, y, w = data[0], data[1], data[2] # Return evenly spaced numbers over a specified interval. t = np.linspace(0, 1, len(x)) t2 = np.linspace(0, 1, 100) # One-dimensional linear interpolation. x2 = np.interp(t2, t, x) y2 = np.interp(t2, t, y) # Obtain Gaussian filter with fixed sigma value. sigma = 7 x3 = gaussian_filter1d(x2, sigma) y3 = gaussian_filter1d(y2, sigma) # Make plot. cm = plt.cm.get_cmap(''RdYlBu'') plt.scatter(x, y, marker="o", c=w, s=40, cmap=cm, lw=0.5, vmin=0, vmax=1) plt.plot(x3, y3, "r", lw=2) plt.show()

Este código produce el siguiente gráfico (los puntos más azules tienen un valor de peso mayor):

El problema es que este ajuste no considera los pesos asignados a cada punto . ¿Cómo puedo introducir esa información en el filtro gaussiano?