14

Jean-Yves Bouget の Camera Calibration Toolboxを使用して、カメラのキャリブレーションに Matlab を使用しています。キャリブレーション手順からのすべてのカメラ パラメータがあります。キャリブレーション セットに含まれていない新しい画像を使用すると、その変換方程式を取得できます。たとえば、Xc=R*X+T です。ここで、X はワールド フレーム内のキャリブレーション リグ (平面) の 3D ポイントであり、Xc はその座標です。カメラフレーム。言い換えれば、私はすべてを持っています (外部パラメータと内部パラメータの両方)。

私がやりたいことは、この画像に対して遠近法補正を実行することです。つまり、遠近法を削除して、キャリブレーション リグが歪んでいないことを確認します (チェッカーボード)。

Matlab の新しいコンピューター ビジョン ツールボックスには、3X3 行列 H が与えられた場合に、画像に対して透視変換を実行するオブジェクトがあります。問題は、既知の内因性および外因性パラメーターからこの行列を計算できないことです!

4

2 に答える 2

4

何ヶ月も経った今でもこれに興味を持っているすべての人に、私はKovesiのコード(http://www.csse.uwa.edu.au/~pk/research/matlabfns)を使用して正しいホモグラフィマトリックスを取得することができました。特にhomography2d.m関数。ただし、リグの4つのコーナーのピクセル値が必要になります。カメラがしっかりと固定されている場合は、これを1回行う必要があります。以下のサンプルコードを参照してください。

%get corner pixel coords from base image
p1=[33;150;1];
p2=[316;136;1];
p3=[274;22;1];
p4=[63;34;1];
por=[p1 p2 p3 p4];
por=[0 1 0;1 0 0;0 0 1]*por;    %swap x-y <--------------------

%calculate target image coordinates in world frame
% rig is 9x7 (X,Y) with 27.5mm box edges
XXw=[[0;0;0] [0;27.5*9;0] [27.5*7;27.5*9;0] [27.5*7;0;0]];
Rtarget=[0 1 0;1 0 0;0 0 -1]; %Rotation matrix of target camera (vertical pose)
XXc=Rtarget*XXw+Tc_ext*ones(1,4); %go from world frame to camera frame
xn=XXc./[XXc(3,:);XXc(3,:);XXc(3,:)]; %calculate normalized coords
xpp=KK*xn;  %calculate target pixel coords

% get homography matrix from original to target image
HH=homography2d(por,xpp);
%do perspective transformation to validate homography
pnew=HH*por./[HH(3,:)*por;HH(3,:)*por;HH(3,:)*por]; 

それでうまくいくはずです。Matlabは、画像のx軸を定義し、行のインデックスとyを列として定義していることに注意してください。したがって、方程式のxyを交換する必要があります(おそらく上記のコードでわかるように)。さらに、パラメーターのみからホモグラフィマトリックスを計算することができましたが、結果はわずかにずれていました(キャリブレーションツールボックスの丸め誤差の可能性があります)。これを行うための最良の方法は上記です。

カメラパラメータのみを使用する場合(つまり、Kovesiのコードを使用しない場合)、ホモグラフィ行列はH = KK * Rmat*inv_KKです。この場合、コードは次のとおりです。

% corner coords in pixels
p1=[33;150;1];
p2=[316;136;1];
p3=[274;22;1];
p4=[63;34;1];
pmat=[p1 p2 p3 p4];
pmat=[0 1 0;1 0 0;0 0 1]*pmat; %swap x-y

R=[0 1 0;1 0 0;0 0 1];  %rotation matrix of final camera pose
Rmat=Rc_ext'*R;  %rotation from original pose to final pose
H=KK*Rmat*inv_KK; %homography matrix
pnew=H*pmat./[H(3,:)*pmat;H(3,:)*pmat;H(3,:)*pmat]; %do perspective transformation

H2=[0 1 0;-1 0 0;0 0 1]*H;  %swap x-y in the homography matrix to apply in image
于 2012-01-05T03:12:21.040 に答える
1

アプローチ 1: Camera Calibration Toolbox では、ワークスペース内のチェッカーボードの各画像に対して H 行列があることに気付くはずです。私はまだコンピューター ビジョン ツールボックスに慣れていませんが、おそらくこれは関数に必要なマトリックスです。H は次のように計算されるようです。

KK = [fc(1) fc(1)*alpha_c cc(1);0 fc(2) cc(2); 0 0 1];
H = KK * [R(:,1) R(:,2) Tc]; % where R is your extrinsic rotation matrix and Tc the translation matrix
H = H / H(3,3);

アプローチ 2: コンピューター ビジョン ツールボックスの関数がうまくいかない場合は、画像の予測投影を見つけるために、次のようにinterp2関数を使用しました。

[X, Y] = meshgrid(0:size(I,2)-1, 0:size(I,1)-1);
im_coord = [X(:), Y(:), ones(prod(size(I_1)))]';
% Insert projection here for X and Y to XI and YI
ZI = interp2(X,Y,Z,XI,YI);

少し前にプロジェクトで将来予測を使用しましたが、同次座標を使用する必要があると思います。このウィキペディアの記事は非常に役に立ったと思います。

于 2011-07-15T19:48:52.227 に答える