单个像素代表的实际物理尺寸
简单点说,对于单目相机,没有单个像素代表的实际物理尺寸这个概念。
这个问题容易想明白,以下面这张图为例:只考虑简单的小孔相机模型,那橙色射线上的每个点投影到图片上都是同一个点。也就是说,远处大的物体和近处小的物体在图片上呈现出来是一样的,那在不知道深度的情况下讨论单个像素的实际长度也是没有意义的。
Matlab里有pointsToWorld这个函数,用来计算图片上像素坐标在真实世界中的二维坐标,它的用法是:
worldPoints = pointsToWorld(cameraParams,rotationMatrix,translationVector,imagePoints)
其中,cameraParams是我们通过Matlab的estimateCameraParameters函数,得到的标定结果。可以看到,仅仅有这个参数是不够的,我们还需要rotationMatrix和translationVector这两个外参数。
以上面这幅图为例,如果我们想测出两个硬币的圆心位置,那我们应该将它们放置于标定用的棋盘格的同一平面上,并且首先利用棋盘格的图像坐标计算出此时的外参数:
[R, t] = extrinsics(imagePoints, worldPoints, cameraParams);
再将得到的R和t带入上面的pointsToWorld函数。注意,此时得到的worldPoints仍然是二维坐标,它表示在图示棋盘格平面的XY坐标系内硬币圆心位置的物理坐标。如果题主说的确实是单目相机,那一般的应用场景应该是拍摄一个固定平面,得到目标物的二维坐标。如果相机和平面都是固定的,那把棋盘格放上去,用extrinsics函数计算一次外参就可以了,得到的R和t是适用于我们观察的工作平面的。
转载于:
作者:MQLhhhh
链接:https://www.zhihu.com/question/313810634/answer/610002045
来源:知乎