Main Content

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

detectCheckerboardPoints

イメージ内のチェッカーボード パターンの検出

説明

[imagePoints,boardSize] = detectCheckerboardPoints(I) は、2 次元トゥルーカラー イメージまたはグレースケール イメージで、4 行 4 列の正方形よりもサイズが大きい白黒のチェッカーボードを検出します。この関数は、チェッカーボードの検出点と次元を返します。

[imagePoints,boardSize,imagesUsed] = detectCheckerboardPoints(imageFileNames) は、ファイル名の配列として指定された入力イメージ セット内のチェッカーボード パターンを検出します。

[imagePoints,boardSize,imagesUsed] = detectCheckerboardPoints(images) は、グレースケール イメージまたはトゥルーカラー イメージの配列として指定された入力イメージ セット内のチェッカーボード パターンを検出します。

[imagePoints,boardSize,pairsUsed] = detectCheckerboardPoints(imageFileNames1,imageFileNames2) は、ファイル名の cell 配列として指定されたイメージのステレオ ペア内のチェッカーボード パターンを検出します。

[imagePoints,boardSize,pairsUsed] = detectCheckerboardPoints(images1,images2) は、グレースケール イメージまたはトゥルーカラー イメージの配列として指定されたイメージのステレオ ペア内のチェッカーボード パターンを検出します。

[imagePoints,boardSize,pairsUsed] = detectCheckerboardPoints(___,Name,Value) は、Name,Value ペアの引数を 1 つ以上指定したオプションを追加で使用します。指定していないプロパティは既定値になります。

すべて折りたたむ

GoPro カメラからのキャリブレーション イメージを格納する imageDatastore を作成します。

imds = imageDatastore(fullfile(toolboxdir('vision'),'visiondata','calibration','gopro'));

魚眼レンズ イメージでの使用に適した 'HighDistortion' オプションを使用して、キャリブレーション パターンを検出します。

[imagePoints,boardSize,imagesUsed] = detectCheckerboardPoints(imds.Files(1:4),'HighDistortion',true);

検出した点を表示します。

for i = 1:4
  % Read image
  I = readimage(imds, i);

  % Insert markers at detected point locations
  I = insertMarker(I, imagePoints(:,:,i), 'o', 'Color', 'red', 'Size', 10);

  % Display image
  subplot(2, 2, i);
  imshow(I);
end

Figure contains 4 axes objects. Axes object 1 contains an object of type image. Axes object 2 contains an object of type image. Axes object 3 contains an object of type image. Axes object 4 contains an object of type image.

チェッカーボード パターンを含むイメージを読み込みます。

imageFileName = fullfile(toolboxdir('vision'),'visiondata','calibration','webcam','image4.tif');
I = imread(imageFileName);

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

[imagePoints,boardSize] = detectCheckerboardPoints(I);

検出した点を表示します。

J = insertText(I,imagePoints,1:size(imagePoints,1));
J = insertMarker(J,imagePoints,'o','Color','red','Size',5);
imshow(J);
title(sprintf('Detected a %d x %d Checkerboard',boardSize));

Figure contains an axes object. The axes object with title Detected a 7 x 10 Checkerboard contains an object of type image.

キャリブレーション イメージのファイル名の cell 配列を作成します。

for i = 1:5
  imageFileName = sprintf('image%d.tif', i);
  imageFileNames{i} = fullfile(matlabroot,'toolbox','vision',...
       'visiondata','calibration','webcam',imageFileName);
end

イメージ内のキャリブレーション パターンを検出します。

[imagePoints,boardSize,imagesUsed] = detectCheckerboardPoints(imageFileNames, 'PartialDetections', false);

検出した点を表示します。

imageFileNames = imageFileNames(imagesUsed);
for i = 1:numel(imageFileNames)
  I = imread(imageFileNames{i});
  subplot(2, 2, i);
  imshow(I);
  hold on;
  plot(imagePoints(:,1,i),imagePoints(:,2,i),'ro');
end

ステレオ イメージを読み取ります。

numImages = 4;
images1 = cell(1, numImages);
images2 = cell(1, numImages);
for i = 1:numImages
    images1{i} = fullfile(matlabroot,'toolbox','vision',...
        'visiondata','calibration','stereo','left',sprintf('left%02d.png',i));
    images2{i} = fullfile(matlabroot,'toolbox','vision',...
        'visiondata','calibration','stereo','right',sprintf('right%02d.png',i));
end

イメージ内のチェッカーボードを検出します。

[imagePoints,boardSize,pairsUsed] = ...
    detectCheckerboardPoints(images1,images2);

images1 の点を表示します。

images1 = images1(pairsUsed);
figure;
for i = 1:numel(images1)
      I = imread(images1{i});
      subplot(2,2,i);
      imshow(I); 
      hold on; 
      plot(imagePoints(:,1,i,1),imagePoints(:,2,i,1),'ro');
end 
annotation('textbox',[0 0.9 1 0.1],'String','Camera 1',...
    'EdgeColor','none','HorizontalAlignment','center')

Figure contains 4 axes objects. Axes object 1 contains 2 objects of type image, line. Axes object 2 contains 2 objects of type image, line. Axes object 3 contains 2 objects of type image, line. Axes object 4 contains 2 objects of type image, line.

images2 の点を表示します。

images2 = images2(pairsUsed);
figure;
for i = 1:numel(images2)
      I = imread(images2{i});
      subplot(2, 2, i);
      imshow(I);
      hold on; 
      plot(imagePoints(:,1,i,2),imagePoints(:,2,i,2),'ro');
end 
annotation('textbox',[0 0.9 1 0.1],'String','Camera 2',...
    'EdgeColor','none','HorizontalAlignment','center')

Figure contains 4 axes objects. Axes object 1 contains 2 objects of type image, line. Axes object 2 contains 2 objects of type image, line. Axes object 3 contains 2 objects of type image, line. Axes object 4 contains 2 objects of type image, line.

入力引数

すべて折りたたむ

入力イメージ。M x N x 3 のトゥルーカラー、または M 行 N 列の 2 次元グレースケールとして指定します。入力イメージは、実数で非スパースでなければなりません。関数で検出できるチェッカーボードの最小サイズは 4 行 4 列の正方形です。

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

イメージ ファイル名。N 個のファイル名の N 要素 cell 配列として指定します。

カメラ 1 イメージのファイル名。N 個のファイル名の N 要素 cell 配列として指定します。この配列に含まれているイメージは、ステレオ ペアを形成する imageFileNames2 に含まれているイメージと同じ順序でなければなりません。

カメラ 2 イメージのファイル名。N 個のファイル名の N 要素 cell 配列として指定します。この配列に含まれているイメージは、ステレオ ペアを形成する imageFileNames1 に含まれているイメージと同じ順序でなければなりません。

イメージ。グレースケール イメージまたはトゥルーカラー イメージのセットを含む H x W x B x F の配列として指定します。入力の次元は次のとおりです。

H はイメージの高さを表します。
W はイメージの幅を表します。
B はカラー チャネルを表します。値 1 はグレースケール イメージ、値 3 はトゥルーカラー イメージを示します。
F はイメージ フレーム数を表します。

カメラ 1 からのステレオ ペア イメージ。グレースケール イメージまたはトゥルーカラー イメージのセットを含む H x W x B x F の配列として指定します。入力の次元は次のとおりです。

H はイメージの高さを表します。
W はイメージの幅を表します。
B はカラー チャネルを表します。値 1 はグレースケール イメージ、値 3 はトゥルーカラー イメージを示します。
F はイメージ フレーム数を表します。

カメラ 2 からのステレオ ペア イメージ。グレースケール イメージまたはトゥルーカラー イメージのセットを含む H x W x B x F の配列として指定します。入力の次元は次のとおりです。

H はイメージの高さを表します。
W はイメージの幅を表します。
B はカラー チャネルを表します。値 1 はグレースケール イメージ、値 3 はトゥルーカラー イメージを示します。
F はイメージ フレーム数を表します。

名前と値の引数

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

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

例: 'MinCornerMetric', '0.15'

コーナー メトリクスの最小しきい値。非負のスカラーとして指定します。イメージにノイズが含まれている場合や、テクスチャが多く使用されている場合、この値を増やして誤ったコーナー検出の数を削減します。'HighDistortion' プロパティを false に設定すると、関数は既定値を 0.15 に設定します。'HighDistortion' プロパティを true に設定すると、関数は既定値を 0.12 に設定します。値を小さくすると、コーナー検出が増加します。

強い歪み。false または true として指定します。イメージに強い歪みが含まれているときは、'HighDistortion'true に設定します。これは、魚眼カメラなどの広角カメラで一般的です。イメージに強い歪みが含まれていないときは、'HighDistortion'false に設定します。'HighDistortion'true に設定すると、イメージの歪みに対する復元力は高まりますが、処理速度は低下します。

部分検出。true または false として指定します。部分的に検出されたチェッカーボードを返すには、'PartialDetections'true に設定します。この関数は、欠損しているキーポイント検出を [NaN,NaN] 座標で埋めます。部分的に検出されたチェッカーボードを破棄するには、'PartialDetections'false に設定します。このプロパティは、ステレオ イメージ ペアでは無視されます。

出力引数

すべて折りたたむ

検出されたチェッカーボードのコーナーの座標。1 つのイメージの場合は M 行 2 列の行列として返されます。複数のイメージの場合、点は M x 2 x number of images の配列として返され、イメージのステレオ ペアの場合、点は M x 2 x number of pairs x number of cameras の配列として返されます。

ステレオ ペアの場合、imagePoints(:,:,:,1) は最初のイメージ セットの点で、imagePoints(:,:,:,2) は 2 番目のイメージ セットの点です。出力には M 個の [x y] 座標が含まれます。各座標は、チェッカーボードで正方形のコーナーが検出された点を表します。関数によって返される点の数は、検出された正方形の数を示す boardSize の値によって決まります。関数はサブピクセルの精度で点を検出します。

関数は点の数 M を次のように計算します。

M = prod(boardSize-1).

チェッカーボードを検出できない場合は次のようになります。
imagePoints = []
boardSize = [0,0]

imageFileNames 入力を指定すると、関数は imagePoints を M x 2 x N の配列として返すことができます。この配列では、N はチェッカーボードが検出されたイメージの数を表します。チェッカーボードが検出できない場合、関数は imagePoints[] に設定します。

単一カメラのイメージのみの場合:

  • 完全なチェッカーボードが検出できない場合、関数は、imagePoints で欠損しているコーナーの x-y 座標として [NaN,NaN] を使用して、部分的に検出されたチェッカーボードを返します。この既定の動作は、名前と値の引数 'PartialDetections' を使用して変更できます。

  • 可能な場合、関数は、部分的に検出されたチェッカーボードの原点の位置とコーナーの配置が、全体が表示された状態のチェッカーボードと一致するように、その向きを設定します。関数が入力イメージのいずれにおいても完全なチェッカーボードを検出できない場合、検出された最大サイズのチェッカーボードが参照チェッカーボードとして使用されます。

チェッカーボードの次元。2 要素ベクトル [height, width] として返されます。チェッカーボードの次元は正方形の数で表されます。

チェッカーボードが検出できない場合、関数は boardSize[0,0] に設定します。

パターン検出フラグ。N 個の論理値の N 行 1 列の logical ベクトルとして返されます。関数は、入力イメージと同じ数の論理値を出力します。値 true は、パターンが対応するイメージで検出されたことを示します。値 false は、パターンが検出されなかったことを示します。

ステレオ ペアのパターン検出フラグ。N 個の論理値の N 行 1 列の logical ベクトルとして返されます。関数は、入力イメージと同じ数の論理値を出力します。値 true は、パターンが対応するステレオ イメージのペアで検出されたことを示します。値 false は、パターンが検出されなかったことを示します。

ステレオ ペア パターン検出の場合、チェッカーボードを検出するには、両方のイメージでチェッカーボード全体が表示されている必要があります。単一カメラのキャリブレーションとは異なり、ステレオ イメージ ペアでは部分的に検出されたチェッカーボードが除外されます。

参照

[1] Geiger, A., F. Moosmann, O. Car, and B. Schuster. "Automatic Camera and Range Sensor Calibration using a Single Shot," International Conference on Robotics and Automation (ICRA), St. Paul, USA, May 2012.

拡張機能

バージョン履歴

R2014a で導入