← Documentation

import_ground_truth_data.py

画像ピクセルから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)——があらかじめ存在している 必要があります。これらは、このスクリプトより前段の、別の 外部解析ステップが生成したものです。

やっていること

見つかった画像それぞれについて:

  1. あらかじめ計算済みのanalysis_results.jsonを そのままglobal_comparison_metricsテーブルに 読み込みます——このスクリプトはこれらの値を再計算せず、 インポートするだけです。
  2. p6_local_quality_data.csvに列挙された ブロックそれぞれについて、元画像・処理後画像の両方から 対応するピクセル領域を読み込み、8つのcomp_*特徴量すべてを ピクセルから直接計算します:シャープネス(ラプラシアン 分散)、コントラスト(ピクセル標準偏差)、エントロピー (ヒストグラムベース)、2つのアーティファクト指標 (ブロック境界の不連続性と、リンギング用のエッジ周辺 分散)、テクスチャ(GLCMベースの複合指標)、ノイズ (適応的なDCT高周波エネルギー)、エッジ(Sobel勾配密度)。
  3. ブロックごとに1行——CSVのローカルSSIMと、ここで新たに 計算した8つのcomp_*値(元画像・処理後画像の両方)——を local_comparison_metricsテーブルに 書き込みます。

存在理由

このファイルの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データベースです:

このデータベースの列名(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_*計算をすべてやり直すことになります。