Я пытаюсь повторить исследование в этой статье , чтобы проверить это.
Короче говоря:
Я выделил ряд пикселей из всех кадров в использование видео:
values_list = []
for filename in glob.glob('frames//*.png'):
img = cv2.imread(filename,0)
values_list.append(img[100, :]) #Get all rows at y-axis 17 which is the row pixels
Затем я создал сюжет, используя:
fig, ax = plt.subplots()
width = 10
xlim = 0, width*len(values_list)
ylim = 0, max([len(v) for v in values_list]) + 2
ax.set(xlim=xlim, ylim=ylim, autoscale_on=False)
for i in range(len(values_list)):
plt.imshow(np.array(values_list[i]).reshape(-1, 1), extent=[i * width, (i + 1) * width, 0, len(values_list[i])],
origin='lower', cmap='gray')
ax.set_aspect('auto')
fig.set_size_inches(20, 10.5)
plt.savefig('myimage.png', format='png', dpi=1000)
Это дает следующий сюжет
Вышесказанное эквивалентно тому, что они показывают на б) c) и г) из статьи авторов (но по горизонтали вместо вертикали и в оттенках серого вместо цветов). Как они преобразовали его в эквивалент е) е) и ж), как показано ниже?
Все претензии
Эта модуляция (b) c) и d)) плохо видна на рисунках. Чтобы сделать эту модуляцию более очевидной, мы вычли медленно изменяющийся компонент вдоль вертикального направления на диаграмме отдельно от значения переменной времени каждого пикселя, таким образом усиливая чередующийся компонент (A C) модуляции света, который изменяется при сердцебиении или выше скорость.
Как вычесть медленно меняющийся компонент из пикселей, хранящихся в values_list
, которые являются пикселями изображения в каждом кадре?
Дополнительно:
values_list
для репликации графика выглядит следующим образом
Загрузите ссылку на видео внизу бумаги под Electronic supplementary material
и используйте следующий код для конвертировать из видео в кадры, а затем применить код выше.
import cv2
vidcap = cv2.VideoCapture('video/2.mp4')
success, image = vidcap.read()
count = 0
while success:
cv2.imwrite("frames/%d.png" % count, image)
success, image = vidcap.read()
count += 1