"""
Модуль загрузки связей и метрик в таблицы.
Автор: Юров П.И.
"""
import math
import pandas as pd
from pathlib import Path
from typing import Dict, Any
from IPython.display import display
[документация]
class ModuleData:
"""
Модуль загрузки связей и метрик в таблицы.
"""
[документация]
def __init__(self, processing_instance: Any) -> None:
"""
Инициализация.
Параметры
---------
processing_instance : Any
Ссылка на объект Processing с изображениями.
"""
self.processing = processing_instance
[документация]
def get_table(self,
table_path: Path,
display_table: bool = False) -> None:
"""Получение метрик в структурированном виде."""
data = {}
data = self._collect_data(data)
self._save_data_to_csv(data, table_path, display_table)
def _collect_data(self, data: Dict[str, Any]) -> Dict[str, Any]:
"""Сбор и сохранение информации для общего анализа."""
for img in self.processing.images:
original_image = img.get_original()
img.save_filter()
blurred_kernel_array = img.get_original_kernels()
blurred_psnr_array = img.get_blurred_PSNR()
blurred_ssim_array = img.get_blurred_SSIM()
algorithm_kernel = img.get_kernels()
algorithm_restored_image = img.get_restored()
algorithm_restored_psnr = img.get_PSNR()
algorithm_restored_ssim = img.get_SSIM()
#линия за линией
for blurred_image in img.get_blurred_array(): #подразумеваем, что она точно существует
data.setdefault('original', []).append(original_image)
data.setdefault('kernel blur', []).append(blurred_kernel_array.get(str(blurred_image), 'missing'))
data.setdefault('blurred', []).append(blurred_image)
data.setdefault('blurred psnr', []).append(blurred_psnr_array.get(str(blurred_image), math.nan))
data.setdefault('blurred ssim', []).append(blurred_ssim_array.get(str(blurred_image), math.nan))
for algorithm_name in img.get_algorithm():
data.setdefault(f"kernel_{algorithm_name}", []).append(
algorithm_kernel.get((str(blurred_image), str(algorithm_name)), 'missing')
)
data.setdefault(algorithm_name, []).append(
algorithm_restored_image.get((str(blurred_image), str(algorithm_name)), 'missing')
)
data.setdefault(f"psnr_{algorithm_name}", []).append(
algorithm_restored_psnr.get((str(blurred_image), str(algorithm_name)), math.nan)
)
data.setdefault(f"ssim_{algorithm_name}", []).append(
algorithm_restored_ssim.get((str(blurred_image), str(algorithm_name)), math.nan)
)
return data
def _save_data_to_csv(self,
data: Dict[str, Any],
path: Path,
display_table: bool = False) -> None:
"""Сохраняет словарь в CSV файл."""
df_data = pd.DataFrame(data)
if display_table:
display(df_data)
df_data.to_csv(path, index=False)