intrinsic and extrinsic physical camera parameters computation

4 次查看(过去 30 天)
i am trying to do a physical camera parameter computer for intrinsic and extrinsic parameters of camera. i was asked to do it with direct parallel calibrate method but i could not find what it is anywhere. so i am using tsai's algorithm to compute parameters of camera. i am having some problems and error.. this is the code
% CalibTsai - computes the intrinsic and extrinsic parameters with Tsai's method.
%
% Usage:
% [K, R, t] = CalibTsai(x, X, u0, v0)
%
% Input:
% x : 3xn homogeneous image points (n: # of points)
% X : 3xn homogeneous object points (n: # of points)
%
% Output:
% K : Camera Intrinsic Matrix
% R : 3x3 Rotation Matrix
% t : 3x1 Translation Vector
X = imread('3D.bmp');
x = imread('2D.bmp');
%[K, R, t] = CalibTsai(x, X, u0, v0)
x(:,1) = x(:,1);
x(:,2) = x(:,2);
M = [ x(:,1).*X(:,1) x(:,1).*X(:,2) x(:,1).*X(:,3) x(:,1) ...
-x(:,2).*X(:,1) -x(:,2).*X(:,2) -x(:,2).*X(:,3) -x(:,2)];
[~,~,V] = svd(M);
scale = sqrt(V(1,8)^2 + V(2,8)^2 + V(3,8)^2);
alpha = sqrt(V(5,8)^2 + V(6,8)^2 + V(7,8)^2)/scale;
r1(1,1) = V(5,8)/alpha/scale;
r1(1,2) = V(6,8)/alpha/scale;
r1(1,3) = V(7,8)/alpha/scale;
r2(1,1) = V(1,8)/alpha/scale;
r2(1,2) = V(2,8)/scale;
r2(1,3) = V(3,8)/scale;
tx = V(8,8)/scale;
ty = V(4,8)/scale;
if ((x(1,2)+v0)*(r2(1,1)*X(1,1) + r2(1,2)*X(1,2) + r2(1,3)*X(1,3)) < 0)
r1(1,1) = -1*r1(1,1);
r1(1,2) = -1*r1(1,2);
r1(1,3) = -1*r1(1,3);
r2(1,1) = -1*r2(1,1);
r2(1,2) = -1*r2(1,2);
r2(1,3) = -1*r2(1,3);
tx = -tx;
ty = -ty;
end
r3 = cross(r1, r2);
A = [x(:,1) r1(1,1).*X(:,1)+r1(1,2).*X(:,2)+r1(1,3).*X(:,3)+tx];
b = (-x(:,1).*(r3(1,1).*X(:,1)+r3(1,2).*X(:,2)+r3(1,3).*X(:,3)));
Y = pinv(A)*b;
tz = Y(1);
fx = Y(2);
fy = fx/alpha;
K = [fx 0 u0; 0 fy v0; 0 0 1];
R = [r1; r2; r3];
t = [tx; ty; tz];
the error is
Matrix dimensions must agree.
Error in CalibTsai (line 23)
M = [ x(:,1).*X(:,1) x(:,1).*X(:,2) x(:,1).*X(:,3) x(:,1) ...
please let me know how to solve this problem. i need to compute the intrinsic and extrinsic parameters of s camera. also if there is any other way to compute it please let me know.
  2 个评论
Matt J
Matt J 2013-3-11
Execute "dbstop if error" at the command line. Then re-run. When it stops, execute
K>> whos x X
and tell us the result.
Sat m
Sat m 2013-3-11
i did it and the result is
>> dbstop if error
>> whos x X
Name Size Bytes Class Attributes
X 768x1024x3 2359296 uint8
x 350x646x3 678300 uint8

请先登录,再进行评论。

采纳的回答

Matt J
Matt J 2013-3-11
编辑:Matt J 2013-3-11
It should be obvious to you from the output of WHOS what's gone wrong. The instructions for the code say that both x and X should 3xn. WHOS shows you that they are not of those dimensions.
In fact, it looks like you have passed image values as input to the code, when what the code appears to want are sets of n coordinate points.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 MATLAB Support Package for USB Webcams 的更多信息

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by