关于图像物理尺寸计算问题

%% 附 原帖所讨论的问题。

% 各位大侠,本人用1组35张图片,标定相机参数。分别用MATLAB和OPENCV分别标定,标定结果基本一致。

% 现在,我希望从标定的一副图像中(使用这幅图像标定的相机外参),计算图像上几个红点之间的在3维世界坐标系下的距离(mm)。

%

% 相机标定的结果:

% 1、        相机内参:

% Focal Length:      fc = [ 854.37091   855.65897 ] ?[ 6.10263   6.00058 ]

% Principal point:     cc = [ 369.52264   296.19708 ] ?[ 5.51474   5.45121 ]

% Skew:alpha_c = [ 0.00000 ] ?[ 0.00000  ]   => angle of pixel axes = 90.00000 ?0.00000 degrees

% Distortion: kc = [ -0.09667   0.12791   -0.00171   -0.00139  0.00000 ] ?[ 0.02533   0.19119   0.00167   0.00185  0.00000 ]

% Pixel error:          err = [ 0.20807   0.26036 ]

% 相机的传感器尺寸:

% size        Width/mm        Height/mm        Width/(像素)        Height/(像素)        Sx        Sy

% 1/2’        6.4                         4.8                           656                          492                   9.75um/p        9.75um/p

%

% 2、对本图的相机外参:

%

% Translation vector:  Tc_ext = [-69.316901          -51.302449          237.121385 ]

% Rotation vector:    omc_ext = [ -1.923062          -1.999779          -0.515738 ]

% Rotation matrix:    Rc_ext = [-0.042297          0.998969          0.016462

%                           0.880689          0.029498          0.472776

%                           0.471803          0.034495          -0.881029 ]

% Pixel error:        err = [ 0.31120          0.39245 ]

%

% 3.通过图像处理方法提取关键点坐标,分别获取了图像上两个红色圆圈所代表的位置在图像上的坐标(像素):W1(108.69794,4.6928058),W2(226.48865,8.7926397),在3维空间中,W1和W2两点之间的物理实际距离为30mm。

% 现想通过将W1和W2坐标从图像坐标系变换到世界坐标系,计算两点间的距离,是否和实际结果对应,之后,在这个标定板所放置的物理位置上进行产品尺寸的精确测量。这种应用在商用机器视觉软件HALCON中已有应用。我想通过OPENCV实现。



%%              ------------------------------------

clear all;

clc;

%% 用来验证像素尺寸等内容的程序


               Rc_ext = [-0.042297          0.998969          0.016462;

                         0.880689          0.029498          0.472776;

                         0.471803          0.034495          -0.881029 ];

                     

% addpath(genpath('E:实验常用子程序'));                      

% Phi = Ges_Cal(Rc_ext')

Tc_ext = [-69.316901          -51.302449          237.121385 ]';

Depth = Rc_ext'*Tc_ext;


Physical_distance = 1.15*Depth(3)/8.3;  %% 真实的物理距离




%% 下面是程序的说明。

第一步:传感器尺寸可以推出每个像素的物理尺寸:6.4/656或者 4.8/492 = 0.0098


第二步:摄像机焦距fc的物理尺寸等于fc*0.0098毫米 = 8.3毫米(不考虑畸变);


第三步:像素平面上,两个红点之间的距离为sqrt((226.48865 - 108.69794)^2 + (8.7926397 - 4.6928058))*0.0098毫米 = 1.1554毫米;


因此,红点之间的真实物理距离为:1.15*Depth(3)/8.3


结论:不考虑畸变的时候,误差为2-3mm

你可能感兴趣的:(计算机视觉)