画像ピクセルから8つの comp_*診断特徴量を 直接計算し、別途あらかじめ計算済みのグローバル/知覚系 メトリクスと合わせてSQLiteデータベースにインポートします。 DOI 1.8自身の報告書は、これをDOI 1.0〜1.7全体で使われていた comp_*定義のリファレンスコードだとしています。この計算式は 今まで一度も正式に文書化されておらず、DOI 1.8はそれを初めて 書面で定義するために公開されました。
| 収録場所 | DOI 1.8のZenodoアーカイブ(Merutan_DOI1.8.zip)に収録——公開されたのはそこが最初だが、実際にはそれより前から使われていた |
|---|---|
| 使用時期 | DOI 1.8自身の報告書によればDOI 1.0〜1.7——これらの初期の報告書で使われていたcomp_*定義のリファレンスコードです。DOI 1.8が新たに導入したものではなく、それまでコードとしてしか存在しなかった定義を、後から文書として正式に仕様化した報告書がDOI 1.8です。 |
| 状態 | comp_*定義のリファレンスとして現行(その定義が当時の検証用データベースに統合されていたJOINの工程については置き換え済みファイルを参照)。 |
detailed_*ディレクトリです:元画像が入った
images_baseサブフォルダに加えて、モデルごとに
1つのサブフォルダがあり、その中にさらに画像IDごとの
サブフォルダがある構造。それぞれの画像IDサブフォルダには、
このスクリプト自身は生成しない2つのファイル
——analysis_results.json(グローバル/知覚系
メトリクス:SSIM、MS-SSIM、PSNR、MAE、LPIPS、CLIP類似度、
ΔE、LAB色空間統計)とp6_local_quality_data.csv
(ブロック単位のローカルSSIM)——があらかじめ存在している
必要があります。これらは、このスクリプトより前段の、別の
外部解析ステップが生成したものです。
見つかった画像それぞれについて:
analysis_results.jsonを
そのままglobal_comparison_metricsテーブルに
読み込みます——このスクリプトはこれらの値を再計算せず、
インポートするだけです。p6_local_quality_data.csvに列挙された
ブロックそれぞれについて、元画像・処理後画像の両方から
対応するピクセル領域を読み込み、8つのcomp_*特徴量すべてを
ピクセルから直接計算します:シャープネス(ラプラシアン
分散)、コントラスト(ピクセル標準偏差)、エントロピー
(ヒストグラムベース)、2つのアーティファクト指標
(ブロック境界の不連続性と、リンギング用のエッジ周辺
分散)、テクスチャ(GLCMベースの複合指標)、ノイズ
(適応的なDCT高周波エネルギー)、エッジ(Sobel勾配密度)。
このファイルのcalculate_sharpness・
calculate_contrast・calculate_entropy・
detect_artifacts・calculate_texture・
calculate_noise・calculate_edges・
calculate_ringingの各関数が、
「comp_sharpnessって実際には何を計算しているの?」
という問いへの、公開済みの具体的な答えです。DOI 1.8自身の
報告書は、これがDOI 1.0〜1.7の報告書全体で使われていたのと
同じ定義だとしています。この定義自体は、コードとしてしか
存在せず、正式に文書化されたことは一度もありませんでした
——DOI 1.8はその空白を埋めるために公開されています。
その後データ不整合バグが見つかったJOINの工程と、それに 代わる新パイプライン build_notta_tta_comp_db.py (DOI 1.12以降で使用)については、 置き換え済みファイルページを 参照してください。各comp_*定義の要約版は 用語集にあります。
2つのテーブルを持つSQLiteデータベースです:
analysis_results.jsonから直接取った
知覚系・グローバルメトリクスと、LAB色空間統計を保持します。
このデータベースの列名(sharpness_original_block、
sharpness_processed_blockなど)は、このシリーズの
他の場所で参照されているblocksテーブルの
comp_sharpness_notta /
comp_sharpness_ttaという命名規則とは異なります
——このデータベースは、このスクリプト自身の実行結果として
独立した成果物であり、そのblocksテーブルとは
別物です。
python3 import_ground_truth_data.py \
--root_dir /path/to/detailed_modelname \
--db_path output.db \
[--original_images_dir DIR] [--processed_images_dir DIR]
detailed_*ディレクトリ1つにつき1回実行します
(モデルごとに1回)。--original_images_dirと
--processed_images_dirは省略可能です——省略した
場合、スクリプトは元画像用にimages_baseサブ
フォルダを探し、処理後画像についてはルートディレクトリ自体を
使います。
build_notta_tta_comp_db.py
のようなスキップ式の再開機能はありません:実行のたびに
root_dir以下の全画像が再処理され、全行が
INSERT OR REPLACEで書き込まれます。そのため
再実行しても安全ではありますが、途中から再開するのではなく、
常にピクセル単位のcomp_*計算をすべてやり直すことになります。