图像畸变校准

在做图像测距时,由于相机获取的图像或多多少会有图像畸变,此时为了提高测量精度,需要对图像畸变进行校准,利用获取的相机内部参数,便可以对图像畸变进行校准。

我这里利用张氏标定箱获取的相机的内部参数,获得参数有相机参数(fx,fy,cx,cy)与畸变参数(k1、k2、p1、p2、k3)。

A =[1426.669       0                654.437;
        0          1419.831         526.257;
        0          0                1];
D = [-0.46630257 0.36091263 -0.00130967 0.00095855 -0.27829233];

fx = A(1,1);
fy = A(2,2);
cx = A(1,3);
cy = A(2,3);
k1 = D(1);
k2 = D(2);
k3 = D(5);
p1 = D(3);
p2 = D(4);

I_d = imread('图像路径');
[m,n] = size(I_d);
img = zeros(m,n);
I_d = im2double(I_d);

u_d = zeros(m,n);
v_d = zeros(m,n);

B = inv(A);
for i = 1:m
    for j = 1:n
        XYZ = B*[i;j;1];
        x = XYZ(1);
        y = XYZ(2);
        r2 = XYZ(1).^2+XYZ(2)^2;

        x = x.*(1+k1*r2 + k2*r2.^2 + k3*r2.^3)+ 2*p1.*x.*y + p2*(r2 + 2*x.^2);
        y = y.*(1+k1*r2 + k2*r2.^2 + k3*r2.^3)+ 2*p2.*x.*y + p1*(r2 + 2*y.^2);

        u_d(i,j) = uint32(fx*x + cx);
        v_d(i,j) = uint32(fy*y + cy);

        if (u_d(i,j)>0 && u_d(i,j)<m&& v_d(i,j)>0 && v_d(i,j)<n)
            img(i,j) = I_d(u_d(i,j),v_d(i,j));
        end
    end
end

subplot(121);     
    imshow(I_d,[]);
    title('畸变原图像');
subplot(122);
    imshow(img,[]);
    title('校准后图像');

在实际使用时,可以保存u_d,v_d数据矩阵,校准时,直接调用即可,提高处理效率。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值