最小二乘拟合到三维数据集

时间:2010-11-09 06:46:40

标签: matlab image-processing video-processing

我正在使用matlab进行视频稳定(使摇晃的视频不摇晃)。 其中一个步骤是在不稳定的摄像机路径下找到平滑的摄像机路径。 不稳定的摄像机路径会给视频带来抖动或抖动。 我使用摄像机位置指定摄像机路径,这是一个3d数据。 相机路径 - (cx,cy,cz);

当我在matlab中绘图时,我可以直观地看到相机运动的抖动。 所以现在我要求在(cx,cy,cz)指定的摄像机路径上进行最小二乘拟合;

我遇到了适合二维数据的polyfit()。 但我需要的是一条适合摇晃曲线的三维平滑曲线。 提前谢谢。

3 个答案:

答案 0 :(得分:2)

难道你不能只为cx(t),cy(t),cz(t)拟合三条单独的1d曲线吗?

BTW:我认为你需要的是卡尔曼滤波器,而不是适合摄像机路径的多项式。但是我不确定matlab是否内置了对它的支持。

答案 1 :(得分:1)

使用最小二乘法的方法:

t = (1:0.1:5)';

% model
px = [ 5 2 1 ];
x =  polyval(px,t);

py = [ -2 1 1 ];
y = polyval(py,t);

pz = [ 1 20 1 ];
z = polyval(pz,t);

%  plot model
figure
plot3(x,y,z)
hold all

% simulate measurement 
xMeasured = x+2*(rand(length(x),1)-0.5);
yMeasured = y+2*(rand(length(y),1)-0.5);
zMeasured = z+2*(rand(length(z),1)-0.5);

% plot simulated measurements
plot3(xMeasured, yMeasured, zMeasured,'or')
hold off
grid on

% least squares fit 
A = [t.^2, t, t./t];
pxEstimated = A\xMeasured;
pyEstimated = A\yMeasured;
pzEstimated = A\zMeasured;

答案 2 :(得分:0)

首先让我感谢stackoverflow.com然后感谢zellus和nikie,他让我更多地思考这个问题。所以现在我已经达到了遵循zellus方法的解决方案,并且nikie指出我使用了参数't'。 cx,cy,cz是3d空间中的坐标,在我的例子中,它们都是343x1双精度 我的最终代码如下所示,符合3d数据集:

t = linspace(1,343,343)';

 load cx.mat;
 load cy.mat;
 load cz.mat;

 plot3(cx, cy, cz,'r'),title('source Camera Path');
 hold all

 A = [t.^2, t, t./t];
 fx = A\cx;
 fy = A\cy;
 fz = A\cz;


 Xev = polyval(fx,t);
 Yev = polyval(fy,t);
 Zev = polyval(fz,t);

 plot3(Xev,Yev,Zev,'+b'),title('Fitting Line');

我期待与有用的人们就StackOverflow进行更有趣的讨论。