CameraCalibration和图像处理

时间:2014-06-16 16:07:46

标签: image-processing camera camera-calibration

我希望你能就这些问题向我澄清一下这个问题

1.如果我将相机校准到特定分辨率640x360,我可以将它用于1024x768等其他分辨率吗?

2.另外我想知道我的图像中有1个像素包含多少厘米。它因系统而异。我如何找到它?而且,它不是强制性的方形。所以我必须找到它的长度和宽度。我该怎么做?

  1. 我使用的是罗技c170,这是一款低速凸轮。当我试图测量图像中的距离并将它们与实时距离进行比较时,是否可以在8mm左右出现误差?
  2. EDIT1: 由于1 mm中的像素数是sensor_width / image_width,这是密度的倒数,我可以计算a_x / f并找到右逆?


    @marol

    Intrinsic parameters of left camera:
    
    Focal Length:          fc_left = [ 1442.67707   1457.17435 ] ± [ 18.12442   19.46439 ]
    Principal point:       cc_left = [ 497.66112   291.77311 ] ± [ 42.37874   31.97065 ]
    Skew:             alpha_c_left = [ 0.00000 ] ± [ 0.00000  ]   => angle of pixel axes = 90.00000 ± 0.00000 degrees
    Distortion:            kc_left = [ 0.02924   -0.65151   -0.01104   -0.01342  0.00000 ] ± [ 0.16553   1.57119   0.00913   0.01306  0.00000 ]
    
    
    Intrinsic parameters of right camera:
    
    Focal Length:          fc_right = [ 1443.32678   1458.82558 ] ± [ 25.55850   26.08659 ]
    Principal point:       cc_right = [ 567.11672   258.09152 ] ± [ 20.46962   17.87495 ]
    Skew:             alpha_c_right = [ 0.00000 ] ± [ 0.00000  ]   => angle of pixel axes = 90.00000 ± 0.00000 degrees
    Distortion:            kc_right = [ -0.58576   21.53289   -0.02278   0.00845  0.00000 ] ± [ 0.28148   9.37092   0.00787   0.00847  0.00000 ]
    
    
    Extrinsic parameters (position of right camera wrt left camera):
    
    Rotation vector:             om = [ -0.04239   0.02401  -0.00677 ]
    Translation vector:           T = [ 71.66430   -0.79025  -8.76546 ]
    

1 个答案:

答案 0 :(得分:2)

  1. 如果你的意思是:我已经使用分辨率为X的图像校准了我的相机,所以我得到了校准矩阵K,我可以将这个矩阵用于不同分辨率Y的图像吗?直接答案是否定的,你不能,因为校准矩阵K有一个形式:
  2. K = [a_x, 0, c_x;
         0, a_y, c_y;
         0,  0,   1;]
    

    其中a_x =焦点长度* x方向上mm上的像素密度,a_y =焦点长度* y方向上的mm上的像素密度(通常那些密度相等)和c_x =图像平面到x方向上的主点的平移(类似的c_y)。当您输出校准矩阵K时,您将看到如下内容:

    K = [a_x, 0, 320;
         0, a_y, 180;
         0,  0,    1]
    

    是的,你可以看到c_x = 320 = 640/2和c_y = 180 = 360/2。因此,您的校准矩阵与图像分辨率相关,因此您无法在不更改矩阵K的情况下直接将其与任何其他分辨率一起使用。

    2.您必须按照图像尺寸划分传感器尺寸,即

    k_x = 1 / c_x = sensor_size_width / image_size_width. 
    k_y = 1 / c_y
    

    图像传感器是由光敏材料制成的微小平面,可吸收相机设备中的光线。通常,您可以在相机手册中找到此类信息,搜索传感器尺寸

    编辑:如果您无法在相机手册中找到传感器尺寸,如果是网络摄像头,则可以尝试执行以下操作:校准相机给定矩阵K值a_x和a_y包含此类信息。因为我们说a_x = f *密度,所以如果你知道焦距(你知道 - 它是2.3mm - 见here)所以你可以找出密度= a_x / f。我们知道密度等于image_width / sensor_width,所以最后我们有sensor_width = image_width / density = image_width * f / a_x。对于sensor_height也有类似的想法。

    EDIT2:例如,如果你得到:

    Focal Length:          fc_left = [ 1442.67707   1457.17435 ] ± [ 18.12442   19.46439 ]
    

    所以我们有a_x = 1442.67707。根据我们的结论,如果我们假设图像尺寸为640 x 320,我们的传感器宽度= 640 * 2.3 / 1442.67707 = 1,02 mm。