Source code for darsia.presets.fluidflower.benchmarkco2model
"""
Module containing presets for concentration analyses as used for
analyzing the benchmark experiments.
"""
import numpy as np
import darsia
[docs]
def benchmark_binary_cleaning_preset(
base: darsia.Image, options: dict
) -> darsia.CombinedModel:
"""
Cleaning methods also used in the benchmark_concentration_analysis_preset.
Args:
base (darsia.Image): baseline image
options (dict): options same as in benchmark_concentration_analysis_preset.
"""
original_shape = base.img.shape[:2]
binary_cleaning = darsia.CombinedModel(
[
# Binary inpainting
darsia.BinaryRemoveSmallObjects(key="prior ", **options),
darsia.BinaryFillHoles(key="prior ", **options),
# Resize and Smoothing
darsia.Resize(dtype=np.float32, key="prior ", **options),
darsia.TVD(key="prior ", **options),
darsia.Resize(shape=original_shape),
# Conversion to boolean
darsia.StaticThresholdModel(0.5),
]
)
return binary_cleaning
[docs]
def benchmark_concentration_analysis_preset(
base: darsia.Image, labels: np.ndarray, options: dict
) -> darsia.PriorPosteriorConcentrationAnalysis:
"""
The strategy for identifying any phase is constructed as a pipeline
of the following steps:
1. Use monochromatic signal reduction
2. Restoration (upscaling) of signal
3. Prior strategy providing a first detection.
a. Thresholding.
b. binary inpainting
c. resizing and smoothing
d. conversion to boolean data
4. Posterior strategy reviewing the first three steps.
Args:
base (darsia.Image): baseline image
labels (np.ndarray): labeling of domain in facies
options (dict): dictionary holding all tuning parameters
Returns:
darsia.ConcentrationAnalysis: concentration analysis for detecting CO2.
"""
########################################################################
# Define signal reduction
signal_reduction = darsia.MonochromaticReduction(**options)
########################################################################
# Treat all facies the same
balancing = None
########################################################################
# Define restoration object - coarsen, tvd, resize
original_shape = base.img.shape[:2]
restoration = darsia.CombinedModel(
[
darsia.Resize(key="restoration ", **options),
darsia.TVD(key="restoration ", **options),
darsia.Resize(shape=original_shape),
]
)
########################################################################
# Combine the three models as prior:
# 1. Thresholding
# 2. Binary cleaning
# Prior model
prior_model = darsia.CombinedModel(
[
# Thresholding
darsia.ThresholdModel(labels, key="prior ", **options),
# Binary cleaning
benchmark_binary_cleaning_preset(base, options),
]
)
########################################################################
# Define a posterior model
posterior_model = darsia.BinaryDataSelector(key="posterior ", **options)
########################################################################
# Combine all to define a concentration analysis object for CO2.
concentration_analysis = darsia.PriorPosteriorConcentrationAnalysis(
base,
signal_reduction,
balancing,
restoration,
prior_model,
posterior_model,
labels,
**options,
)
return concentration_analysis