Как применить оптический поток к изображению? - PullRequest
0 голосов
/ 01 октября 2019

Я применил функцию из открытого резюме, чтобы обеспечить оптический поток между двумя изображениями. Вот два изображения, которые я хочу, чтобы их поток.

input-images

Это код (извлеченный из документа opencv), который я использовал для извлечения оптического потока

import cv2
import numpy as np
import matplotlib.pyplot as plt 

raster = plt.imread(get_y_fn(fnames[0]))
raster_disp = plt.imread(get_disp_fn(fnames[0]))

prvs = cv2.cvtColor(raster, cv2.COLOR_BGR2GRAY)
next = cv2.cvtColor(raster_disp, cv2.COLOR_BGR2GRAY)

hsv = np.zeros_like(raster)
hsv[...,1] = 255

flow = cv2.calcOpticalFlowFarneback(prvs,next, None, 0.5, 3, 15, 3, 5, 1.2, 0)

mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1])
hsv[...,0] = ang*180/np.pi/2
hsv[...,2] = cv2.normalize(mag,None,0,255,cv2.NORM_MINMAX)
rgb = cv2.cvtColor(hsv,cv2.COLOR_HSV2BGR)

rgbвыдает это как вывод:

flow

Я не понимаю несколько вещей:

  • Сначала почемузначения flow не целые, а плавающие. Уникальные значения flow:

    array([-1.580338e-12, -1.544204e-12, -1.544158e-12, -1.524542e-12, ..., 1.641482e-12, 1.645247e-12, 1.659195e-12, 1.688041e-12], dtype=float32)

  • Затем, как применить прогнозируемый поток, чтобы вернуть источникизображение (здесь raster) из raster_disp и flow?

Или у вас есть какие-либо предложения иметь матрицу (или что-то еще ...), которая могла бы дать мне«поток» из двух изображений, и есть функция, чтобы вернуться к исходному изображению?

Спасибо!

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