Я хотел бы запустить счетчик после каждого пика в сгенерированном массиве 1D NumPy - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть некоторый код, в котором после каждого цикла анализируется изображение, и среднее значение интенсивности пикселей из изображения добавляется в одномерный массив (result_array).Таким образом, этот одномерный массив увеличивается на одно значение в каждом цикле.Массив со временем отображает частоту, и я хотел бы запустить счетчик для подсчета кадров между каждым «пиком», чтобы я мог использовать это значение для расчета частоты в минуту.

Например: когдаЯ печатаю (result_array) Я получаю это после 28 циклов:

[255.   3.   1.   0.  16.  26.   3.   0.   0.   0.   0.   0.   0.   0.
   2.  11.   1.   0.   0.   0.   0.   0.   0.   0.   4.  12.   1.   0.] 

На глаз пики 255, 26, 11 и 12, и каждое число между ними - это кадр, которым я хотел бы бытьпосчитали и превратили в значение для частотного уравнения.Затем обновляется и повторяется после каждого пика.Как мне определить эту позицию и затем начать подсчет?У меня очень мало знаний в области программирования, поэтому чем больше базовых знаний, тем лучше.

Вот мой цикл:

while True:
    ret, frame = cap.read()
    fgmask = fgbg.apply(frame)

    cv2.imshow('Original', frame)
    cv2.imshow('Masked', fgmask)

    average = (np.average(fgmask))
    average_int = int(average)

    result_array = np.append(result_array, average_int)
    print(result_array) 

Надеюсь, это было понятно, дайте мне знать, если вам нужна дополнительная информация.

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Используйте find_peaks_cwt из scipy.signal, чтобы получить все пиковые позиции, а затем рассчитать различия

>>> from scipy import signal
>>> peaks_pos = signal.find_peaks_cwt(result_array, range(1, 5))
>>> peaks_pos 
array([ 1,  5, 15, 25])
>>>
>>> peaks_pos[1:] - peaks_pos[:-1]
array([ 4, 10, 10])

0 голосов
/ 09 апреля 2019

Внесение изменений в предложение @ c2huc2hu в комментариях.

from spicy.signal import find_peaks
peaks, _ = find_peaks(result_array)

Пики теперь равны

array([ 5, 15, 25])

, которые являются индексами пиков в вашем массиве.Это само должно служить вашим счетчиком - перед первым пиком есть пять элементов, затем десять (15-5), затем десять (25-15).

Вы можете проверить этот вывод с помощью

result_array[peaks]

, что даст

array([26., 11., 12.])

локальные максимумы вашего массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...