Following is the Lucas Kanade optical flow algorithm in Python. We used it successfully on two png images, as well as through OpenCV to follow a point in successive frames. More details are at Github.

import numpy as np import scipy.signal as si from PIL import Image def gauss_kern(): h1 = 15 h2 = 15 x, y = np.mgrid[0:h2, 0:h1] x = x-h2/2 y = y-h1/2 sigma = 1.5 g = np.exp( -( x**2 + y**2 ) / (2*sigma**2) ); return g / g.sum() def deriv(im1, im2): g = gauss_kern() Img_smooth = si.convolve(im1,g,mode='same') fx,fy=np.gradient(Img_smooth) ft = si.convolve2d(im1, 0.25 * np.ones((2,2))) + \ si.convolve2d(im2, -0.25 * np.ones((2,2))) fx = fx[0:fx.shape[0]-1, 0:fx.shape[1]-1] fy = fy[0:fy.shape[0]-1, 0:fy.shape[1]-1]; ft = ft[0:ft.shape[0]-1, 0:ft.shape[1]-1]; return fx, fy, ft import matplotlib.pyplot as plt import numpy as np import scipy.signal as si from PIL import Image import deriv import numpy.linalg as lin def lk(im1, im2, i, j, window_size) : fx, fy, ft = deriv.deriv(im1, im2) halfWindow = np.floor(window_size/2) curFx = fx[i-halfWindow-1:i+halfWindow, j-halfWindow-1:j+halfWindow] curFy = fy[i-halfWindow-1:i+halfWindow, j-halfWindow-1:j+halfWindow] curFt = ft[i-halfWindow-1:i+halfWindow, j-halfWindow-1:j+halfWindow] curFx = curFx.T curFy = curFy.T curFt = curFt.T curFx = curFx.flatten(order='F') curFy = curFy.flatten(order='F') curFt = -curFt.flatten(order='F') A = np.vstack((curFx, curFy)).T U = np.dot(np.dot(lin.pinv(np.dot(A.T,A)),A.T),curFt) return U[0], U[1]

Hey, you write this code for a python which version?

ReplyDelete2.7

Deleteselam,

ReplyDeletePDF'te şöyle bir bölüm var:

plt.hold(True)

plt.plot(x,y,'+r');

plt.plot(x+u*3,y+v*3,'og')

test("flow1-bw-0.png","dleft.png")

plot ederken niye 3 ile scale ettin uzaklığı açıklar mısın?

teşekkürler,

Merhaba, LK hareket yonunu hesapladi, fakat vektor grafikleme acisindan cok ufakti, ikinci yesil nokta ekranda daha rahat gorulsun diye boyle yaptik. Bu arada LK metotu 1. derece yaklasiksallik (approxim) Taylor acilimi kullandigi icin piksel degisimleri az oldugu zaman gecerlidir, boyle bir ifade de literaturde var haberiniz olsun.

ReplyDeletehttp://web.yonsei.ac.kr/jksuhr/articles/Kanade-Lucas-Tomasi%20Tracker.pdf

your GitHub link is broken :(

ReplyDeleteUpdated the link

ReplyDeletethank you!

Deletehi ,how can use this code?

ReplyDeletedo you have sample ?