with images array python scipy signal-processing image-segmentation

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.



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]