内参标定中,PP 中心怎么计算 ,用C++代码
时间: 2023-12-16 09:04:21 浏览: 128
在相机内参标定中,PP (Principal Point) 表示主点的坐标,它是指像素坐标系原点在归一化相机坐标系下的坐标。
具体计算方法如下:
假设相机图像宽度为 `image_width`,高度为 `image_height`,像素尺寸(Pixel Size)为 `pixel_size`,且已经得到了相机的内参矩阵 `K`。
则 PP 坐标可以通过以下代码计算:
```c++
// 像素坐标系原点
cv::Point2d pixel_origin(0.0, 0.0);
// 归一化相机坐标系下的坐标
cv::Matx31d norm_point = K.inv() * cv::Matx31d(pixel_origin.x, pixel_origin.y, 1.0);
// 计算主点坐标
cv::Point2d pp(norm_point(0, 0) / norm_point(2, 0), norm_point(1, 0) / norm_point(2, 0));
// 将归一化相机坐标系下的坐标转换为实际尺寸
pp.x *= pixel_size;
pp.y *= pixel_size;
// 将主点坐标转换为以图像中心为原点的坐标
pp.x -= image_width / 2.0;
pp.y -= image_height / 2.0;
```
其中,`cv::Point2d` 表示二维坐标点,`cv::Matx31d` 表示 $3 \times 1$ 的矩阵。`K.inv()` 表示相机内参矩阵的逆矩阵。
这段代码可以用 OpenCV 库进行编写。
阅读全文