2015-03-06 3 views
0

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

enter image description here

(цвет обозначает направление потока в некоторой точке, интенсивность обозначает длину вектора смещения)

Я реализовал грязную версию визуализации

def visualizeFlow(u, v): 
    colorModel = cv2.imread('../colormodel.png') 
    colorModelCenter = (colorModel.shape[0]/2, colorModel.shape[1]/2) 
    res = np.zeros((u.shape[0], u.shape[1], 3), dtype=np.uint8) 
    mag = np.max(np.sqrt(u**2 + v**2)) 
    if mag == 0: 
     return res, colorModel 
    for i in xrange(res.shape[0]): 
     for j in xrange(res.shape[1]): 
      res[i, j] = colorModel[ 
         colorModelCenter[0] + (v[i, j]/mag*colorModelCenter[0]), 
         colorModelCenter[1] + (u[i, j]/mag*colorModelCenter[1]) 
        ] 
    return res, colorModel 

Это производит хороший I п общий случай картины, но это действительно медленно

enter image description here

Так что мой вопрос может кто-нибудь помочь мне сделать эту визуализацию быстрее? Если кто-то знает лучший способ визуализации плотного потока, это может быть классно

+0

Что означает «действительно медленный»? – Micka

+0

@ Микка визуализации потока размером 2637 x 1300 занимает несколько минут. Это очень важно для меня, потому что я хочу использовать его в warping итерации, чтобы отслеживать, как изменяется поток в процессе оптимизации. И, по крайней мере, уровень визуализации пирамиды может занять много времени. –

+0

Если вы суммируете высоту и ширину, то сколько раз ваш цикл for работает. Вы видите причину его медленной? – GPPK

ответ

0

Если вы используете функцию, предоставленную opencv, ваш код будет работать быстрее. Визуализация оптического потока работает следующим образом:

  • Преобразование u и v элементов матрицы движения в полярную координату. Применение функции cartToPolar (массив x = u array, y array = v array) даст вам матрицы углов и величин ваших векторов движения.

Окончательный цвет визуализации может не быть обнаружено с помощью обратного HSV к преобразованию RGB, где угол Matrice corresponde к Hue (H) канала и величиной до насыщения (S) значение (V) устанавливается к максимумам. (В вашем примере значения и каналы насыщения меняются местами).

  • Merge величины, угла и Matrice заполненной 1 до CV_32FC3 канала Matric с использованием merge или mixChannels.

  • Применить cvtColor с флагом CV_HSV2BGR. Матрица угла обзора указана в градусах, а величина должна быть масштабирована, чтобы соответствовать i [0,1], что можно сделать, разделив ее на максимальную величину, используя, например, MinMaxLoc

 Смежные вопросы

  • Нет связанных вопросов^_^