diff --git a/config/roi_config.json b/config/roi_config.json index c474086..1706232 100644 --- a/config/roi_config.json +++ b/config/roi_config.json @@ -1,5 +1,5 @@ { - "minitias": { + "smtias": { "whiteboard": { "x": 539, "y": 1015, diff --git "a/docs/01_GUIDE/GUIDE_07_\343\203\207\343\202\243\343\203\254\343\202\257\343\203\210\343\203\252\346\247\213\351\200\240\350\246\217\345\211\207.md" "b/docs/01_GUIDE/GUIDE_07_\343\203\207\343\202\243\343\203\254\343\202\257\343\203\210\343\203\252\346\247\213\351\200\240\350\246\217\345\211\207.md" index 11953bd..3e1c4ac 100644 --- "a/docs/01_GUIDE/GUIDE_07_\343\203\207\343\202\243\343\203\254\343\202\257\343\203\210\343\203\252\346\247\213\351\200\240\350\246\217\345\211\207.md" +++ "b/docs/01_GUIDE/GUIDE_07_\343\203\207\343\202\243\343\203\254\343\202\257\343\203\210\343\203\252\346\247\213\351\200\240\350\246\217\345\211\207.md" @@ -3,7 +3,7 @@ ## プロジェクトルート (Project Root) ```text -MiniTias-Evaluation/ +SmTIAS-Evaluation/ ├── src/ # ソースコード │ ├── io/ # 画像の読み込み │ ├── analysis/ # 解析ロジック @@ -14,7 +14,7 @@ ├── data/ # 入力画像(Git 管理外) ├── output/ # 解析結果(Git 管理外) ├── docs/ # ドキュメント -└── MiniTias/ # 参照用コピー(Git 管理外) +└── SmTIAS/ # 参照用コピー(Git 管理外) ``` ## 配置ルール (Placement Rules) @@ -24,7 +24,7 @@ | 解析ロジック | `src/` 配下の該当パッケージ | 1 モジュール = 1 責務 | | 実行スクリプト | `scripts/` | CLI のエントリーポイント | | テスト | `tests/` | `src/` の構造に対応させる | -| 入力画像 | `data/{装置名}/{撮影物}/` | 例: `data/minitias/whiteboard/` | +| 入力画像 | `data/{装置名}/{撮影物}/` | 例: `data/smtias/whiteboard/` | | 出力結果 | `output/figures/`,`output/results/` | 図は PNG,数値は CSV | | 設定ファイル | プロジェクトルート | `pyproject.toml`,`ruff.toml` 等 | diff --git "a/docs/02_ENV/ENV_01_\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257.md" "b/docs/02_ENV/ENV_01_\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257.md" index ebeb2b5..ba0d274 100644 --- "a/docs/02_ENV/ENV_01_\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257.md" +++ "b/docs/02_ENV/ENV_01_\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257.md" @@ -10,7 +10,7 @@ | --- | --- | --- | | NumPy | 数値計算・配列操作 | 画像データの行列演算の基盤 | | OpenCV (`opencv-python`) | 画像の読み込み・前処理 | PNG 読み込み,ROI 抽出,色空間変換に対応 | -| rawpy (`rawpy>=0.21.0`) | DNG (RAW_SENSOR) 読み込み | MiniTIAS 定量モードの 10bit Bayer DNG をデモザイク・linear 展開(libraw ベース) | +| rawpy (`rawpy>=0.21.0`) | DNG (RAW_SENSOR) 読み込み | SmTIAS 定量モードの 10bit Bayer DNG をデモザイク・linear 展開(libraw ベース) | | colour-science | CIE L\*a\*b\* 変換,ΔE 計算 | CIE 規格準拠の色彩計算を正確に実装済み | | Matplotlib | グラフ・図の生成 | 論文掲載用の高品質な図を出力可能 | | pandas | 数値結果の集計・CSV 出力 | 比較表の作成・データ管理に便利 | diff --git "a/docs/02_ENV/ENV_02_\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.md" "b/docs/02_ENV/ENV_02_\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.md" index 7458b7d..027508b 100644 --- "a/docs/02_ENV/ENV_02_\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.md" +++ "b/docs/02_ENV/ENV_02_\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.md" @@ -12,7 +12,7 @@ ```bash git clone -cd MiniTias-Evaluation +cd SmTIAS-Evaluation ``` ### 仮想環境の作成・有効化 (Create Virtual Environment) @@ -54,7 +54,7 @@ ```text data/ -├── minitias/ # MiniTIAS で撮影した画像 +├── smtias/ # SmTIAS で撮影した画像 │ └── whiteboard/ # 白板画像 └── tias/ # TIAS で撮影した画像 └── whiteboard/ # 白板画像 diff --git "a/docs/02_ENV/ENV_03_\347\256\241\347\220\206\350\200\205\347\224\250\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.md" "b/docs/02_ENV/ENV_03_\347\256\241\347\220\206\350\200\205\347\224\250\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.md" index a1234e6..2a32cbc 100644 --- "a/docs/02_ENV/ENV_03_\347\256\241\347\220\206\350\200\205\347\224\250\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.md" +++ "b/docs/02_ENV/ENV_03_\347\256\241\347\220\206\350\200\205\347\224\250\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.md" @@ -21,7 +21,7 @@ ## 初期ディレクトリの作成 (Create Directories) ```bash -mkdir -p data/minitias/whiteboard data/tias/whiteboard output +mkdir -p data/smtias/whiteboard data/tias/whiteboard output ``` ※ `data/` と `output/` は `.gitignore` で除外するため,空の `.gitkeep` ファイルは不要. diff --git "a/docs/03_PLAN/PLAN_01_\350\246\201\344\273\266\345\256\232\347\276\251\346\233\270.md" "b/docs/03_PLAN/PLAN_01_\350\246\201\344\273\266\345\256\232\347\276\251\346\233\270.md" index 7238c39..3b2568e 100644 --- "a/docs/03_PLAN/PLAN_01_\350\246\201\344\273\266\345\256\232\347\276\251\346\233\270.md" +++ "b/docs/03_PLAN/PLAN_01_\350\246\201\344\273\266\345\256\232\347\276\251\346\233\270.md" @@ -2,9 +2,9 @@ ## プロジェクト概要 (Project Overview) -- **プロジェクト名**: MiniTIAS-Evaluation -- **目的**: 千葉大学で開発中のスマートフォン舌画像撮影システム MiniTIAS の画質を,既存の大型装置 TIAS と定量的に比較検証する -- **背景**: 積分球を用いた大型装置 TIAS とスマートフォン版 MiniTIAS で同一対象を撮影し,画像品質の差を定量的に評価する必要がある +- **プロジェクト名**: SmTIAS-Evaluation +- **目的**: 千葉大学で開発中のスマートフォン舌画像撮影システム SmTIAS の画質を,既存の大型装置 TIAS と定量的に比較検証する +- **背景**: 積分球を用いた大型装置 TIAS とスマートフォン版 SmTIAS で同一対象を撮影し,画像品質の差を定量的に評価する必要がある ## 対象ユーザー (Target Users) @@ -15,32 +15,32 @@ ### やること (In Scope) -- **照明均一性の評価**: 白板画像の輝度分布を解析し,TIAS と MiniTIAS の照明均一性を比較する -- **色再現性の評価**: 舌模型画像の色差(ΔE)を算出し,TIAS と MiniTIAS の色再現性を比較する +- **照明均一性の評価**: 白板画像の輝度分布を解析し,TIAS と SmTIAS の照明均一性を比較する +- **色再現性の評価**: 舌模型画像の色差(ΔE)を算出し,TIAS と SmTIAS の色再現性を比較する - **L\*a\*b\* 色空間変換**: 撮影画像を sRGB から CIE L\*a\*b\* 色空間に変換し,色彩値を定量比較する - **結果の可視化**: 解析結果をグラフ・表として出力する(論文掲載用) - **バッチ処理**: 事前に撮影済みの PNG 画像を PC 上で事後処理する ### やらないこと (Out of Scope) -- MiniTIAS アプリ(Flutter/Dart)の修正・機能追加(`MiniTIAS/` は参照用コピー) +- SmTIAS アプリ(Flutter/Dart)の修正・機能追加(`SmTIAS/` は参照用コピー) - リアルタイム解析・撮影と同時の処理 - Web アプリ・GUI の構築 - 他者への配布を前提としたパッケージ化 ## 検証の進め方 (Evaluation Strategy) -まずは **MiniTIAS 単体での照明均一性評価** から着手する.MiniTIAS で撮影した白板画像の輝度分布を解析し,照明の均一性を定量的に評価する.その後,TIAS との比較や色再現性の評価に拡張する. +まずは **SmTIAS 単体での照明均一性評価** から着手する.SmTIAS で撮影した白板画像の輝度分布を解析し,照明の均一性を定量的に評価する.その後,TIAS との比較や色再現性の評価に拡張する. ## 検証対象 (Evaluation Targets) | 優先度 | 対象 | 撮影物 | 評価項目 | 装置 | | --- | --- | --- | --- | --- | -| 1(最初) | 照明均一性 | 白板 | 輝度分布,均一性指標 | MiniTIAS のみ | -| 2(次) | 照明均一性比較 | 白板 | 輝度分布の装置間比較 | MiniTIAS vs TIAS | -| 3 | 色再現性 | 舌模型 | ΔE(色差),L\*a\*b\* 値の比較 | MiniTIAS vs TIAS | +| 1(最初) | 照明均一性 | 白板 | 輝度分布,均一性指標 | SmTIAS のみ | +| 2(次) | 照明均一性比較 | 白板 | 輝度分布の装置間比較 | SmTIAS vs TIAS | +| 3 | 色再現性 | 舌模型 | ΔE(色差),L\*a\*b\* 値の比較 | SmTIAS vs TIAS | ## データ (Data) -- **入力**: TIAS および MiniTIAS で撮影した PNG 画像(両方とも手元にあり) +- **入力**: TIAS および SmTIAS で撮影した PNG 画像(両方とも手元にあり) - **出力**: 解析結果(数値データ,グラフ,比較表) diff --git "a/docs/03_PLAN/PLAN_02_\351\226\213\347\231\272\343\202\271\343\203\206\343\203\203\343\203\227.md" "b/docs/03_PLAN/PLAN_02_\351\226\213\347\231\272\343\202\271\343\203\206\343\203\203\343\203\227.md" index c93e2c5..284e904 100644 --- "a/docs/03_PLAN/PLAN_02_\351\226\213\347\231\272\343\202\271\343\203\206\343\203\203\343\203\227.md" +++ "b/docs/03_PLAN/PLAN_02_\351\226\213\347\231\272\343\202\271\343\203\206\343\203\203\343\203\227.md" @@ -12,12 +12,12 @@ - `loader.py` で PNG 読み込み・ROI 抽出を実装 - ユニットテストで動作確認 -### ステップ 2: MiniTIAS 照明均一性評価 +### ステップ 2: SmTIAS 照明均一性評価 - `uniformity.py` で輝度分布・均一性指標(CoV,標準偏差,最大/最小比)を実装 - `plotter.py` で輝度マップ・ヒストグラムを生成 - `exporter.py` で CSV・PNG 出力 -- MiniTIAS の白板画像で実行し結果を確認 +- SmTIAS の白板画像で実行し結果を確認 ### ステップ 3: TIAS との照明均一性比較 diff --git "a/docs/04_SPEC/SPEC_01_\343\202\242\343\203\274\343\202\255\343\203\206\343\202\257\343\203\201\343\203\243\350\250\255\350\250\210.md" "b/docs/04_SPEC/SPEC_01_\343\202\242\343\203\274\343\202\255\343\203\206\343\202\257\343\203\201\343\203\243\350\250\255\350\250\210.md" index ab37fa7..8fa3d8e 100644 --- "a/docs/04_SPEC/SPEC_01_\343\202\242\343\203\274\343\202\255\343\203\206\343\202\257\343\203\201\343\203\243\350\250\255\350\250\210.md" +++ "b/docs/04_SPEC/SPEC_01_\343\202\242\343\203\274\343\202\255\343\203\206\343\202\257\343\203\201\343\203\243\350\250\255\350\250\210.md" @@ -3,7 +3,7 @@ ## ディレクトリ構造 (Directory Structure) ```text -MiniTias-Evaluation/ +SmTIAS-Evaluation/ ├── src/ │ ├── io/ │ │ └── loader.py # 画像読み込み(OpenCV) @@ -18,7 +18,7 @@ │ └── run_analysis.py # 実行エントリーポイント ├── tests/ ├── data/ -│ ├── minitias/whiteboard/ +│ ├── smtias/whiteboard/ │ └── tias/whiteboard/ └── output/ ``` @@ -51,7 +51,7 @@ ### 入力 (Input) - 形式: PNG(8bit RGB) -- 配置: `data/minitias/whiteboard/`,`data/tias/whiteboard/` +- 配置: `data/smtias/whiteboard/`,`data/tias/whiteboard/` ### 出力 (Output) diff --git "a/docs/04_SPEC/SPEC_02_\347\205\247\346\230\216\345\235\207\344\270\200\346\200\247\350\251\225\344\276\241\343\202\242\343\203\253\343\202\264\343\203\252\343\202\272\343\203\240.md" "b/docs/04_SPEC/SPEC_02_\347\205\247\346\230\216\345\235\207\344\270\200\346\200\247\350\251\225\344\276\241\343\202\242\343\203\253\343\202\264\343\203\252\343\202\272\343\203\240.md" index 484771c..8999c62 100644 --- "a/docs/04_SPEC/SPEC_02_\347\205\247\346\230\216\345\235\207\344\270\200\346\200\247\350\251\225\344\276\241\343\202\242\343\203\253\343\202\264\343\203\252\343\202\272\343\203\240.md" +++ "b/docs/04_SPEC/SPEC_02_\347\205\247\346\230\216\345\235\207\344\270\200\346\200\247\350\251\225\344\276\241\343\202\242\343\203\253\343\202\264\343\203\252\343\202\272\343\203\240.md" @@ -2,7 +2,7 @@ ## 概要 (Overview) -MiniTIAS で撮影した白板画像の照明均一性を定量的に評価する.白板の白壁面領域の輝度分布を解析し,3 つの指標で均一性を定量化する. +SmTIAS で撮影した白板画像の照明均一性を定量的に評価する.白板の白壁面領域の輝度分布を解析し,3 つの指標で均一性を定量化する. ## 輝度変換 (Luminance Conversion) @@ -58,9 +58,9 @@ ### 対象領域 -MiniTIAS の開口部に白板を取り付けて撮影する.ROI は**白板の表面領域**(中央の白い四角形)とする.以下を除外する: +SmTIAS の開口部に白板を取り付けて撮影する.ROI は**白板の表面領域**(中央の白い四角形)とする.以下を除外する: -- 白板の外側(MiniTIAS 筐体の壁面) +- 白板の外側(SmTIAS 筐体の壁面) - 白板のフレーム・エッジ部分 - ラベル(「SmTIAS 001」等) @@ -73,7 +73,7 @@ ### 起動コマンド ```bash -python scripts/select_roi.py --image data/minitias/whiteboard/<画像ファイル名>.png --config config/roi_config.json --roi minitias.whiteboard +python scripts/select_roi.py --image data/smtias/whiteboard/<画像ファイル名>.png --config config/roi_config.json --roi smtias.whiteboard ``` OpenCV のウィンドウが開くので,マウスで矩形を選択して Enter で確定する.ESC でキャンセル. @@ -219,10 +219,10 @@ ```bash # ディレクトリ内の全画像を一括解析 -python scripts/run_uniformity.py --image data/minitias/whiteboard/ --config config/roi_config.json --roi minitias.whiteboard +python scripts/run_uniformity.py --image data/smtias/whiteboard/ --config config/roi_config.json --roi smtias.whiteboard # 単一画像の解析 -python scripts/run_uniformity.py --image data/minitias/whiteboard/<画像ファイル名>.png --config config/roi_config.json --roi minitias.whiteboard +python scripts/run_uniformity.py --image data/smtias/whiteboard/<画像ファイル名>.png --config config/roi_config.json --roi smtias.whiteboard ``` ### 出力 diff --git "a/docs/05_TECH/TECH_01_DNG\345\257\276\345\277\234\350\246\201\346\261\202\344\273\225\346\247\230.md" "b/docs/05_TECH/TECH_01_DNG\345\257\276\345\277\234\350\246\201\346\261\202\344\273\225\346\247\230.md" index b77b907..8c7c2a4 100644 --- "a/docs/05_TECH/TECH_01_DNG\345\257\276\345\277\234\350\246\201\346\261\202\344\273\225\346\247\230.md" +++ "b/docs/05_TECH/TECH_01_DNG\345\257\276\345\277\234\350\246\201\346\261\202\344\273\225\346\247\230.md" @@ -1,17 +1,17 @@ -# MiniTias-Evaluation DNG 対応要求仕様 (DNG Support Specification for MiniTias-Evaluation) +# SmTIAS-Evaluation DNG 対応要求仕様 (DNG Support Specification for SmTIAS-Evaluation) > **本ドキュメントについて(取り込み注記)**: SmTIAS-LightSim プロジェクトから受領した DNG 対応要求仕様(先方での名称は TECH_05)を,本プロジェクトの命名規則(GUIDE_03)に従い `docs/05_TECH/TECH_01_DNG対応要求仕様.md` として取り込んだもの.文中の他ドキュメント参照(TECH_01/03/04・TEST_01・SPEC_04 等)は **SmTIAS-LightSim 側のドキュメント**を指し,本プロジェクト内には存在しない.本プロジェクトでの対応状況は `docs/PROGRESS.md` を参照. -本ドキュメントは SmTIAS-LightSim プロジェクトから **MiniTias-Evaluation** プロジェクトに対する **DNG 対応要求仕様** である.MiniTias 側で実装された定量撮影モード([TECH_01](TECH_01_定量撮影モード要求仕様.md) / [TECH_03](TECH_03_定量モード実装報告とSHADING_MODE相談.md))の出力フォーマットが PNG から DNG (RAW_SENSOR) に変更されたことに伴い,MiniTias-Evaluation 側にも DNG 読み込み・解析機能の追加を依頼する. +本ドキュメントは SmTIAS-LightSim プロジェクトから **SmTIAS-Evaluation** プロジェクトに対する **DNG 対応要求仕様** である.SmTIAS 側で実装された定量撮影モード([TECH_01](TECH_01_定量撮影モード要求仕様.md) / [TECH_03](TECH_03_定量モード実装報告とSHADING_MODE相談.md))の出力フォーマットが PNG から DNG (RAW_SENSOR) に変更されたことに伴い,SmTIAS-Evaluation 側にも DNG 読み込み・解析機能の追加を依頼する. ## 想定読者 (Intended Reader) -- **MiniTias-Evaluation 側 Claude セッション**: 本ドキュメントを最初に読んで作業着手する +- **SmTIAS-Evaluation 側 Claude セッション**: 本ドキュメントを最初に読んで作業着手する - **人間レビュー (rinto)**: 両セッションを橋渡しする ## 概要 (Overview) -MiniTias-Evaluation([MiniTias-Evaluation](https://github.com/rintoHasegawa/MiniTias-Evaluation) リポジトリ)に以下の機能追加を要求する: +SmTIAS-Evaluation([SmTIAS-Evaluation](https://github.com/rintoHasegawa/SmTIAS-Evaluation) リポジトリ)に以下の機能追加を要求する: 1. **DNG 読み込み I/F** の新規実装(10-bit BGGR Bayer 展開) 2. **メタデータ JSON 読み込み I/F** の新規実装(撮影条件・LSC マップ・hot pixel リスト等) @@ -26,7 +26,7 @@ ```text ┌─────────────────────────┐ ┌──────────────────────────┐ -│ MiniTias │ │ MiniTias-Evaluation │ +│ SmTIAS │ │ SmTIAS-Evaluation │ │ (Flutter / Android) │ ──→ │ (Python) │ │ 撮影アプリ │ │ 実機データ評価ツール │ │ - PNG 保存(通常モード) │ │ - 評価指標算出 │ @@ -45,14 +45,14 @@ ### 経緯のまとめ - 2026-05-28: SmTIAS-LightSim 側 Step 8 キャリブで「実機 PNG 自体が定量データとして揺らぐ」を発見 ([TEST_01](../06_TEST/TEST_01_キャリブレーション検証履歴.md)) -- 2026-05-28: MiniTias 側に [TECH_01 定量撮影モード要求仕様](TECH_01_定量撮影モード要求仕様.md) を発行 -- 2026-06-01: MiniTias 側で実装完了.AQUOS sense3 (SH-02M) が LEVEL_3 で DNG 経路採用 ([TECH_03](TECH_03_定量モード実装報告とSHADING_MODE相談.md)) -- 2026-06-01: SHADING_MODE = HIGH_QUALITY を本流維持で合意 ([TECH_04](TECH_04_MiniTIASへの回答.md)) -- **本ドキュメント (2026-06-01)**: MiniTias-Evaluation 側にも DNG 対応を依頼 +- 2026-05-28: SmTIAS 側に [TECH_01 定量撮影モード要求仕様](TECH_01_定量撮影モード要求仕様.md) を発行 +- 2026-06-01: SmTIAS 側で実装完了.AQUOS sense3 (SH-02M) が LEVEL_3 で DNG 経路採用 ([TECH_03](TECH_03_定量モード実装報告とSHADING_MODE相談.md)) +- 2026-06-01: SHADING_MODE = HIGH_QUALITY を本流維持で合意 ([TECH_04](TECH_04_SmTIASへの回答.md)) +- **本ドキュメント (2026-06-01)**: SmTIAS-Evaluation 側にも DNG 対応を依頼 -### MiniTias-Evaluation の現状 +### SmTIAS-Evaluation の現状 -MiniTias-Evaluation の I/O は現状 PNG 専用: +SmTIAS-Evaluation の I/O は現状 PNG 専用: ```python # 既存 I/F (src/io/loader.py) @@ -64,15 +64,15 @@ ## 役割分担 (Role Distribution) -DNG 読み込みの責務は **MiniTias-Evaluation を一次窓口**とする.既存パターン(`uniformity.py` が MiniTias-Evaluation から SmTIAS-LightSim にコピー)を踏襲する: +DNG 読み込みの責務は **SmTIAS-Evaluation を一次窓口**とする.既存パターン(`uniformity.py` が SmTIAS-Evaluation から SmTIAS-LightSim にコピー)を踏襲する: | プロジェクト | 責務 | | --- | --- | -| **MiniTias** | DNG + meta.json の保存(実装済) | -| **MiniTias-Evaluation(一次窓口)** | DNG/meta.json の読み込み I/F を正規実装.既存評価指標との並列対応 | -| **SmTIAS-LightSim(コピー側)** | MiniTias-Evaluation の DNG 読み込み I/F をコピー(`uniformity.py` パターン継承) | +| **SmTIAS** | DNG + meta.json の保存(実装済) | +| **SmTIAS-Evaluation(一次窓口)** | DNG/meta.json の読み込み I/F を正規実装.既存評価指標との並列対応 | +| **SmTIAS-LightSim(コピー側)** | SmTIAS-Evaluation の DNG 読み込み I/F をコピー(`uniformity.py` パターン継承) | -→ MiniTias-Evaluation の実装完了後,SmTIAS-LightSim 側 Claude セッションでコピー作業を実施する. +→ SmTIAS-Evaluation の実装完了後,SmTIAS-LightSim 側 Claude セッションでコピー作業を実施する. ## 要求仕様 (Requirements) @@ -87,7 +87,7 @@ black_level: int | None = None, output_format: str = "rgb_float32", ) -> numpy.ndarray: - """MiniTIAS 定量モード DNG を読み込み配列として返す. + """SmTIAS 定量モード DNG を読み込み配列として返す. Args: path: DNG ファイルのパス. @@ -120,7 +120,7 @@ #### `output_format` の使い分け - `rgb_float32` / `luma_float32`: SmTIAS-LightSim のシミュ vs 実機比較に推奨(linear ドメインで突合) -- `rgb_uint8`: 既存 MiniTias-Evaluation パイプラインとの互換用(既存 `analysis/uniformity.py` 等が uint8 前提の場合に有用) +- `rgb_uint8`: 既存 SmTIAS-Evaluation パイプラインとの互換用(既存 `analysis/uniformity.py` 等が uint8 前提の場合に有用) ### 2. メタデータ JSON 読み込み I/F @@ -128,7 +128,7 @@ ```python def load_metadata(path: str) -> dict: - """MiniTIAS 定量モード meta.json を読み込み辞書として返す. + """SmTIAS 定量モード meta.json を読み込み辞書として返す. Args: path: meta.json のパス. @@ -167,7 +167,7 @@ path: meta.json のパス. Returns: - ホット画素座標のリスト.MiniTias 側で取得実装後に有効化.未提供時は空リスト. + ホット画素座標のリスト.SmTIAS 側で取得実装後に有効化.未提供時は空リスト. """ ``` @@ -215,7 +215,7 @@ - LSC マップ (13×17) を画像解像度 (例 3264×2448) にバイリニア補間 - 画素ごとに割り算で逆適用 -- SHADING_MODE = OFF 撮影との比較検証に使用([TECH_04](TECH_04_MiniTIASへの回答.md) フォールバック条件 C1〜C3) +- SHADING_MODE = OFF 撮影との比較検証に使用([TECH_04](TECH_04_SmTIASへの回答.md) フォールバック条件 C1〜C3) ### 5. 既存 PNG 経路との並列対応(後方互換) @@ -249,7 +249,7 @@ raise ValueError(f"未対応のフォーマット: {ext}") ``` -これは MiniTias-Evaluation 側の判断で実装するかは任意.推奨は実装. +これは SmTIAS-Evaluation 側の判断で実装するかは任意.推奨は実装. ### 6. 評価指標との互換 @@ -279,7 +279,7 @@ - 既存通常モード PNG は sRGB OETF 適用済(端末の TONEMAP デフォルト) - 評価時の OETF の扱いは **解析対象次第**: - 形状指標(CoV / 勾配等): linear ドメインで算出が物理的に整合 - - 既存実機との互換比較: sRGB ドメインで算出(既存 MiniTias-Evaluation の挙動と一致) + - 既存実機との互換比較: sRGB ドメインで算出(既存 SmTIAS-Evaluation の挙動と一致) → `output_format` パラメータでユーザーが選択可能にする.既定は `rgb_float32`(linear)を推奨. @@ -299,7 +299,7 @@ ### ディレクトリ構造(提案) -MiniTias-Evaluation 既存構造に従い: +SmTIAS-Evaluation 既存構造に従い: ```text src/io/ @@ -343,23 +343,23 @@ ## SmTIAS-LightSim 側へのコピー手順 (Copy to SmTIAS-LightSim) -MiniTias-Evaluation での実装完了後,SmTIAS-LightSim 側 Claude セッションで以下を実施: +SmTIAS-Evaluation での実装完了後,SmTIAS-LightSim 側 Claude セッションで以下を実施: 1. **コピー対象ファイル**: - - `MiniTias-Evaluation/src/io/dng_loader.py` → `SmTIAS-LightSim/src/sm_tias_lightsim/evaluation/dng_loader.py` - - `MiniTias-Evaluation/src/io/metadata_loader.py` → `SmTIAS-LightSim/src/sm_tias_lightsim/evaluation/metadata.py` + - `SmTIAS-Evaluation/src/io/dng_loader.py` → `SmTIAS-LightSim/src/sm_tias_lightsim/evaluation/dng_loader.py` + - `SmTIAS-Evaluation/src/io/metadata_loader.py` → `SmTIAS-LightSim/src/sm_tias_lightsim/evaluation/metadata.py` 2. **既存パターンに従う** (`uniformity.py` と同じ流れ) 3. **ファイル先頭にコピー元を明記**: ```python """DNG 読み込みモジュール. - MiniTias-Evaluation/src/io/dng_loader.py を SmTIAS-LightSim にコピーしたもの. - オリジナルは MiniTias-Evaluation 側で管理する.バグ修正・機能追加はそちらで行い, + SmTIAS-Evaluation/src/io/dng_loader.py を SmTIAS-LightSim にコピーしたもの. + オリジナルは SmTIAS-Evaluation 側で管理する.バグ修正・機能追加はそちらで行い, 本プロジェクトに反映する形を取る. """ ``` 4. **既存 sm-evaluate との統合**: 既存 `cli/evaluate.py` に DNG 入力経路を追加 -5. **テストを SmTIAS-LightSim 側でも実装**(MiniTias-Evaluation 側のテストをコピー+プロジェクト固有部分を追加) +5. **テストを SmTIAS-LightSim 側でも実装**(SmTIAS-Evaluation 側のテストをコピー+プロジェクト固有部分を追加) ## 検証方法 (Verification) @@ -367,8 +367,8 @@ ### V1. PNG vs DNG 整合性 -- 同一シーン(白板)を MiniTias で **通常モード PNG** + **定量モード DNG** で連続撮影 -- 両方を MiniTias-Evaluation で評価 +- 同一シーン(白板)を SmTIAS で **通常モード PNG** + **定量モード DNG** で連続撮影 +- 両方を SmTIAS-Evaluation で評価 - 評価指標(CoV / 勾配 / C/P 等)の差を確認 - **完全一致は期待しない**(定量モードは ISP 介入最小化のため差が出るのが正常) - **DNG 経路でも妥当な値が出る**ことを確認(CoV > 0, 勾配 > 0 等の基本検証) @@ -382,7 +382,7 @@ - `load_metadata` で `settings.exposure_time_ns` 等が正しく取得できる - `load_lsc_map` で (4, 13, 17) の配列が返る -- `load_hot_pixel_list` で空リスト or リスト(MiniTias 側実装次第)が返る +- `load_hot_pixel_list` で空リスト or リスト(SmTIAS 側実装次第)が返る ### V4. SmTIAS-LightSim 側へのコピー後検証 @@ -399,18 +399,18 @@ | Q2 | デモザイク手法の既定値は `LINEAR` で OK か | 数枚の DNG で AHD と比較して照明均一性指標がほぼ同じか確認 | | Q3 | カラーマトリクス適用は無彩色シーンで影響軽微か | 既定 OFF(rawpy デフォルト)か ON(DNG Exif 参照)かを実機で比較 | | Q4 | 既存 `analysis/uniformity.py` は uint8 / float32 のどちらを受けるか | コードを確認.既存仕様に合わせて `output_format` の既定を決める | -| Q5 | 統一 I/F `load_image_any` を実装するか | MiniTias-Evaluation 側判断.SmTIAS-LightSim 側では便利だが任意 | +| Q5 | 統一 I/F `load_image_any` を実装するか | SmTIAS-Evaluation 側判断.SmTIAS-LightSim 側では便利だが任意 | | Q6 | LSC 逆適用機能は Phase 3 で実装するか後回しか | フォールバック条件 C1〜C3 未発動なので Phase 3 では雛形のみで OK | | Q7 | 既存ドキュメント (SPEC_01/SPEC_02) の更新範囲 | DNG 経路追加に伴う仕様変更を反映.Phase 6 で対応 | ## 引き継ぎ手順 (Hand-off Procedure) -MiniTias-Evaluation 側 Claude セッションでの作業着手手順.[TECH_02 MiniTIAS 引き継ぎ手順](TECH_02_MiniTIAS引き継ぎ手順.md) と同様の構造. +SmTIAS-Evaluation 側 Claude セッションでの作業着手手順.[TECH_02 SmTIAS 引き継ぎ手順](TECH_02_SmTIAS引き継ぎ手順.md) と同様の構造. ### Step A: 環境準備 - rawpy パッケージを追加(`pip install rawpy` または `pyproject.toml` 更新 + `uv sync` 等) -- サンプル DNG を取得(MiniTias 側で撮影済の `reference_measurement/quantitative/` から 1 枚) +- サンプル DNG を取得(SmTIAS 側で撮影済の `reference_measurement/quantitative/` から 1 枚) ### Step B: Phase 1(DNG 読み込み)から順次実装 @@ -420,17 +420,17 @@ ### Step C: 完了の伝達方法 -- MiniTias-Evaluation 側で `/implement` 完了後,SmTIAS-LightSim 側で確認できる形にする: - - MiniTias-Evaluation `src/io/dng_loader.py` の最終形をリポジトリ master にマージ +- SmTIAS-Evaluation 側で `/implement` 完了後,SmTIAS-LightSim 側で確認できる形にする: + - SmTIAS-Evaluation `src/io/dng_loader.py` の最終形をリポジトリ master にマージ - rinto が SmTIAS-LightSim 側 Claude セッションを開いて「コピーしてほしい」と指示 - - SmTIAS-LightSim 側 Claude が MiniTias-Evaluation のローカルリポジトリから読み込んでコピー + - SmTIAS-LightSim 側 Claude が SmTIAS-Evaluation のローカルリポジトリから読み込んでコピー ## 既存ドキュメントとの整合 (Cross-References) - [TECH_01 定量撮影モード要求仕様](TECH_01_定量撮影モード要求仕様.md) — 撮影モード側の要求書 -- [TECH_02 MiniTIAS 引き継ぎ手順](TECH_02_MiniTIAS引き継ぎ手順.md) — 引き継ぎパターンの参考 -- [TECH_03 定量モード実装報告と SHADING_MODE 相談](TECH_03_定量モード実装報告とSHADING_MODE相談.md) — MiniTias 側実装報告(meta.json スキーマ等) -- [TECH_04 MiniTIAS への回答](TECH_04_MiniTIASへの回答.md) — SHADING_MODE 判断とフェーズ A/B 分割 +- [TECH_02 SmTIAS 引き継ぎ手順](TECH_02_SmTIAS引き継ぎ手順.md) — 引き継ぎパターンの参考 +- [TECH_03 定量モード実装報告と SHADING_MODE 相談](TECH_03_定量モード実装報告とSHADING_MODE相談.md) — SmTIAS 側実装報告(meta.json スキーマ等) +- [TECH_04 SmTIAS への回答](TECH_04_SmTIASへの回答.md) — SHADING_MODE 判断とフェーズ A/B 分割 - [TEST_01 キャリブレーション検証履歴](../06_TEST/TEST_01_キャリブレーション検証履歴.md) — 経緯 - [TEST_03 輝度マップ形状追跡](../06_TEST/TEST_03_輝度マップ形状追跡.md) — 形のずれ議論 - [SPEC_04 評価仕様](../04_SPEC/SPEC_04_評価仕様.md) — sm-evaluate パイプライン diff --git "a/docs/05_TECH/TECH_02_SmTIAS-LightSim\343\201\270\343\201\256\345\274\225\343\201\215\347\266\231\343\201\216.md" "b/docs/05_TECH/TECH_02_SmTIAS-LightSim\343\201\270\343\201\256\345\274\225\343\201\215\347\266\231\343\201\216.md" index 3db0f13..df3dc94 100644 --- "a/docs/05_TECH/TECH_02_SmTIAS-LightSim\343\201\270\343\201\256\345\274\225\343\201\215\347\266\231\343\201\216.md" +++ "b/docs/05_TECH/TECH_02_SmTIAS-LightSim\343\201\270\343\201\256\345\274\225\343\201\215\347\266\231\343\201\216.md" @@ -1,6 +1,6 @@ # SmTIAS-LightSim への引き継ぎ (Hand-off to SmTIAS-LightSim) -本ドキュメントは,MiniTias-Evaluation で実装した **DNG 読み込み I/F** を SmTIAS-LightSim 側へコピー・統合するための引き継ぎ書である.要求仕様は [TECH_01](TECH_01_DNG対応要求仕様.md)(SmTIAS-LightSim 側での名称は TECH_05). +本ドキュメントは,SmTIAS-Evaluation で実装した **DNG 読み込み I/F** を SmTIAS-LightSim 側へコピー・統合するための引き継ぎ書である.要求仕様は [TECH_01](TECH_01_DNG対応要求仕様.md)(SmTIAS-LightSim 側での名称は TECH_05). ## 1. 実装スコープ (What is done / not done) @@ -15,7 +15,7 @@ ## 2. コピー対象ファイル (Files to copy) -| コピー元(MiniTias-Evaluation) | コピー先(SmTIAS-LightSim) | 区分 | +| コピー元(SmTIAS-Evaluation) | コピー先(SmTIAS-LightSim) | 区分 | | --- | --- | --- | | `src/io/dng_loader.py` | `src/sm_tias_lightsim/evaluation/dng_loader.py` | ★ 正規コピー対象 | | `scripts/run_uniformity_dng.py` | (参考)`cli/` 等に統合 | LSC 順適用・向き合わせ・評価フローの参考 | @@ -25,8 +25,8 @@ ```python """DNG 読み込みモジュール. - MiniTias-Evaluation/src/io/dng_loader.py を SmTIAS-LightSim にコピーしたもの. - オリジナルは MiniTias-Evaluation 側で管理する.バグ修正・機能追加はそちらで行い, + SmTIAS-Evaluation/src/io/dng_loader.py を SmTIAS-LightSim にコピーしたもの. + オリジナルは SmTIAS-Evaluation 側で管理する.バグ修正・機能追加はそちらで行い, 本プロジェクトに反映する形を取る. """ ``` @@ -42,9 +42,9 @@ 4. **luma の Rec.709 は固定加重プロキシ**: `output_color=raw` では Rec.709 luma は厳密な CIE 輝度ではなく,既存 PNG 経路互換の固定加重. 5. **PNG は厳密に linear 化できない**: トーンカーブ・8bit・透過関数不明のため.DNG 採用の根拠([REPORT_02](../07_REPORT/REPORT_02_PNG_DNG評価比較報告書.md)). -## 4. 引き渡す評価結果(暗闇=MiniTIAS のみ) +## 4. 引き渡す評価結果(暗闇=SmTIAS のみ) -代表結果は **外乱光に汚染されていない「MiniTIAS の照明のみ」の撮影**(`MiniTIAS_QM_20260601_124500`,室内灯 OFF)を採用する.外乱光の有無で評価はほぼ変わらない([REPORT_03](../07_REPORT/REPORT_03_外乱光影響評価報告書.md))が,純粋な装置照明の均一性を代表させるため暗闇条件を選定. +代表結果は **外乱光に汚染されていない「SmTIAS の照明のみ」の撮影**(`SmTIAS_QM_20260601_124500`,室内灯 OFF)を採用する.外乱光の有無で評価はほぼ変わらない([REPORT_03](../07_REPORT/REPORT_03_外乱光影響評価報告書.md))が,純粋な装置照明の均一性を代表させるため暗闇条件を選定. 評価条件: linear(output_color=raw)/ portrait / LSC 補正あり / 白板 ROI. @@ -60,7 +60,7 @@ ## 5. コピー後の検証 (Verification — TECH_01 V4) -- コピー後の SmTIAS-LightSim 側で**同じ DNG**(`MiniTIAS_QM_20260601_124500.dng`)を読み込み,**上表と同じ評価指標**が出ること. +- コピー後の SmTIAS-LightSim 側で**同じ DNG**(`SmTIAS_QM_20260601_124500.dng`)を読み込み,**上表と同じ評価指標**が出ること. - SmTIAS-LightSim の既存テストが全合格すること. - 依存追加: `rawpy>=0.21.0`. diff --git "a/docs/07_REPORT/REPORT_01_\347\205\247\346\230\216\345\235\207\344\270\200\346\200\247\350\251\225\344\276\241\345\240\261\345\221\212\346\233\270.md" "b/docs/07_REPORT/REPORT_01_\347\205\247\346\230\216\345\235\207\344\270\200\346\200\247\350\251\225\344\276\241\345\240\261\345\221\212\346\233\270.md" index a2d34f9..345aef7 100644 --- "a/docs/07_REPORT/REPORT_01_\347\205\247\346\230\216\345\235\207\344\270\200\346\200\247\350\251\225\344\276\241\345\240\261\345\221\212\346\233\270.md" +++ "b/docs/07_REPORT/REPORT_01_\347\205\247\346\230\216\345\235\207\344\270\200\346\200\247\350\251\225\344\276\241\345\240\261\345\221\212\346\233\270.md" @@ -2,7 +2,7 @@ ## 評価概要 (Evaluation Overview) -- 装置: MiniTIAS(小型口腔内画像取得装置) +- 装置: SmTIAS(小型口腔内画像取得装置) - 撮影日: 2026-04-08 - 評価対象: 白板画像 12 枚 - 手法: [SPEC_02_照明均一性評価アルゴリズム](../04_SPEC/SPEC_02_照明均一性評価アルゴリズム.md) @@ -18,18 +18,18 @@ | 画像名 | 平均輝度 | 標準偏差 | CoV | 最大/最小比 | 最大値 | 最小値 | | --- | --- | --- | --- | --- | --- | --- | -| MiniTIAS_20260408_140317 | 145.97 | 6.18 | 0.0423 | 1.387 | 161.65 | 116.52 | -| MiniTIAS_20260408_140342 | 145.31 | 6.18 | 0.0425 | 1.375 | 162.65 | 118.30 | -| MiniTIAS_20260408_140408 | 144.58 | 6.11 | 0.0423 | 1.493 | 161.65 | 108.30 | -| MiniTIAS_20260408_141805 | 145.06 | 6.17 | 0.0426 | 1.417 | 160.65 | 113.37 | -| MiniTIAS_20260408_141900 | 144.98 | 6.21 | 0.0428 | 1.422 | 165.65 | 116.52 | -| MiniTIAS_20260408_141945 | 144.85 | 6.21 | 0.0429 | 1.440 | 167.58 | 116.37 | -| MiniTIAS_20260408_144434 | 146.71 | 6.26 | 0.0426 | 1.392 | 164.65 | 118.30 | -| MiniTIAS_20260408_145011 | 146.59 | 6.22 | 0.0424 | 1.371 | 163.08 | 118.94 | -| MiniTIAS_20260408_145320 | 146.66 | 6.27 | 0.0427 | 1.374 | 162.65 | 118.37 | -| MiniTIAS_20260408_150524 | 146.74 | 6.24 | 0.0425 | 1.412 | 164.23 | 116.30 | -| MiniTIAS_20260408_155530 | 145.00 | 6.19 | 0.0427 | 1.358 | 160.65 | 118.30 | -| MiniTIAS_20260408_155541 | 144.95 | 6.20 | 0.0428 | 1.381 | 160.65 | 116.30 | +| SmTIAS_20260408_140317 | 145.97 | 6.18 | 0.0423 | 1.387 | 161.65 | 116.52 | +| SmTIAS_20260408_140342 | 145.31 | 6.18 | 0.0425 | 1.375 | 162.65 | 118.30 | +| SmTIAS_20260408_140408 | 144.58 | 6.11 | 0.0423 | 1.493 | 161.65 | 108.30 | +| SmTIAS_20260408_141805 | 145.06 | 6.17 | 0.0426 | 1.417 | 160.65 | 113.37 | +| SmTIAS_20260408_141900 | 144.98 | 6.21 | 0.0428 | 1.422 | 165.65 | 116.52 | +| SmTIAS_20260408_141945 | 144.85 | 6.21 | 0.0429 | 1.440 | 167.58 | 116.37 | +| SmTIAS_20260408_144434 | 146.71 | 6.26 | 0.0426 | 1.392 | 164.65 | 118.30 | +| SmTIAS_20260408_145011 | 146.59 | 6.22 | 0.0424 | 1.371 | 163.08 | 118.94 | +| SmTIAS_20260408_145320 | 146.66 | 6.27 | 0.0427 | 1.374 | 162.65 | 118.37 | +| SmTIAS_20260408_150524 | 146.74 | 6.24 | 0.0425 | 1.412 | 164.23 | 116.30 | +| SmTIAS_20260408_155530 | 145.00 | 6.19 | 0.0427 | 1.358 | 160.65 | 118.30 | +| SmTIAS_20260408_155541 | 144.95 | 6.20 | 0.0428 | 1.381 | 160.65 | 116.30 | | 統計量 | 平均輝度 | 標準偏差 | CoV | 最大/最小比 | 最大値 | 最小値 | | --- | --- | --- | --- | --- | --- | --- | @@ -44,18 +44,18 @@ | 画像名 | 中心平均 | 中間平均 | 周辺平均 | 中心/周辺比 | 勾配量 (%) | | --- | --- | --- | --- | --- | --- | -| MiniTIAS_20260408_140317 | 151.02 | 146.97 | 141.61 | 1.0664 | 6.23 | -| MiniTIAS_20260408_140342 | 150.33 | 146.31 | 140.97 | 1.0664 | 6.23 | -| MiniTIAS_20260408_140408 | 149.50 | 145.57 | 140.29 | 1.0656 | 6.16 | -| MiniTIAS_20260408_141805 | 149.92 | 146.07 | 140.81 | 1.0647 | 6.08 | -| MiniTIAS_20260408_141900 | 149.89 | 146.00 | 140.67 | 1.0655 | 6.15 | -| MiniTIAS_20260408_141945 | 149.79 | 145.85 | 140.54 | 1.0658 | 6.17 | -| MiniTIAS_20260408_144434 | 151.68 | 147.70 | 142.43 | 1.0650 | 6.10 | -| MiniTIAS_20260408_145011 | 151.46 | 147.58 | 142.34 | 1.0641 | 6.02 | -| MiniTIAS_20260408_145320 | 151.63 | 147.65 | 142.36 | 1.0651 | 6.11 | -| MiniTIAS_20260408_150524 | 151.68 | 147.73 | 142.46 | 1.0647 | 6.08 | -| MiniTIAS_20260408_155530 | 149.62 | 146.02 | 140.84 | 1.0623 | 5.86 | -| MiniTIAS_20260408_155541 | 149.60 | 145.96 | 140.78 | 1.0627 | 5.90 | +| SmTIAS_20260408_140317 | 151.02 | 146.97 | 141.61 | 1.0664 | 6.23 | +| SmTIAS_20260408_140342 | 150.33 | 146.31 | 140.97 | 1.0664 | 6.23 | +| SmTIAS_20260408_140408 | 149.50 | 145.57 | 140.29 | 1.0656 | 6.16 | +| SmTIAS_20260408_141805 | 149.92 | 146.07 | 140.81 | 1.0647 | 6.08 | +| SmTIAS_20260408_141900 | 149.89 | 146.00 | 140.67 | 1.0655 | 6.15 | +| SmTIAS_20260408_141945 | 149.79 | 145.85 | 140.54 | 1.0658 | 6.17 | +| SmTIAS_20260408_144434 | 151.68 | 147.70 | 142.43 | 1.0650 | 6.10 | +| SmTIAS_20260408_145011 | 151.46 | 147.58 | 142.34 | 1.0641 | 6.02 | +| SmTIAS_20260408_145320 | 151.63 | 147.65 | 142.36 | 1.0651 | 6.11 | +| SmTIAS_20260408_150524 | 151.68 | 147.73 | 142.46 | 1.0647 | 6.08 | +| SmTIAS_20260408_155530 | 149.62 | 146.02 | 140.84 | 1.0623 | 5.86 | +| SmTIAS_20260408_155541 | 149.60 | 145.96 | 140.78 | 1.0627 | 5.90 | | 統計量 | 中心平均 | 中間平均 | 周辺平均 | 中心/周辺比 | 勾配量 (%) | | --- | --- | --- | --- | --- | --- | @@ -68,15 +68,15 @@ ### 代表画像の可視化 (Representative Visualization) -代表画像として MiniTIAS_20260408_144434(中央値に近い値)を使用する. +代表画像として SmTIAS_20260408_144434(中央値に近い値)を使用する. -[図: 輝度マップ(MiniTIAS_20260408_144434)] +[図: 輝度マップ(SmTIAS_20260408_144434)] -[図: 輝度ヒストグラム(MiniTIAS_20260408_144434)] +[図: 輝度ヒストグラム(SmTIAS_20260408_144434)] -[図: 放射状輝度プロファイル(MiniTIAS_20260408_144434)] +[図: 放射状輝度プロファイル(SmTIAS_20260408_144434)] -[図: ゾーンオーバーレイマップ(MiniTIAS_20260408_144434)] +[図: ゾーンオーバーレイマップ(SmTIAS_20260408_144434)] ### 再現性評価: SSIM (Reproducibility: SSIM) @@ -122,7 +122,7 @@ ### 最大/最小比の解釈 (Max/Min Ratio Interpretation) - 全画像の最大/最小比は 1.358–1.493 の範囲 -- MiniTIAS_20260408_140408 のみ 1.493 と他の画像より突出(最小値 108.30 が特異的に低い) +- SmTIAS_20260408_140408 のみ 1.493 と他の画像より突出(最小値 108.30 が特異的に低い) - この画像を除くと範囲は 1.358–1.440 に収まり,局所的な異常の可能性がある - 最小値の低下は ROI 端部の影やセンサーノイズが原因と考えられる @@ -144,7 +144,7 @@ - **CoV の CV が 0.0044(約 0.4%)** → 均一性評価指標自体の再現性も高く,評価結果が撮影条件に依存しにくいことを示す - **中心/周辺比の CV が 0.0012(約 0.1%)** → 空間的な照明パターンが撮影間で非常に安定しており,ビネッティング特性が固定されていることを確認 - **勾配量の CV が 0.0183(約 1.8%)** → 他の指標と比べてやや大きいが,範囲は 0.37%(5.86–6.23%)に収まり,実用上は十分に安定している -- 以上より,12 枚の撮影間で照明条件が極めて安定しており,MiniTIAS の照明系は高い再現性を持つと結論する +- 以上より,12 枚の撮影間で照明条件が極めて安定しており,SmTIAS の照明系は高い再現性を持つと結論する #### SSIM による構造的再現性 (Structural Reproducibility via SSIM) @@ -153,7 +153,7 @@ - 位相相関法による位置合わせ後の SSIM は平均 0.9114 であり,位置合わせなし(0.9112)からの改善は +0.0002 とごくわずかである - 平均シフト量が 0.041 ピクセル(最大 0.082 ピクセル)と極めて小さく,スマートフォンの取り付け位置ずれは SSIM 低下の主因ではないことが判明した - SSIM が 0.91 にとどまる主因は,撮影ごとのセンサーノイズ・LED の微小な出力変動等,空間的に非系統的な要因と考えられる -- 一方で,取り付け位置のずれがサブピクセル精度で安定していることは,MiniTIAS の固定機構の精度が高いことを示す有意義な知見である +- 一方で,取り付け位置のずれがサブピクセル精度で安定していることは,SmTIAS の固定機構の精度が高いことを示す有意義な知見である - CV が要約統計量のばらつきのみを評価するのに対し,SSIM は画像全体の輝度・コントラスト・構造パターンの一致度を評価する - 両指標を併用することで,マクロレベル(CV)とピクセルレベル(SSIM)の再現性を相補的に確認できる - SSIM の標準偏差が 0.0012 と極めて小さく,全 66 ペアで SSIM が 0.909–0.914 の狭い範囲に収まっている点は,画像間の差異が系統的ではなくランダムノイズに支配されていることを裏付ける diff --git "a/docs/07_REPORT/REPORT_02_PNG_DNG\350\251\225\344\276\241\346\257\224\350\274\203\345\240\261\345\221\212\346\233\270.md" "b/docs/07_REPORT/REPORT_02_PNG_DNG\350\251\225\344\276\241\346\257\224\350\274\203\345\240\261\345\221\212\346\233\270.md" index db04287..aa1397f 100644 --- "a/docs/07_REPORT/REPORT_02_PNG_DNG\350\251\225\344\276\241\346\257\224\350\274\203\345\240\261\345\221\212\346\233\270.md" +++ "b/docs/07_REPORT/REPORT_02_PNG_DNG\350\251\225\344\276\241\346\257\224\350\274\203\345\240\261\345\221\212\346\233\270.md" @@ -2,7 +2,7 @@ ## 概要 (Overview) -MiniTIAS 撮影アプリの定量撮影モードの出力フォーマットが **PNG から DNG (RAW_SENSOR) に変更**された([TECH_01](../05_TECH/TECH_01_DNG対応要求仕様.md))ことに伴い,照明均一性評価の結果が PNG 経路と DNG 経路でどのように変わるかを比較した. +SmTIAS 撮影アプリの定量撮影モードの出力フォーマットが **PNG から DNG (RAW_SENSOR) に変更**された([TECH_01](../05_TECH/TECH_01_DNG対応要求仕様.md))ことに伴い,照明均一性評価の結果が PNG 経路と DNG 経路でどのように変わるかを比較した. 結論を先に述べると,**PNG→DNG は単なるファイル形式の変更ではなく,「何を測っているか」が変わる**.PNG は sRGB エンコード済み・端末 ISP でレンズシェーディング補正済みの「処理後」データであり,DNG は linear・補正前の「物理生信号」である.このため評価指標の数値は大きく変化する. @@ -10,9 +10,9 @@ | 項目 | 内容 | | --- | --- | -| PNG サンプル | `data/minitias/whiteboard/MiniTIAS_20260408_140317.png`(2026-04-08 撮影) | -| DNG サンプル | `data/minitias/quantitative/MiniTIAS_QM_20260601_102753.dng`(2026-06-01 撮影,SH-02M 定量モード) | -| 評価領域 (ROI) | `config/roi_config.json` の `minitias.whiteboard`(白板中央,全条件で同一) | +| PNG サンプル | `data/smtias/whiteboard/SmTIAS_20260408_140317.png`(2026-04-08 撮影) | +| DNG サンプル | `data/smtias/quantitative/SmTIAS_QM_20260601_102753.dng`(2026-06-01 撮影,SH-02M 定量モード) | +| 評価領域 (ROI) | `config/roi_config.json` の `smtias.whiteboard`(白板中央,全条件で同一) | | 向き | portrait に統一(DNG は landscape native のため `rot90(-1)` で PNG と整合) | | 評価指標 | CoV / max-min比 / 中心-周辺比 / 勾配 / 動径 min/max 比(20点輪帯平均の最小/最大) | diff --git "a/docs/07_REPORT/REPORT_03_\345\244\226\344\271\261\345\205\211\345\275\261\351\237\277\350\251\225\344\276\241\345\240\261\345\221\212\346\233\270.md" "b/docs/07_REPORT/REPORT_03_\345\244\226\344\271\261\345\205\211\345\275\261\351\237\277\350\251\225\344\276\241\345\240\261\345\221\212\346\233\270.md" index 694ebca..5f8f3df 100644 --- "a/docs/07_REPORT/REPORT_03_\345\244\226\344\271\261\345\205\211\345\275\261\351\237\277\350\251\225\344\276\241\345\240\261\345\221\212\346\233\270.md" +++ "b/docs/07_REPORT/REPORT_03_\345\244\226\344\271\261\345\205\211\345\275\261\351\237\277\350\251\225\344\276\241\345\240\261\345\221\212\346\233\270.md" @@ -2,7 +2,7 @@ ## 概要 (Overview) -MiniTIAS の照明均一性測定が,**外部の室内照明(外乱光)にどれだけ影響を受けるか**を評価した.SmTIAS 装置自前の照明のみで撮影した DNG と,それに室内灯(外乱光)を加えて撮影した DNG を,同一指標で比較する. +SmTIAS の照明均一性測定が,**外部の室内照明(外乱光)にどれだけ影響を受けるか**を評価した.SmTIAS 装置自前の照明のみで撮影した DNG と,それに室内灯(外乱光)を加えて撮影した DNG を,同一指標で比較する. 結論を先に述べると,**外乱光の有無で評価結果はほぼ変わらない(指標差 1% 未満)**.SmTIAS 自前照明が支配的で,測定は室内照明環境に対してロバストである. @@ -10,10 +10,10 @@ | 項目 | 内容 | | --- | --- | -| 条件 A(MiniTIAS のみ) | `MiniTIAS_QM_20260601_124500`(室内灯 OFF,2026-06-01 12:45 撮影) | -| 条件 B(MiniTIAS + 外光) | `MiniTIAS_QM_20260601_102753`(室内灯 ON,2026-06-01 10:27 撮影) | +| 条件 A(SmTIAS のみ) | `SmTIAS_QM_20260601_124500`(室内灯 OFF,2026-06-01 12:45 撮影) | +| 条件 B(SmTIAS + 外光) | `SmTIAS_QM_20260601_102753`(室内灯 ON,2026-06-01 10:27 撮影) | | 機種 / モード | SH-02M / 定量モード(RAW_SENSOR,露出・ISO 等は両者同一固定) | -| 評価領域 (ROI) | `config/roi_config.json` の `minitias.whiteboard`(白板中央,両者同一) | +| 評価領域 (ROI) | `config/roi_config.json` の `smtias.whiteboard`(白板中央,両者同一) | | 評価条件 | linear(output_color=raw)/ portrait / LSC 補正あり・なし両方 | > **重要な前提(本評価の限界)**: 条件 A・B は**別セッションの撮影**(時刻が異なり,三脚固定でないため微小な位置ずれの可能性).したがって「外乱光の純粋な寄与」を厳密に分離したものではなく,**外乱光の影響がセッション間ばらつきと比べて支配的かどうか**を判定する位置づけである.厳密な切り分けは今後の課題(後述). @@ -24,17 +24,17 @@ | 条件 | raw mean | min | max | std | mean R/G/B | | --- | --- | --- | --- | --- | --- | -| A: MiniTIAS のみ | 441.2 | 89 | 983 | 161.0 | 355.9 / 537.4 / 333.6 | -| B: MiniTIAS + 外光 | 431.4 | 90 | 949 | 155.7 | 349.4 / 525.4 / 325.1 | +| A: SmTIAS のみ | 441.2 | 89 | 983 | 161.0 | 355.9 / 537.4 / 333.6 | +| B: SmTIAS + 外光 | 431.4 | 90 | 949 | 155.7 | 349.4 / 525.4 / 325.1 | ### 均一性指標(白板 ROI,数値が大きいほどムラ大.動径 min/max のみ 1.0 で均一) | 条件 | ROI mean | CoV | max/min | 中心/周辺比 | 勾配(%) | 動径 min/max | | --- | --- | --- | --- | --- | --- | --- | -| **A: MiniTIAS のみ**(LSC 補正) | 207.82 | 0.0695 | 1.617 | 1.0911 | 8.35 | 0.8600 | -| **B: MiniTIAS + 外光**(LSC 補正) | 208.77 | 0.0689 | 1.641 | 1.0952 | 8.69 | 0.8533 | -| A: MiniTIAS のみ(LSC なし) | 170.58 | 0.1464 | — | 1.4511 | 31.09 | 0.5343 | -| B: MiniTIAS + 外光(LSC なし) | 171.39 | 0.1477 | — | 1.4563 | 31.33 | 0.5304 | +| **A: SmTIAS のみ**(LSC 補正) | 207.82 | 0.0695 | 1.617 | 1.0911 | 8.35 | 0.8600 | +| **B: SmTIAS + 外光**(LSC 補正) | 208.77 | 0.0689 | 1.641 | 1.0952 | 8.69 | 0.8533 | +| A: SmTIAS のみ(LSC なし) | 170.58 | 0.1464 | — | 1.4511 | 31.09 | 0.5343 | +| B: SmTIAS + 外光(LSC なし) | 171.39 | 0.1477 | — | 1.4563 | 31.33 | 0.5304 | | **差(A−B,LSC 補正)** | −0.95 | +0.0006 | −0.024 | −0.004 | −0.34 | +0.007 | 輝度マップ・ヒストグラムも両条件でほぼ重なり,空間パターン・分布形状に有意な違いは見られない. @@ -47,7 +47,7 @@ ### 2. 「外光を足したのに暗い」という矛盾 — 外乱光の寄与はばらつき以下 -外乱光は信号を**加える**しかできないため,物理的には B(MiniTIAS+外光)≧ A(MiniTIAS のみ)の明るさになるはずである.しかし実測では **A の方が明るい**(raw mean 441.2 vs 431.4,R/G/B 各チャンネルとも A が上). +外乱光は信号を**加える**しかできないため,物理的には B(SmTIAS+外光)≧ A(SmTIAS のみ)の明るさになるはずである.しかし実測では **A の方が明るい**(raw mean 441.2 vs 431.4,R/G/B 各チャンネルとも A が上). これは,外乱光の寄与が **セッション間のばらつき(≈2〜3%:撮影時刻 10:27 vs 12:45 の差,微小な位置ずれ,照明のドリフト等)に埋もれている**ことを意味する.すなわち **外乱光の影響 < セッション間ばらつき**であり,外乱光の純寄与はこのデータからは分離できないほど小さい. @@ -58,14 +58,14 @@ ## 結論 (Conclusion) 1. **外乱光(室内照明)の有無で,照明均一性の評価指標はほぼ変わらない(差 1% 未満)**.SmTIAS 自前照明が支配的. -2. 明るさの差(≈2〜3%)はむしろ「MiniTIAS のみ」の方が明るく,物理的に逆向き.→ **外乱光の寄与はセッション間ばらつき以下**で,測定には埋もれて見えない. -3. したがって **MiniTIAS の照明均一性測定は,通常の室内照明環境に対してロバスト**と判断できる. +2. 明るさの差(≈2〜3%)はむしろ「SmTIAS のみ」の方が明るく,物理的に逆向き.→ **外乱光の寄与はセッション間ばらつき以下**で,測定には埋もれて見えない. +3. したがって **SmTIAS の照明均一性測定は,通常の室内照明環境に対してロバスト**と判断できる. ## 限界と厳密な切り分け方法 (Limitations & Controlled Test) 本評価は別セッション撮影のため,外乱光の純寄与を 2〜3% のばらつきから分離できていない.外乱光の影響「だけ」を正確に測るには,以下の対照実験が必要: -- **位置・露出を完全固定**(三脚等)し,**室内灯のみを ON/OFF** した連続2枚を撮影する(A: MiniTIAS のみ / B: MiniTIAS + 外光). +- **位置・露出を完全固定**(三脚等)し,**室内灯のみを ON/OFF** した連続2枚を撮影する(A: SmTIAS のみ / B: SmTIAS + 外光). - 差分画像 **B − A** が外乱光の純寄与.これにより「一様なオフセットか/窓・照明方向の勾配か」「何 DN 乗るか」まで定量できる. - この方式ならセッション間ばらつきを排除でき,外乱光の空間分布・絶対量を分離評価できる. @@ -74,4 +74,4 @@ - [REPORT_02 PNG/DNG 評価比較報告書](REPORT_02_PNG_DNG評価比較報告書.md) - [TECH_01 DNG 対応要求仕様](../05_TECH/TECH_01_DNG対応要求仕様.md) - 評価実装: `scripts/run_uniformity_dng.py`(linear + LSC 補正経路) -- 対象データ: `data/minitias/quantitative/`(gitignore 対象) +- 対象データ: `data/smtias/quantitative/`(gitignore 対象) diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 8c81cb2..d089dfb 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -10,10 +10,10 @@ 「進捗記録の運用ルール(CLAUDE.md / PROGRESS.md)」を参照 --> -- [x] **ステップ 2: MiniTIAS 照明均一性評価 完了**: 照明均一性の評価指標算出・可視化を実装し,REPORT_01(照明均一性評価報告書)を作成済み.次はステップ 3. +- [x] **ステップ 2: SmTIAS 照明均一性評価 完了**: 照明均一性の評価指標算出・可視化を実装し,REPORT_01(照明均一性評価報告書)を作成済み.次はステップ 3. - 注: 本エントリはテンプレート同期で PROGRESS.md を新設した際の移記ベースライン(詳細経緯は `git log` を参照).以降の進捗は本ファイル末尾に追記する. -- [x] **TECH_05 Phase 1: DNG 読み込み I/F + 動径 min/max 比指標**: MiniTias 定量モードの出力が PNG→DNG(RAW_SENSOR) に変わったため DNG 読み込み I/F(`src/io/dng_loader.py`)を新設.あわせて照明均一性に動径 min/max 比指標を追加.SmTIAS-LightSim へのコピー前提で再利用性重視. +- [x] **TECH_05 Phase 1: DNG 読み込み I/F + 動径 min/max 比指標**: SmTIAS 定量モードの出力が PNG→DNG(RAW_SENSOR) に変わったため DNG 読み込み I/F(`src/io/dng_loader.py`)を新設.あわせて照明均一性に動径 min/max 比指標を追加.SmTIAS-LightSim へのコピー前提で再利用性重視. - **設計判断(線形性)**: linear 系出力は `output_color=raw`(カラーマトリクス非適用)とし,入射光量とセンサ信号の比例(放射輝度リニアリティ)を担保.カラーマトリクス経路はチャンネル混合で per-channel 比例が崩れるため不採用.luma は既存 PNG 経路互換のため Rec.709 維持(raw 経路では厳密な CIE 輝度でなく固定加重プロキシ). - **重要な発見(仕様との食い違い)**: RAW_SENSOR DNG はレンズシェーディング**未補正**(補正は DNG の OpcodeList2 GainMap・meta.json lscMap として付随するが rawpy は適用しない/lscMap ゲインは 1〜5).TECH_05 の `apply_lsc_inverse` は「DNG=補正済み」前提だが実際は未補正.照明ムラを測るには lscMap を**順方向適用**してレンズビネットを除去する向きで Phase 3 を設計すること.LSC 順適用で白板 ROI の CoV は約半減を実測. - **向き**: DNG はセンサ native が landscape,PNG/preview は portrait.PNG と揃えるには `rot90(-1)`(左右反転なし).フロントカメラ(id=1) の preview はミラーされるが RAW はミラーされないため反転不要(ラベル位置で確認). diff --git a/pyproject.toml b/pyproject.toml index 7a1347a..aae181b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] -name = "minitias-evaluation" +name = "smtias-evaluation" version = "0.1.0" -description = "MiniTIAS 画質検証プロジェクト" +description = "SmTIAS 画質検証プロジェクト" requires-python = ">=3.11" dependencies = [ "jinja2", diff --git a/scripts/run_uniformity.py b/scripts/run_uniformity.py index b79741a..5397aaf 100644 --- a/scripts/run_uniformity.py +++ b/scripts/run_uniformity.py @@ -1,12 +1,12 @@ -"""MiniTIAS 白板画像の照明均一性評価スクリプト. +"""SmTIAS 白板画像の照明均一性評価スクリプト. 使い方(単一画像): - python scripts/run_uniformity.py --image data/minitias/whiteboard/xxx.png - python scripts/run_uniformity.py --image data/minitias/whiteboard/xxx.png \\ - --config config/roi_config.json --roi minitias.whiteboard + python scripts/run_uniformity.py --image data/smtias/whiteboard/xxx.png + python scripts/run_uniformity.py --image data/smtias/whiteboard/xxx.png \\ + --config config/roi_config.json --roi smtias.whiteboard 使い方(ディレクトリ一括): - python scripts/run_uniformity.py --image data/minitias/whiteboard/ + python scripts/run_uniformity.py --image data/smtias/whiteboard/ """ import argparse @@ -46,7 +46,7 @@ Args: config_path: JSON 設定ファイルのパス. - roi_key: ドット区切りのキー(例: "minitias.whiteboard"). + roi_key: ドット区切りのキー(例: "smtias.whiteboard"). Returns: ROI の辞書(x, y, width, height).キーが存在しない場合は None. @@ -160,7 +160,7 @@ def main() -> None: """エントリーポイント.""" parser = argparse.ArgumentParser( - description="MiniTIAS 白板画像の照明均一性を評価する." + description="SmTIAS 白板画像の照明均一性を評価する." ) parser.add_argument( "--image", @@ -174,8 +174,8 @@ ) parser.add_argument( "--roi", - default="minitias.whiteboard", - help="ROI のキー(ドット区切り,デフォルト: minitias.whiteboard)", + default="smtias.whiteboard", + help="ROI のキー(ドット区切り,デフォルト: smtias.whiteboard)", ) parser.add_argument( "--output", diff --git a/scripts/run_uniformity_dng.py b/scripts/run_uniformity_dng.py index 88d74ed..d39ae70 100644 --- a/scripts/run_uniformity_dng.py +++ b/scripts/run_uniformity_dng.py @@ -1,4 +1,4 @@ -"""MiniTIAS 定量モード DNG の照明均一性評価スクリプト(PNG 版 run_uniformity.py の DNG 対応版). +"""SmTIAS 定量モード DNG の照明均一性評価スクリプト(PNG 版 run_uniformity.py の DNG 対応版). PNG 版と同じ出力一式(輝度マップ / ヒストグラム / 動径プロファイル / ゾーンマップ / 均一性 CSV / コンソール指標)を,DNG に対して同じ ROI・同じ向き(portrait)で出力する. @@ -9,7 +9,7 @@ - DNG はセンサ native が landscape のため,PNG と同じ portrait へ rot90(-1) で向き合わせ 使い方: - python scripts/run_uniformity_dng.py --image data/minitias/quantitative/xxx.dng + python scripts/run_uniformity_dng.py --image data/smtias/quantitative/xxx.dng """ import argparse @@ -45,7 +45,7 @@ Args: config_path: JSON 設定ファイルのパス. - roi_key: ドット区切りのキー(例: "minitias.whiteboard"). + roi_key: ドット区切りのキー(例: "smtias.whiteboard"). Returns: ROI の辞書(x, y, width, height).キーが存在しない場合は None. @@ -202,7 +202,7 @@ print(f" 勾配量 (%) : {zone_stats['gradient_magnitude']:.2f}") print(f" 動径min/max比 : {spatial['radial_min_max_ratio']:.4f}") - stem = Path(image_path).stem # 例: MiniTIAS_QM_20260601_102753 + stem = Path(image_path).stem # 例: SmTIAS_QM_20260601_102753 figures = output_base / "figures" plot_luminance_map(luminance, str(figures / f"{stem}_luminance_map.png")) plot_histogram(luminance, str(figures / f"{stem}_histogram.png")) @@ -216,7 +216,7 @@ def main() -> None: """エントリーポイント.""" parser = argparse.ArgumentParser( - description="MiniTIAS 定量モード DNG の照明均一性を評価する(PNG 版と同じ出力一式)." + description="SmTIAS 定量モード DNG の照明均一性を評価する(PNG 版と同じ出力一式)." ) parser.add_argument("--image", required=True, help="解析対象の DNG ファイルパス") parser.add_argument( @@ -226,8 +226,8 @@ ) parser.add_argument( "--roi", - default="minitias.whiteboard", - help="ROI のキー(ドット区切り,デフォルト: minitias.whiteboard)", + default="smtias.whiteboard", + help="ROI のキー(ドット区切り,デフォルト: smtias.whiteboard)", ) parser.add_argument( "--output", diff --git a/scripts/select_roi.py b/scripts/select_roi.py index 94786d7..5aca67d 100644 --- a/scripts/select_roi.py +++ b/scripts/select_roi.py @@ -5,8 +5,8 @@ 使い方: python scripts/select_roi.py \\ - --image data/minitias/whiteboard/MiniTIAS_20260408_140317.png \\ - --key minitias.whiteboard + --image data/smtias/whiteboard/SmTIAS_20260408_140317.png \\ + --key smtias.whiteboard 操作: マウスでドラッグして矩形を描き,Space または Enter で確定, @@ -70,7 +70,7 @@ Args: config: 対象の辞書(インプレース更新). - key: ドット区切りキー(例: "minitias.whiteboard"). + key: ドット区切りキー(例: "smtias.whiteboard"). value: セットする値. """ keys = key.split(".") @@ -156,7 +156,7 @@ parser.add_argument( "--key", required=True, - help="ドット区切りの保存キー(例: minitias.whiteboard)", + help="ドット区切りの保存キー(例: smtias.whiteboard)", ) parser.add_argument( "--config", diff --git a/scripts/viewer.py b/scripts/viewer.py index 094288f..fefb434 100644 --- a/scripts/viewer.py +++ b/scripts/viewer.py @@ -1,4 +1,4 @@ -"""MiniTIAS 照明均一性評価 結果ビューア. +"""SmTIAS 照明均一性評価 結果ビューア. 使い方: streamlit run scripts/viewer.py @@ -36,7 +36,7 @@ RESULTS_DIR = PROJECT_ROOT / "output" / "results" FIGURES_DIR = PROJECT_ROOT / "output" / "figures" -DATA_DIR = PROJECT_ROOT / "data" / "minitias" / "whiteboard" +DATA_DIR = PROJECT_ROOT / "data" / "smtias" / "whiteboard" ROI_CONFIG = PROJECT_ROOT / "config" / "roi_config.json" SUMMARY_CSV = RESULTS_DIR / "summary_uniformity.csv" SPATIAL_CSV = RESULTS_DIR / "summary_spatial.csv" @@ -48,7 +48,7 @@ return None with open(ROI_CONFIG, encoding="utf-8") as f: config = json.load(f) - return config.get("minitias", {}).get("whiteboard") + return config.get("smtias", {}).get("whiteboard") def overlay_roi(image_path: Path, roi: dict) -> Image.Image: @@ -433,11 +433,11 @@ def main() -> None: """Streamlit アプリのエントリーポイント.""" st.set_page_config( - page_title="MiniTIAS 照明均一性評価ビューア", + page_title="SmTIAS 照明均一性評価ビューア", page_icon=None, layout="wide", ) - st.title("MiniTIAS 照明均一性評価ビューア") + st.title("SmTIAS 照明均一性評価ビューア") # サマリー CSV の読み込み try: diff --git a/src/io/dng_loader.py b/src/io/dng_loader.py index 70c77eb..1a20f69 100644 --- a/src/io/dng_loader.py +++ b/src/io/dng_loader.py @@ -1,4 +1,4 @@ -"""MiniTIAS 定量モード DNG 読み込みモジュール.""" +"""SmTIAS 定量モード DNG 読み込みモジュール.""" from pathlib import Path @@ -33,7 +33,7 @@ black_level: int | None = None, output_format: str = "rgb_float32", ) -> numpy.ndarray: - """MiniTIAS 定量モード DNG を読み込み配列として返す. + """SmTIAS 定量モード DNG を読み込み配列として返す. rawpy の postprocess() を linear パラメータで呼び出すことで, ISP(ガンマ・自動輝度・カメラ WB)の介入を最小化した linear raw 値を取り出す. diff --git a/tests/analysis/test_radial_min_max.py b/tests/analysis/test_radial_min_max.py index dd27514..303c705 100644 --- a/tests/analysis/test_radial_min_max.py +++ b/tests/analysis/test_radial_min_max.py @@ -1,6 +1,6 @@ """calc_radial_min_max_ratio の単体テスト. -仕様 (実装サマリー / TECH_05_MiniTiasEvaluation_DNG対応要求仕様.md): +仕様 (実装サマリー / TECH_05_SmTIASEvaluation_DNG対応要求仕様.md): - calc_radial_min_max_ratio(radial_profile) -> dict - 引数: 20 点動径プロファイル配列 (N x 2, float64) - 返り値キー: diff --git a/tests/io/test_dng_loader.py b/tests/io/test_dng_loader.py index 7ce1edf..3d91275 100644 --- a/tests/io/test_dng_loader.py +++ b/tests/io/test_dng_loader.py @@ -1,6 +1,6 @@ """dng_loader.py の単体テスト. -仕様 (TECH_05_MiniTiasEvaluation_DNG対応要求仕様.md): +仕様 (TECH_05_SmTIASEvaluation_DNG対応要求仕様.md): - load_image_dng: DNG ファイルを読み込み numpy.ndarray として返す - output_format="rgb_float32": (H, W, 3) float32 linear [0, 1] - output_format="luma_float32": (H, W) float32 linear [0, 1], Rec.709 係数 @@ -25,9 +25,9 @@ _SAMPLE_DNG_PATH = ( Path(__file__).parent.parent.parent / "data" - / "minitias" + / "smtias" / "quantitative" - / "MiniTIAS_QM_20260601_102753.dng" + / "SmTIAS_QM_20260601_102753.dng" ) _DNG_AVAILABLE = _SAMPLE_DNG_PATH.exists() diff --git a/tests/scripts/test_run_uniformity.py b/tests/scripts/test_run_uniformity.py index e346d5d..0983fc0 100644 --- a/tests/scripts/test_run_uniformity.py +++ b/tests/scripts/test_run_uniformity.py @@ -34,7 +34,7 @@ def roi_config_file(self, tmp_path: Path) -> Path: """テスト用 ROI 設定 JSON ファイルを生成して返す fixture.""" config = { - "minitias": { + "smtias": { "whiteboard": {"x": 100, "y": 200, "width": 400, "height": 300} }, "tias": { @@ -47,7 +47,7 @@ def test_returns_roi_dict_for_valid_key(self, roi_config_file: Path) -> None: """正常: 存在するキーで ROI 辞書が返ること.""" - result = load_roi_config(str(roi_config_file), "minitias.whiteboard") + result = load_roi_config(str(roi_config_file), "smtias.whiteboard") assert result == {"x": 100, "y": 200, "width": 400, "height": 300} def test_returns_roi_dict_for_another_valid_key(self, roi_config_file: Path) -> None: @@ -62,36 +62,36 @@ def test_returns_none_for_partial_key(self, roi_config_file: Path) -> None: """正常: ネストの途中で存在しないキーでも None が返ること.""" - result = load_roi_config(str(roi_config_file), "minitias.nonexistent") + result = load_roi_config(str(roi_config_file), "smtias.nonexistent") assert result is None def test_raises_file_not_found_for_missing_config(self, tmp_path: Path) -> None: """異常: 設定ファイルが存在しない場合に FileNotFoundError が送出されること.""" missing_path = str(tmp_path / "no_such_config.json") with pytest.raises(FileNotFoundError): - load_roi_config(missing_path, "minitias.whiteboard") + load_roi_config(missing_path, "smtias.whiteboard") def test_file_not_found_error_contains_path(self, tmp_path: Path) -> None: """異常: FileNotFoundError のメッセージにファイルパスが含まれること.""" missing_path = str(tmp_path / "missing_roi.json") with pytest.raises(FileNotFoundError, match="missing_roi.json"): - load_roi_config(missing_path, "minitias.whiteboard") + load_roi_config(missing_path, "smtias.whiteboard") def test_returns_dict_type_for_valid_key(self, roi_config_file: Path) -> None: """正常: 戻り値が dict 型であること.""" - result = load_roi_config(str(roi_config_file), "minitias.whiteboard") + result = load_roi_config(str(roi_config_file), "smtias.whiteboard") assert isinstance(result, dict) def test_returned_roi_has_required_keys(self, roi_config_file: Path) -> None: """正常: 返された ROI が x, y, width, height キーを持つこと.""" - result = load_roi_config(str(roi_config_file), "minitias.whiteboard") + result = load_roi_config(str(roi_config_file), "smtias.whiteboard") assert result is not None for key in ("x", "y", "width", "height"): assert key in result, f"ROI に '{key}' キーが存在しない" def test_returns_none_for_empty_dot_split_key(self, tmp_path: Path) -> None: """エッジケース: 設定に存在しないトップレベルキーで None が返ること.""" - config = {"minitias": {"whiteboard": {"x": 0, "y": 0, "width": 10, "height": 10}}} + config = {"smtias": {"whiteboard": {"x": 0, "y": 0, "width": 10, "height": 10}}} config_path = tmp_path / "config.json" config_path.write_text(json.dumps(config), encoding="utf-8") @@ -101,9 +101,9 @@ def test_returns_none_when_leaf_value_is_not_dict(self, tmp_path: Path) -> None: """エッジケース: 指定キーの値が dict でない場合に None が返ること.""" # キーの値が辞書ではなくスカラー値の場合 - config = {"minitias": {"whiteboard": "not_a_dict"}} + config = {"smtias": {"whiteboard": "not_a_dict"}} config_path = tmp_path / "config.json" config_path.write_text(json.dumps(config), encoding="utf-8") - result = load_roi_config(str(config_path), "minitias.whiteboard") + result = load_roi_config(str(config_path), "smtias.whiteboard") assert result is None diff --git a/tests/scripts/test_select_roi.py b/tests/scripts/test_select_roi.py index d0cff6b..570b373 100644 --- a/tests/scripts/test_select_roi.py +++ b/tests/scripts/test_select_roi.py @@ -135,8 +135,8 @@ """正常: 値として辞書をセットできること.""" config: dict = {} roi = {"x": 10, "y": 20, "width": 100, "height": 80} - set_nested(config, "minitias.whiteboard", roi) - assert config == {"minitias": {"whiteboard": roi}} + set_nested(config, "smtias.whiteboard", roi) + assert config == {"smtias": {"whiteboard": roi}} # --------------------------------------------------------------------------- @@ -155,7 +155,7 @@ def test_loads_existing_json_file(self, tmp_path: Path) -> None: """正常: 既存の JSON ファイルが正しく読み込まれること.""" - config_data = {"minitias": {"whiteboard": {"x": 10, "y": 20, "width": 100, "height": 80}}} + config_data = {"smtias": {"whiteboard": {"x": 10, "y": 20, "width": 100, "height": 80}}} config_path = tmp_path / "roi_config.json" config_path.write_text(json.dumps(config_data), encoding="utf-8") @@ -204,10 +204,10 @@ def test_saved_json_is_valid(self, tmp_path: Path) -> None: """正常: 保存された JSON が有効な形式であること.""" - config = {"minitias": {"whiteboard": {"x": 10, "y": 20}}} + config = {"smtias": {"whiteboard": {"x": 10, "y": 20}}} config_path = tmp_path / "config.json" save_config(config, config_path) # JSON として正常にパースできること loaded = json.loads(config_path.read_text(encoding="utf-8")) - assert loaded["minitias"]["whiteboard"]["x"] == 10 + assert loaded["smtias"]["whiteboard"]["x"] == 10 diff --git a/tests/scripts/test_viewer.py b/tests/scripts/test_viewer.py index f83b168..3e39fba 100644 --- a/tests/scripts/test_viewer.py +++ b/tests/scripts/test_viewer.py @@ -6,7 +6,7 @@ - CLAUDE.md が存在しない場合に FileNotFoundError を送出する - load_roi: config/roi_config.json から ROI 設定を読み込む - ファイルが存在しない場合 None を返す - - ファイルが存在し minitias.whiteboard キーがある場合 dict を返す + - ファイルが存在し smtias.whiteboard キーがある場合 dict を返す - ファイルが存在するが対応キーがない場合 None を返す - overlay_roi: 元画像に ROI 矩形をオーバーレイした PIL Image を返す - 戻り値が PIL Image であること @@ -122,14 +122,14 @@ result = viewer_module.load_roi() assert result is None - def test_returns_dict_when_config_has_minitias_whiteboard( + def test_returns_dict_when_config_has_smtias_whiteboard( self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch ) -> None: - """正常: minitias.whiteboard キーが存在する設定ファイルから ROI dict を返すこと.""" + """正常: smtias.whiteboard キーが存在する設定ファイルから ROI dict を返すこと.""" import scripts.viewer as viewer_module config = { - "minitias": { + "smtias": { "whiteboard": {"x": 100, "y": 200, "width": 400, "height": 300} } } @@ -147,7 +147,7 @@ import scripts.viewer as viewer_module config = { - "minitias": { + "smtias": { "whiteboard": {"x": 10, "y": 20, "width": 50, "height": 60} } } @@ -160,10 +160,10 @@ for key in ("x", "y", "width", "height"): assert key in result, f"ROI に '{key}' キーが存在しない" - def test_returns_none_when_minitias_key_absent( + def test_returns_none_when_smtias_key_absent( self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch ) -> None: - """正常: minitias キーが存在しない設定ファイルの場合 None を返すこと.""" + """正常: smtias キーが存在しない設定ファイルの場合 None を返すこと.""" import scripts.viewer as viewer_module config = {"other_device": {"whiteboard": {"x": 0, "y": 0, "width": 10, "height": 10}}} @@ -177,10 +177,10 @@ def test_returns_none_when_whiteboard_key_absent( self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch ) -> None: - """正常: minitias キーはあるが whiteboard キーがない場合 None を返すこと.""" + """正常: smtias キーはあるが whiteboard キーがない場合 None を返すこと.""" import scripts.viewer as viewer_module - config = {"minitias": {"other_region": {"x": 0, "y": 0, "width": 10, "height": 10}}} + config = {"smtias": {"other_region": {"x": 0, "y": 0, "width": 10, "height": 10}}} config_path = tmp_path / "roi_config.json" config_path.write_text(json.dumps(config), encoding="utf-8") monkeypatch.setattr(viewer_module, "ROI_CONFIG", config_path) @@ -194,7 +194,7 @@ """正常: ROI が存在する場合の戻り値が dict 型であること.""" import scripts.viewer as viewer_module - config = {"minitias": {"whiteboard": {"x": 5, "y": 5, "width": 100, "height": 100}}} + config = {"smtias": {"whiteboard": {"x": 5, "y": 5, "width": 100, "height": 100}}} config_path = tmp_path / "roi_config.json" config_path.write_text(json.dumps(config), encoding="utf-8") monkeypatch.setattr(viewer_module, "ROI_CONFIG", config_path)