Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

rectifyStereoImages

ステレオ イメージのペアの平行化

説明

[J1,J2,reprojectionMatrix] = rectifyStereoImages(I1,I2,stereoParams) は、stereoParams オブジェクトに格納されたステレオ カメラ システムのステレオ パラメーターを使用して、I1 入力イメージと I2 入力イメージのバージョンの歪み補正と平行化を行います。reprojectionMatrix で関数 reconstructScene を使用して、視差マップの 2 次元の点をカメラ 1 の平行化されたカメラ座標系における 3 次元の点に再投影します。

ステレオ イメージの平行化では、各イメージの対応する点が同じ行座標をもつような方法で、イメージが共通のイメージ平面に投影されます。このようにイメージの投影を行うと、2 つのカメラが平行であるかのように表示されます。関数 disparityBM または関数 disparitySGM を使用して、3 次元シーン再構成のために平行化されたイメージから視差マップを計算します。

[___,camMatrix1,camMatrix2,R1,R2] = rectifyStereoImages(I1,I2,stereoParams) は、平行化されたカメラの 3 行 4 列のカメラ投影行列 camMatrix1camMatrix2、および対応する平行化回転行列 R1R2 を返します。

[J1,J2] = rectifyStereoImages(I1,I2,tform1,tform2) は、射影変換 tform1tform2 を適用して、平行化された I1 入力イメージと I2 入力イメージを返します。射影変換は、関数 estimateUncalibratedRectification によって返されます。

[J1,J2] = rectifyStereoImages(___,interp) はさらに、平行化されたイメージに使用する内挿法を指定します。この方法には 'nearest''linear' または 'cubic' を指定できます。

[J1,J2] = rectifyStereoImages(___,Name=Value) は、前の構文にある引数の任意の組み合わせに加えて、名前と値の引数を 1 つ以上使用してオプションを指定します。たとえば、OutputView='valid'OutputView 引数を 'valid' に設定します。

すべて折りたたむ

キャリブレーションを行うチェッカーボードを含むイメージを指定します。

imageDir = fullfile(toolboxdir('vision'),'visiondata', ...
    'calibration','stereo');
leftImages = imageDatastore(fullfile(imageDir,'left'));
rightImages = imageDatastore(fullfile(imageDir,'right'));

チェッカーボードを検出します。

[imagePoints,boardSize] = detectCheckerboardPoints(...
    leftImages.Files,rightImages.Files);

チェッカーボード キーポイントのワールド座標を指定します。

squareSizeInMillimeters = 108;
worldPoints = generateCheckerboardPoints(boardSize,squareSizeInMillimeters);

イメージを読み取ります。

I1 = readimage(leftImages,1);
I2 = readimage(rightImages,1);
imageSize = [size(I1,1),size(I1,2)];

ステレオ カメラ システムをキャリブレーションします。

stereoParams = estimateCameraParameters(imagePoints,worldPoints,ImageSize=imageSize);

'full' 出力表示を使用してイメージを平行化します。

[J1_full,J2_full] = rectifyStereoImages(I1,I2,stereoParams,OutputView='full');

'full' 出力表示の結果を表示します。

figure; 
imshow(stereoAnaglyph(J1_full,J2_full));

Figure contains an axes object. The axes object contains an object of type image.

'valid' 出力表示を使用してイメージを平行化します。これは視差計算に最適です。

[J1_valid,J2_valid] = rectifyStereoImages(I1,I2,stereoParams,OutputView='valid');

'valid' 出力表示の結果を表示します。

figure; 
imshow(stereoAnaglyph(J1_valid,J2_valid));

Figure contains an axes object. The axes object contains an object of type image.

入力引数

すべて折りたたむ

カメラ 1 に対応する入力イメージ。M x N x 3 のトゥルーカラー イメージ、または M 行 N 列の 2 次元グレースケール配列として指定します。また、入力イメージ I1I2 は、実数、有限、非スパースでなければなりません。入力イメージは同じクラスでなければなりません。

データ型: uint8 | uint16 | int16 | single | double | logical

カメラ 2 に対応する入力イメージ。M x N x 3 のトゥルーカラー イメージ、または M 行 N 列の 2 次元グレースケール配列として指定します。入力イメージ I1I2 は、実数、有限、非スパースでなければなりません。また、入力イメージは同じクラスでなければなりません。

データ型: uint8 | uint16 | int16 | single | double | logical

ステレオ カメラ システムのパラメーター。stereoParameters オブジェクトとして指定します。

データ型: uint8 | uint16 | int16 | single | double

イメージ 1 の射影変換。関数 estimateUncalibratedRectification によって返される 3 行 3 列の行列または projective2d オブジェクトとして指定します。

データ型: single | double

イメージ 2 の射影変換。関数 estimateUncalibratedRectification によって返される 3 行 3 列の行列または projective2d オブジェクトとして指定します。

データ型: single | double

内挿法。'linear''nearest' または 'cubic' のいずれかとして指定します。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: OutputView='valid'OutputView 引数を 'valid' に設定します。

平行化されたイメージのサイズ。'OutputView' と、'full' または 'valid' で構成されるコンマ区切りのペアとして指定します。このパラメーターを 'full' に設定すると、平行化されたイメージに元のイメージのすべてのピクセルが含まれます。この値を 'valid' に設定すると、出力イメージは、有効なピクセルを含む最も大きな共通の四角形のサイズにトリミングされます。

平行化されたイメージ間にオーバーラップがない場合は、OutputView'full' に設定します。

出力ピクセルの塗りつぶしの値。'FillValues' と 1 つ以上のスカラー値の配列で構成されるコンマ区切りのペアとして指定します。入力イメージにおける対応する逆変換後の位置が完全に入力イメージの境界外である場合には、出力ピクセルの塗りつぶしの値を使用します。I1I2 が 2 次元グレースケール イメージの場合、'FillValues' をスカラーに設定しなければなりません。I1I2 がトゥルーカラー イメージの場合には、'FillValues' をスカラーまたは RGB 値の 3 要素ベクトルに設定できます。

出力引数

すべて折りたたむ

歪み補正と平行化が行われた I1。M x N x 3 のトゥルーカラー イメージまたは M 行 N 列の 2 次元グレースケール イメージとして返されます。

ステレオ イメージの平行化では、各イメージの対応する点が同じ行座標をもつような方法で、イメージが共通のイメージ平面に投影されます。このようにイメージの投影を行うと、2 つのカメラが平行であるかのように表示されます。関数 disparityBM または関数 disparitySGM を使用して、3 次元シーン再構成のために平行化されたイメージから視差マップを計算します。

歪み補正と平行化が行われた I2。M x N x 3 のトゥルーカラー イメージまたは M 行 N 列の 2 次元グレースケール イメージとして返されます。

ステレオ イメージの平行化では、各イメージの対応する点が同じ行座標をもつような方法で、イメージが共通のイメージ平面に投影されます。このようにイメージの投影を行うと、2 つのカメラが平行であるかのように表示されます。関数 disparityBM または関数 disparitySGM を使用して、3 次元シーン再構成のために平行化されたイメージから視差マップを計算します。

再射影行列。次の形式の 4 行 4 列の行列として返されます。

[100cx010cy000f001/b0],

ここで、f と [cx,cy] はそれぞれ、平行化されたカメラ 1 の焦点距離と主点です。b は、平行化された仮想ステレオ カメラのベースラインです。

reprojectionMatrix で関数 reconstructScene を使用して、視差マップの 2 次元の点をカメラ 1 の平行化されたカメラ座標系における 3 次元の点に再投影します。

平行化されたカメラ 1 の射影行列。3 行 4 列の行列として返されます。camMatrix1camMatrix2 を使用して、カメラ 1 の座標系の 3 次元ワールド ポイントを J1J2 のイメージ平面にそれぞれ投影します。

camMatrix1 を使用して、平行化されたカメラ 1 の座標系の 3 次元ワールド ポイントを J1 のイメージ平面に投影します。

データ型: single | double

平行化されたカメラ 2 の射影行列。3 行 4 列の行列として返されます。camMatrix1camMatrix2 を使用して、カメラ 1 の座標系の 3 次元ワールド ポイントを J1J2 のイメージ平面にそれぞれ投影します。

camMatrix2 を使用して、平行化されたカメラ 2 の座標系の 3 次元ワールド ポイントを J2 のイメージ平面に投影します。

データ型: single | double

カメラ 1 の平行化された投影に関連するカメラ 1 の回転行列。3 行 3 列の行列として返されます。R1 回転行列は、平行化されていないカメラ 1 の座標系にある 3 次元の点を、平行化されたカメラ 1 の座標系の点に関連付けます。

データ型: single | double

カメラ 1 の平行化された投影に関連するカメラ 2 の回転行列。3 行 3 列の行列として返されます。R2 回転行列は、平行化されていないカメラ 2 の座標系にある 3 次元の点を、平行化されたカメラ 2 の座標系の点に関連付けます。

データ型: single | double

ヒント

  • Computer Vision Toolbox™ の修正アルゴリズムでは、各イメージのエピ極がイメージの外側にある必要があります。エピ極がイメージ内にある場合は、Marc Pollefeys、Reinhard Koch、Luc Van Gool [2] により提唱された修正方法に示されているように、最初にイメージを極座標に変換できます。

参照

[1] G. Bradski and A. Kaehler, Learning OpenCV : Computer Vision with the OpenCV Library. Sebastopol, CA: O'Reilly, 2008.

拡張機能

バージョン履歴

R2014a で導入