原博文
(5条消息) 计算运动图像序列的运动矢量_Kevin_biubiubiu的博客-优快云博客_运动矢量
运动矢量是4维的
但是是matlab语言 由于别的工作将其转化为了python
pic1 = np.zeros((240,320))
pic2 = np.zeros((240,320))
pic1=i[:,:,0]
pic2=j[:,:,0]
# pic1_gray = double(rgb2gray(pic1))
# pic2_gray = double(rgb2gray(pic2))
my_size = 16
n=np.size(pic1,0)
m=np.size(pic1,1)
#[n,m] = size(pic1_gray);
new_n = fix(n/my_size)
new_m = fix(m/my_size)
#pic2_ex = [pic2_gray,pic2_gray[:,m];pic2_gray[n,:],0];
#pic2_ex1=np.hstack(pic2_gray,pic2_gray[:,m])
# b=np.zeros(m)
# b=pic2_gray[:,m-1]
# for i in range(m):
# b[i]=pic2_gray[i][m]
pic2_ex1 = np.column_stack((pic2,pic2[:,m-1]))
a=np.zeros(1)
# pic2_ex2=np.column_stack((pic2_gray[n-1,:],a)
pic2_ex2=np.hstack([pic2[n-1,:],a])
pic2_ex=np.vstack([pic2_ex1,pic2_ex2])
new_n=int(new_n)
new_m=int(new_m)
u = np.zeros((new_n,new_m))
v = np.zeros((new_n,new_m))
for fi in range(new_n):
for fj in range(new_m):
i = 1 + my_size*(fi-1)
j = 1 + my_size*(fj-1)
A = np.zeros((2,2))
b = np.zeros((2,1))
for i_ in range(my_size):
for j_ in range(my_size):
fx = pic2_ex[(i+i_-1)+1][j+j_-1] - pic2_ex[i+i_-1][j+j_-1]
fy = pic2_ex[i+i_-1][(j+j_-1)+1] - pic2_ex[i+i_-1][j+j_-1]
ft = pic2_ex[i+i_-1][j+j_-1] - pic1[i+i_-1][j+j_-1]
A[0][0] = A[0][0] + fx**2
A[0][1] = A[0][1] + fx*fy
A[1][0]= A[1][0]
A[1][1] = A[1][1] + fy**2
b[0][0] = b[0][0] - fx * ft
b[1][0] = b[1][0] - fy * ft
re = np.linalg.inv(A)*b
u[fi][fj] = re[0][0]
v[fi][fj] = re[1][0]
quiver(v,u)
最后变为了2维运动矢量
不知道问题出在哪