images - opencv python image to array
¿Señal scipy find_peaks_cwt no encuentra los picos con precisión? (3)
Tengo una señal 1-D en la que estoy tratando de encontrar los picos. Estoy buscando para encontrarlos perfectamente.
Actualmente estoy haciendo:
import scipy.signal as signal
peaks = signal.find_peaks_cwt(data, np.arange(100,200))
La siguiente es una gráfica con manchas rojas que muestran la ubicación de los picos según lo encontrado por find_peaks_cwt()
.
Como puede ver, los picos calculados no son lo suficientemente precisos. Los que son realmente importantes son los tres en el lado derecho.
Mi pregunta: ¿Cómo puedo hacer esto más preciso?
ACTUALIZACIÓN: Los datos están aquí: http://pastebin.com/KSBTRUmW
Para algunos antecedentes, lo que estoy tratando de hacer es ubicar el espacio entre los dedos en una imagen. Lo que se traza es la coordenada x del contorno alrededor de la mano. Manchas cian = picos. Si existe un enfoque más confiable / sólido, por favor deje un comentario.
Hay una solución mucho más fácil utilizando esta función: https://gist.github.com/endolith/250860 que es una adaptación de http://billauer.co.il/peakdet.html
Acabo de probar con los datos que proporcionó y obtuve el resultado a continuación. No hay necesidad de pre-filtrado ...
Disfruta :-)
Solución solucionada:
Filtrar los datos primero:
window = signal.general_gaussian(51, p=0.5, sig=20)
filtered = signal.fftconvolve(window, data)
filtered = (np.average(data) / np.average(filtered)) * filtered
filtered = np.roll(filtered, -25)
Luego usa angrelextrema según la respuesta de rapelpy.
Resultado:
Editado después de obtener los datos en bruto.
Argelmax y Arglextrma están fuera de la carrera.
La curva es muy ruidosa, por lo que tiene que jugar con un ancho de pico pequeño (como se mencionó en la pv.) Y el ruido.
Lo mejor que encontré no se ve muy bien.
import numpy as np
import scipy.signal as signal
peakidx = signal.find_peaks_cwt(y_array, np.arange(10,15), noise_perc=0.1)
print peakidx
[10, 100, 132, 187, 287, 351, 523, 597, 800, 1157, 1451, 1673, 1742, 1836]