2.2.1 カメラキャリブレーション：アプリケーション

# 目次へのリンク


[MATLABによる画像処理・コンピュータービジョン入門目次](https://qiita.com/tohruk/items/e5f7939b622bcf2e3c4c)


# 概要


MATLABによるカメラキャリブレーションのワークフローについて紹介します。




Computer Vision Toolbox™の「カメラキャリブレーター」アプリを活用します。


# 初期化

```matlab:Code
clear; clc; close all; imtool close all
```

# カメラキャリブレーション用の画像の確認

```matlab:Code
imageFolder = fullfile(toolboxdir('vision'), 'visiondata', ...
    'calibration', 'mono');
winopen(imageFolder);
```

# カメラキャリブレーターの起動

```matlab:Code
squareSize = 29;  % 1マスのサイズ（単位：mm）
cameraCalibrator(imageFolder,squareSize);
```

# 画像から自動的にチェッカーボードが検出される


チェッカーボードが検出されなかった画像は除外されます。




![image_0_png.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14336/f9a5a0c0-a7c8-c86f-8a94-56fdbff3eb8f.jpeg)


# キャリブレーションを実行


アプリ上で「キャリブレーション」をクリックし、キャリブレーションを実行します。




![image_1_png.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14336/3e7182a4-39ee-eb03-53f9-1055fa7d1591.jpeg)


# キャリブレーションの結果を確認


再投影誤差やカメラの外部パラメータを可視化し、キャリブレーションの妥当性を確認します。




再投影誤差が極端に大きいチェッカーボード画像はブレが大きいなどキャリブレーションに適していない場合もあります。




その場合は対象画像を除外して再度キャリブレーションを実行します。




![image_2_png.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14336/583119d2-acdd-6fc3-5c45-77bda3d129e5.jpeg)


# 実行結果のエクスポート


推定結果のカメラパラメーターをワークスペースにエクスポートします。




![image_3_png.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14336/661b6b97-ac86-484b-2279-27e8ee333609.jpeg)


# エクスポートしたカメラパラメーターの確認

```matlab:Code
cameraParams
```


```text:Output
cameraParams = 
  cameraParameters のプロパティ:

   Camera Intrinsics
                         Intrinsics: [1x1 cameraIntrinsics]

   Camera Extrinsics
                   RotationMatrices: [3x3x9 double]
                 TranslationVectors: [9x3 double]

   Accuracy of Estimation
              MeanReprojectionError: 0.1832
                 ReprojectionErrors: [54x2x9 double]
                  ReprojectedPoints: [54x2x9 double]

   Calibration Settings
                        NumPatterns: 9
                        WorldPoints: [54x2 double]
                         WorldUnits: 'mm'
                       EstimateSkew: 0
    NumRadialDistortionCoefficients: 2
       EstimateTangentialDistortion: 0

```


```matlab:Code
cameraParams.Intrinsics % 内部パラメーター
```


```text:Output
ans = 
  cameraIntrinsics のプロパティ:

             FocalLength: [714.1886 710.3786]
          PrincipalPoint: [563.6480 355.7251]
               ImageSize: [712 1072]
        RadialDistortion: [-0.3536 0.1730]
    TangentialDistortion: [0 0]
                    Skew: 0
         IntrinsicMatrix: [3x3 double]

```

# エクスポートしたカメラパラメーターを使って画像の歪補正

```matlab:Code
imds = imageDatastore(imageFolder);
origI = imds.readimage(1);
figure;imshow(origI)
```


![figure_0_png.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14336/0f5a17d7-512f-2c86-2eab-4ace83105011.jpeg)


```matlab:Code
[undistI, ~] = undistortImage(origI, cameraParams);
figure;imshowpair(origI,undistI);truesize;
```


![figure_1_png.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14336/cd99eba7-9e05-d636-b73f-a53066aa42da.jpeg)

# まとめ


MATLABによるカメラキャリブレーションのワークフローについて紹介しました。




アプリを活用することによってカメラキャリブレーションを効率的に試行錯誤できます。


# 参考

   -  [カメラ キャリブレーションとは](https://jp.mathworks.com/help/vision/ug/camera-calibration.html) 
   -  [単一カメラ キャリブレーター アプリ](https://jp.mathworks.com/help/vision/ug/single-camera-calibrator-app.html) 



# 謝辞


本記事は @eigs さんの[livescript2markdown](https://github.com/minoue-xx/livescript2markdown)を使わせていただいてます。



# 目次へのリンク


[MATLABによる画像処理・コンピュータービジョン入門目次](https://qiita.com/tohruk/items/e5f7939b622bcf2e3c4c)