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 ?