# 機能仕様 (Feature Specification)

## 1. 対応カメラ (Supported Cameras)

起動時に Lucam → ImagingSource の順で接続を試みる．

**ImagingSource カメラ（新カメラ）**

- 対応機種: DFK33UX178，DFK23UX249
  - ※ README には DBK33UX178 と記載されていたが，ソースコード上は DFK33UX178 として扱われている．実機の型番は要確認．
- SDK: IC Imaging Control (TIS.Imaging)
- 設定ファイル: `[デバイス名].xml`（例: `DFK33UX178.xml`）

**Lumenera カメラ（旧カメラ）**

- 対応機種: Lw110
- SDK: Lumenera SDK（`lumenera.api.dll`）

## 2. プレビュー (Preview)

- 起動後，接続したカメラのライブ映像をメインウィンドウに表示する．
- サブモニタへのプレビュー表示にも対応する（PreviewMonitor）．
- ImagingSource カメラはプレビュー時に ROI クリップを適用する．

## 3. 自動キャリブレーション (Auto Calibration)

プレビュー中に舌診チャートを検出すると自動でキャリブレーションを開始する．

### 3-1. チャート検出

- ArUco マーカー（ID 40, 41）を使用してチャートを自動検出する．
- チャートが一定フレーム数静止したことを確認してからキャリブを開始する．

### 3-2. ホワイトバランス調整

- チャートの白色票（24色票の13番）を基準にカメラのゲインを自動調整する．
- 目標値は `config.xml` の `Calib/Reference` で指定する．

### 3-3. TCC（色変換行列）計算

- 24パッチの平均 RGB 値を計測し，最小二乗法（SVD）で変換行列を算出する．
- 変換次元数（多項式の次数）は `Calib/ConversionChannels` で指定する．
  - 4: 1次式（R，G，B，1）
  - 10: 2次式（+RG，RB，GB，R²，G²，B²）
  - 17: 3次式（+R²B，R²G，G²R，G²B，B²R，B²G，RGB）
- 複数の次元数をカンマ区切りで同時に指定可能（例: `4,10,17`）．
- 算出した変換行列は CSV ファイルに保存される．

## 4. 撮影 (Shooting)

キャリブレーション完了後に撮影ボタンが有効になる．

**1枚撮影**

- 撮影した画像を1枚保存する．

**連続撮影**

- 指定した枚数・間隔で連続撮影する．
- 枚数・間隔は UI で変更可能（デフォルト値は `config.xml` で設定）．

**保存される画像**

- 元画像（RGB）: `Shot{NO}.png`
- sRGB 変換画像: `sRGB{CN}_{NO}.jpg`（指定した次元数ぶん生成される）

## 5. データ保存 (Data Saving)

撮影・キャリブレーション結果は保存フォルダ以下に日時フォルダで自動保存される．

**保存先フォルダ構成**

- `[SaveFolder]/[日付]/[時刻]-[データ名]/`

**キャリブレーション保存ファイル**

- `TCC.png`: キャリブ時の画像
- `TCC_ROIs.jpg`: チャートの ROI 確認画像
- `TCC_RGB.csv`: チャート24色票の RGB 値
- `TCC_sRGB{CN}.csv`: チャート24色票の sRGB 変換値
- `Conv_RGB-sRGB{CN}.csv`: RGB→sRGB 変換行列
- `Conv_RGB-XYZ{CN}.csv`: RGB→XYZ 変換行列
- `Conv_sRGB-XYZ{CN}.csv`: sRGB→XYZ 変換行列

**撮影保存ファイル**

- `Info.csv`: 撮影情報（カメラ型番・SN，露光時間，ゲイン等）
- `Shot{NO}.png`: 元画像（RGB）
- `sRGB{CN}_{NO}.jpg`: sRGB 変換画像

## 6. 光源制御 (Light Source Control)

- シリアル通信（USB-シリアル変換）で光源の ON/OFF を制御する．
- 対応デバイス: Silicon Labs CP210x（`config.xml` で変更可能）．
- キャリブレーション中は光源の切り替えが無効になる．
- 光源デバイスが見つからない場合，光源ボタンが無効化される．
