OpenCV 5.0.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 5.0.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
マルチカメラキャリブレーション

このチュートリアルでは、複数カメラキャリブレーションツールボックスの使い方を示す。このツールボックスは「ランダム」パターンキャリブレーションオブジェクトの使用に基づいているため、チュートリアルは主に2つの部分から構成される。「ランダム」パターンの紹介と、複数カメラキャリブレーションである。

ランダムパターンキャリブレーションオブジェクト

ランダムパターンとは、ランダムに生成された画像である。多くの特徴点を持つように「ランダム」になっている。生成後、印刷してキャリブレーションオブジェクトとして使用する。以下の2枚の画像は、ランダムパターンと、それを撮影した写真である。

ランダムパターンを生成するには、ccalib モジュールのクラス cv::randpattern::RandomPatternGenerator を使用する。次のように実行する。

cv::randpattern::RandomPatternGenerator generator(width, height);
generator.generatePattern();
cv::Mat pattern = generator.getPattern();

ここで widthheight はパターン画像の幅と高さである。パターンを取得したら、それを印刷していくつかの写真を撮影する。

これでこれらの画像を使ってカメラをキャリブレーションできる。まず、objectPointsimagePoints を検出する必要がある。それらを検出するには、クラス cv::randpattern::RandomPatternCornerFinder を使用する。サンプルコードは次のとおりである。

cv::randpattern::RandomPatternCornerFinder finder(patternWidth, patternHeight, nMiniMatches);
finder.loadPattern(pattern);
finder.computeObjectImagePoints(vecImg);
vector<Mat> objectPoints = finder.getObjectPoints();
vector<Mat> imagePoints = finder.getImagePoints();

ここで変数 patternWidthpatternHeight は、選択した測定単位でのキャリブレーションオブジェクトの物理的な寸法を指す。vecImg はキャリブレーション画像を格納する画像のベクトルである。

次に、cv::calibrateCameracv::omnidir::calibrate のようなキャリブレーション関数を用いてカメラをキャリブレーションする。

複数カメラのキャリブレーション

ここで複数カメラキャリブレーションに移る。現時点では、このツールボックスはランダムパターンオブジェクトを使用する必要がある。

複数のカメラをキャリブレーションするには、まずランダムパターンの写真をいくつか撮影する必要がある。もちろん、外部パラメータをキャリブレーションするには、1つのパターンが複数のカメラ(少なくとも2台)によって同時に視野に入る必要がある。もう1つの点として、どのカメラとどのパターンで写真が撮影されたかをプログラムが把握できるよう、画像ファイルは「cameraIdx-timestamp.*」という名前にする必要がある。同じタイムスタンプの写真は、複数のカメラで撮影された同じオブジェクトであることを意味する。さらに、cameraIdx は0から始める必要がある。ファイル名の例として「0-129.png」「0-187.png」「1-187」「2-129」などがある。

次に、複数カメラキャリブレーションを次のように実行できる。

cv::multicalib::MultiCameraCalibration multiCalib(cameraType, nCamera, inputFilename,patternWidth, patternHeight, showFeatureExtraction, nMiniMatches);
multiCalib.run();
multiCalib.writeParameters(outputFilename);

ここで cameraType はカメラの種類を示し、multicalib::MultiCameraCalibration::PINHOLEmulticalib::MultiCameraCalibration::OMNIDIRECTIONAL がサポートされている。全方位カメラについては、詳細は cv::omnidir モジュールを参照する。nCamera はカメラの数である。inputFilenameopencv/sampleimagelist_creator によって生成されたファイルの名前である。ランダムパターンとキャリブレーション画像の名前を格納し、最初のファイル名はランダムパターンの名前である。patternWidthpatternHeight はパターンの物理的な幅と高さを表す。showFeatureExtraction は、特徴抽出処理を表示するかどうかを決定するブール値フラグである。nMiniMatches は各フレームで検出されるべき点の最小数であり、これを下回るとそのフレームは破棄される。outputFilename はキャリブレーション引数を格納するXMLである。