matlab如何进对图像进行透视变换,如何根据已知的内在和外在参数在Matlab中进行透视校正?...

对于那些在这么多个月后仍对此感兴趣的人,我的代码(http://www.csse.uwa.edu.au/~pk/research/matlabfns),尤其是homography2d.m函数 . 但是,您将需要钻机四个角的像素值 . 如果摄像机稳定固定,则需要执行一次 . 请参阅以下示例代码:

%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作为列 . 因此,必须在方程式中交换x-y(您可能会在上面的代码中看到) . 此外,我已经设法从参数单独计算单应矩阵,但结果略有偏差(可能是校准工具箱中的舍入误差) . 最好的方法是上面这样做 .

如果您只想使用相机参数(即不使用Kovesi的代码),则Homography矩阵为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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值