Newer
Older
TIASshot / docs / 05_TECH / TECH_03_色補正処理仕様.md

色補正処理仕様 (Color Correction Specification)

処理の全体フロー (Overall Flow)

1. ArUco マーカー検出(DetectChart)
       ↓
2. チャート固定判定
       ↓
3. ホワイトバランス自動調整(ゲイン更新)
       ↓
4. TCC 変換行列の計算(CalcTcc)
       ↓
5. 変換行列の保存・撮影の有効化

チャート検出(DetectChart) (Chart Detection)

ArUco マーカー検出

  • 辞書: Dict4X4_50(4×4 ビット,50種)
  • 使用マーカー ID: 40(チャート上端),41(チャート下端)
  • 両方のマーカーが検出できない場合は処理をスキップする.
  • ID40 の Y 座標が ID41 より大きい場合(上下逆)は警告を表示する.

チャート固定判定

  • ID40 の検出座標と前フレームの座標の距離を計算する.
  • 距離 < Calib/ChartSetCriteriaCalib/ChartSetCount フレーム連続したら固定と判断する.
  • 動きを検出したらカウントをリセットする.

ホモグラフィ計算とチャートマスク作成

  • 2つのマーカーの角点(計8点)からホモグラフィ行列を計算する.
  • ホモグラフィで画像を 1545×810 px に正面化する.
  • 正面化画像上で 24 色票の ROI を定義し(6列×4行,各 80×80 px),元の画像座標系に逆変換してマスクを生成する.
  • 生成したマスクを _chartMasks リスト(インデックス 0〜23)に格納する.

TCC 変換行列の計算(CalcTcc) (TCC Matrix Calculation)

チャート RGB 値の取得

  • _chartMasks を使って 24 パッチの平均 RGB 値を測定する(24×3 行列).

多項式拡張(ExtendMat)

3チャンネル(R,G,B)を指定の次元数に拡張する.

次元数と項の対応

次元数追加される項
4 (1次式)1, R, G, B
10 (2次式)+ RG, RB, GB, R², G², B²
17 (3次式)+ R²B, R²G, G²R, G²B, B²R, B²G, RGB
  • 各項は ExtendChannels テーブルで定義した3チャンネルの積として計算する.

変換行列の算出(CalcConvertMatrix)

  • 拡張行列(24×N)と目標行列(24×3)から最小二乗法(SVD分解)で変換行列(N×3)を算出する.
  • Cv2.Solve(..., DecompTypes.SVD) を使用する.

算出する変換行列の種類

  • RGB→sRGB: カメラ RGB から sRGB への変換行列
  • RGB→XYZ: カメラ RGB から XYZ 色空間への変換行列
  • sRGB→XYZ: sRGB から XYZ 色空間への変換行列
  • 各行列は指定した次元数ぶん計算・保存される.

TCC参照値ファイル

  • tcc_srgb.csv: 24色票の標準 sRGB 値(24×3 行列)
  • tcc_xyz.csv: 24色票の標準 XYZ 値(24×3 行列)
  • アプリ起動時に読み込み,CameraBase に保持する.

画像の色変換(ConvertImage) (Image Color Conversion)

  1. 入力画像を CV_64FC3(64bit浮動小数点3チャンネル)に変換する
  2. 画像を1次元(ピクセル数×3)に変形(Reshape)する
  3. 多項式拡張(ExtendMat)でピクセル数×N 行列にする
  4. 変換行列(N×3)を右から掛けて変換後の値を得る
  5. CV_8UC3(8bit整数)に変換して出力する
  • 変換後の値は 0〜255 の範囲に自動クリップされる(ConvertTo による飽和).