魚眼カメラ 1080P のキャリブレーション内部基準を 720P 内部基準に変換 && 魚眼カメラのキャリブレーション方法

魚眼カメラは、広い視野で画像を提供できる広角カメラで、通常、運転の安全性を向上させるために自動車に使用されます。一部の車両では、主に次の理由により魚眼カメラが必要です。

  1. 運転の安全性の向上: 魚眼カメラはより広い視野を提供し、ドライバーが側方や後方の死角、歩行者や他の車両の位置などの車両周囲の状況を観察できるようにします。これにより、ドライバーの死角が減り、運転の安全性が向上します。

  2. 運転支援: 自動運転システムで魚眼カメラを使用すると、より広い視野を提供し、車両が周囲の車両、歩行者、その他の物体を識別して追跡できるようになり、それによって運転ルートと速度をより正確に決定できます。

  3. 後退支援: 魚眼カメラは後退時に広い視野を提供し、ドライバーが車両周囲の状況を観察できるようにし、後退時の死角による事故を軽減します。

  4. 駐車のしやすさ: 魚眼カメラは、ドライバーが狭い駐車スペースでより便利に駐車できるようにすると同時に、駐車時の衝突のリスクを軽減します。

つまり、自動車に魚眼カメラを適用すると、運転の安全性と運転の利便性が向上するため、一部の車両で広く使用されています。

質問

        Q: さまざまな解像度に対応するカメラ内部パラメータを生成できる既製のアルゴリズムはありますか? 調整されたデータはアルゴリズムよりも正確で信頼性がありますか (精度が十分ではない、またはシナリオによっては変換の信頼性が保証されていません)

        A: 同じ魚眼カメラの場合は、異なる解像度のストリームをプッシュしても問題ありませんが、異なる魚眼カメラの場合は再調整が必要になる場合があります。ChatGpt は次のように答えました。

// 代码如下:
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/calib3d.hpp>

using namespace std;
using namespace cv;

void convertCalibration(const Mat& K_1080, Mat& K_720) {
    int width_1080 = 1920; // 1080P的宽度
    int height_1080 = 1080; // 1080P的高度
    int width_720 = 1280; // 720P的宽度
    int height_720 = 720; // 720P的高度

    double fx = K_1080.at<double>(0, 0); // 水平焦距
    double fy = K_1080.at<double>(1, 1); // 垂直焦距
    double cx = K_1080.at<double>(0, 2); // 光心X坐标
    double cy = K_1080.at<double>(1, 2); // 光心Y坐标

    // 计算缩放系数
    double scale_width = (double)width_720 / (double)width_1080;
    double scale_height = (double)height_720 / (double)height_1080;

    // 计算新的内参矩阵
    K_720 = Mat::zeros(3, 3, CV_64F);
    K_720.at<double>(0, 0) = fx * scale_width;
    K_720.at<double>(1, 1) = fy * scale_height;
    K_720.at<double>(0, 2) = cx * scale_width;
    K_720.at<double>(1, 2) = cy * scale_height;
}

int main() {
    // 定义原始相机内参矩阵K_1080
    Mat K_1080 = (Mat_<double>(3, 3) << 1000.0, 0.0, 960.0, 0.0, 1000.0, 540.0, 0.0, 0.0, 1.0);

    // 定义新的相机内参矩阵K_720
    Mat K_720;

    // 转换内参
    convertCalibration(K_1080, K_720);

    // 输出转换结果
    cout << "原始内参矩阵K_1080:\n" << K_1080 << endl;
    cout << "新的内参矩阵K_720:\n" << K_720 << endl;

    return 0;
}

对于将1080P的内参转换为720P的内参,畸变系数矩阵不需要改变。因为畸变系数矩阵与图像分辨率无关,只与相机光学系统有关。所以,即使改变了图像的分辨率,畸变系数矩阵也不需要做任何改变。

因此,在上面提供的C++代码中,只需要将内参矩阵从1080P转换为720P即可,畸变系数矩阵不需要做任何更改。

1080解像度効果の画像は以下の通り 

解像度720の内部参照マトリックスを計算した後のエフェクト画像

 いい感じ!

キャリブレーションの理論と方法 [魚眼カメラのキャリブレーション方法を知る]

おすすめ

転載: blog.csdn.net/John_ToStr/article/details/130384608