メインコンテンツ

undistortImage

イメージのレンズ歪みの修正

説明

[J,camIntrinsics] = undistortImage(I,intrinsics) は、intrinsics で定義されたカメラ パラメーターを使用して、入力イメージ I のレンズ歪みを除去します。関数は、補正後のイメージ J と歪み補正後のカメラの内部パラメーター camIntrinsics を返します。

[J,camIntrinsics] = undistortImage(I,intrinsics,interp) は、入力イメージに使用する関数に対して内挿法を指定します。

[J,camIntrinsics] = undistortImage(___,Name=Value) は、前の構文にある引数の任意の組み合わせに加えて、名前と値の引数を 1 つ以上使用してオプションを指定します。たとえば、(FillValues=[0 0.4470 0.7410]) は、入力イメージの境界外にある出力ピクセル値を青色に設定します。

すべて折りたたむ

一連のキャリブレーション イメージを作成します。

images = imageDatastore(fullfile(toolboxdir("vision"),"visiondata", ...
    "calibration","mono"));

キャリブレーション パターンを検出します。

[imagePoints,patternDims] = detectCheckerboardPoints(images.Files);

四角形のコーナーのワールド座標を生成します。正方形のサイズはミリメートル単位です。

squareSize = 29; % millimeters
worldPoints = patternWorldPoints("checkerboard",patternDims,squareSize);

カメラのキャリブレーションを行います。

I = readimage(images,1); 
imageSize = size(I,1:2);
cameraParams = estimateCameraParameters(imagePoints,worldPoints,ImageSize=imageSize);

レンズ歪みを除去し、結果を表示します。

I = images.readimage(1);
J1 = undistortImage(I,cameraParams);
figure; 
imshowpair(I,J1,"montage");
title("Original Image (left) vs. Corrected Image (right)");

Figure contains an axes object. The hidden axes object with title Original Image (left) vs. Corrected Image (right) contains an object of type image.

J2 = undistortImage(I,cameraParams,OutputView="full");
figure; 
imshow(J2);
title("Full Output View");

Figure contains an axes object. The hidden axes object with title Full Output View contains an object of type image.

キャリブレーション イメージを含む imageDatastore オブジェクトを作成します。

images = imageDatastore(fullfile(toolboxdir("vision"),"visiondata", ...
   "calibration","mono"));
imageFileNames = images.Files;

キャリブレーション パターンを検出します。

[imagePoints,patternDims] = detectCheckerboardPoints(imageFileNames);

四角形のコーナーのワールド座標を生成します。正方形のサイズはミリメートル単位です。

squareSize = 29; % millimeters
worldPoints = patternWorldPoints("checkerboard",patternDims,squareSize);

カメラのキャリブレーションを行います。

I = readimage(images,10); 
imageSize = [size(I, 1), size(I, 2)];
params = estimateCameraParameters(imagePoints,worldPoints,ImageSize=imageSize);
intrinsics = params.Intrinsics;

イメージを読み込み、チェッカーボード点を検出します。

points = detectCheckerboardPoints(I);

点を歪み補正します。

undistortedPoints = undistortPoints(points,intrinsics);

イメージの歪みを補正します。

[J, newIntrinsics] = undistortImage(I,intrinsics,OutputView="full");

歪み補正後の点を平行移動します。

newOrigin = intrinsics.PrincipalPoint - newIntrinsics.PrincipalPoint;
undistortedPoints = [undistortedPoints(:,1) - newOrigin(1), ...
                     undistortedPoints(:,2) - newOrigin(2)];

結果を表示します。

figure; 
imshow(I); 
hold on;
plot(points(:,1),points(:,2),"r*-");
title("Detected Points"); 
hold off;

Figure contains an axes object. The hidden axes object with title Detected Points contains 2 objects of type image, line.

figure; 
imshow(J); 
hold on;
plot(undistortedPoints(:,1),undistortedPoints(:,2),"g*-");
title("Undistorted Points"); 
hold off;

Figure contains an axes object. The hidden axes object with title Undistorted Points contains 2 objects of type image, line.

入力引数

すべて折りたたむ

入力イメージ。M x N x 3 のトゥルーカラー、または MN 列の 2 次元グレースケールで指定します。入力イメージは、実数で非スパースでなければなりません。

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

カメラの内部パラメーター。cameraParameters オブジェクト、cameraIntrinsics オブジェクト、cameraIntrinsicsKB オブジェクトとして指定します。

入力イメージで使用する内挿法。"linear""nearest"、または "cubic" として指定します。

名前と値の引数

すべて折りたたむ

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

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: (FillValues=[0 0.4470 0.7410]) は、入力イメージの境界外にある出力ピクセル値を青色に設定します。

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

出力イメージのサイズ。"same""full"、または "valid" として指定します。プロパティを "same" に設定すると、関数は出力イメージが入力イメージのサイズにマッチするように設定します。プロパティを "full" に設定すると、出力には入力イメージのすべてのピクセルが含まれます。プロパティを "valid" に設定すると、関数は有効なピクセルのみが含まれるように出力イメージをトリミングします。

入力イメージに対して、次のようになります。

OutputView出力イメージ
"same"

入力イメージのサイズをマッチさせます。

"full"

入力イメージのすべてのピクセル。

"valid"

入力イメージの有効なピクセルのみ。

出力引数

すべて折りたたむ

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

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

カメラの内部パラメーター。cameraIntrinsics オブジェクトとして返されます。オブジェクトには、カメラの内部パラメーターとレンズ歪み係数が含まれており、これらはレンズ歪みを除去した出力イメージを生成するために使用されます。

ステレオ カメラのキャリブレーション、マルチカメラのキャリブレーション、LiDAR カメラのキャリブレーション、三角測量、その他同様のタスクなど、歪み補正後のイメージ J を使用するフォトグラメトリの用途では、camIntrinsics の出力を使用することを推奨します。

拡張機能

すべて展開する

バージョン履歴

R2014a で導入

すべて展開する