-
Notifications
You must be signed in to change notification settings - Fork 0
Configuration Guide
Complete reference for DTUTMOConfig parameters and enums.
from dtutmo import DTUTMOConfig
config = DTUTMOConfig(
# ... parameters ...
)Observer age in years.
-
Type:
float -
Default:
24.0 -
Range:
18.0to80.0 -
Effects:
- Optical transfer function cutoff
- Glare scatter coefficient
- Pupil size dynamics
Example:
# Younger observer (sharper vision)
config = DTUTMOConfig(observer_age=25)
# Older observer (more blur, glare)
config = DTUTMOConfig(observer_age=60)Visual field diameter in degrees.
-
Type:
float -
Default:
60.0 -
Range:
10.0to180.0 -
Effects:
- Glare PSF extent
- Local adaptation scales
Example:
# Standard viewing
config = DTUTMOConfig(field_diameter=60)
# Peripheral vision
config = DTUTMOConfig(field_diameter=120)Display resolution in pixels per degree of visual angle.
-
Type:
float -
Default:
45.0 -
Range:
30.0to60.0 -
Calculation:
PPD = display_width_pixels / (2 * arctan(display_width_physical / (2 * viewing_distance))) * (180/π)
Example:
# HD display at typical viewing distance
config = DTUTMOConfig(pixels_per_degree=45)
# 4K display or closer viewing
config = DTUTMOConfig(pixels_per_degree=60)Enable optical transfer function (age-dependent blur).
-
Type:
bool -
Default:
True - Disable for: Speed optimization, sharp output
# Standard (with optical blur)
config = DTUTMOConfig(use_otf=True)
# Disable for speed
config = DTUTMOConfig(use_otf=False)Enable CIE disability glare.
-
Type:
bool -
Default:
True - Disable for: Speed optimization, scenes without bright sources
# Standard (with glare)
config = DTUTMOConfig(use_glare=True)
# Disable for speed or uniform scenes
config = DTUTMOConfig(use_glare=False)Enable bilateral base-detail separation.
-
Type:
bool -
Default:
True - Disable for: Speed optimization, memory constraints
# Preserve fine details
config = DTUTMOConfig(use_bilateral=True)
# Disable for speed/memory
config = DTUTMOConfig(use_bilateral=False)Enable local adaptation (Vangorp model).
-
Type:
bool -
Default:
True - Disable for: Global adaptation only (not recommended)
# Local adaptation (recommended)
config = DTUTMOConfig(use_local_adapt=True)
# Global only (faster but lower quality)
config = DTUTMOConfig(use_local_adapt=False)Color appearance model selection.
-
Type:
CAMTypeenum -
Default:
CAMType.DTUCAM -
Options:
-
CAMType.DTUCAM- Physiologically-grounded, 0.001-100k cd/m² -
CAMType.XLRCAM- Psychophysically-validated, 0.01-16.9k cd/m² -
CAMType.CIECAM16- CIE standard, 0.1-1k cd/m² -
CAMType.NONE- No CAM (fastest)
-
# Recommended
config = DTUTMOConfig(use_cam=CAMType.DTUCAM)
# HDR photography
config = DTUTMOConfig(use_cam=CAMType.XLRCAM)
# Standards compliance
config = DTUTMOConfig(use_cam=CAMType.CIECAM16)
# Speed critical
config = DTUTMOConfig(use_cam=CAMType.NONE)Viewing surround type.
-
Type:
ViewingConditionenum -
Default:
ViewingCondition.AVERAGE -
Options:
-
DARK- <0.2 cd/m² (cinema) -
DIM- 0.2-20 cd/m² (home viewing) -
AVERAGE- >20 cd/m² (office)
-
Effects:
- Adaptation degree (D)
- Surround factor (F_s)
# Cinema/dark room
config = DTUTMOConfig(viewing_condition=ViewingCondition.DARK)
# Home theater
config = DTUTMOConfig(viewing_condition=ViewingCondition.DIM)
# Office/daylight
config = DTUTMOConfig(viewing_condition=ViewingCondition.AVERAGE)Display standard for output encoding.
-
Type:
DisplayStandardenum -
Default:
DisplayStandard.REC_709 -
Options:
-
REC_709- sRGB, HDTV (100 cd/m²) -
REC_2020- UHDTV (100 cd/m²) -
DCI_P3- Digital cinema (48 cd/m²) -
REC_2100_PQ- HDR10 (10,000 cd/m²) -
REC_2100_HLG- HLG HDR (1,000 cd/m²)
-
# Standard display
config = DTUTMOConfig(target_display=DisplayStandard.REC_709)
# HDR10 display
config = DTUTMOConfig(target_display=DisplayStandard.REC_2100_PQ)
# HLG broadcast
config = DTUTMOConfig(target_display=DisplayStandard.REC_2100_HLG)Target display peak luminance in cd/m².
-
Type:
float -
Default:
100.0 -
Range:
0.1to10000.0 -
Typical values:
- SDR: 100 cd/m²
- HDR: 300-1000 cd/m²
- HDR10: 1000-4000 cd/m²
- Cinema: 48 cd/m²
- Medical: 150-500 cd/m²
# Standard display
config = DTUTMOConfig(target_luminance=100.0)
# HDR consumer display
config = DTUTMOConfig(target_luminance=1000.0)
# Reference monitor
config = DTUTMOConfig(target_luminance=4000.0)
# Medical display
config = DTUTMOConfig(target_luminance=150.0)Display mapping strategy (Stage 12).
-
Type:
DisplayMappingenum -
Default:
DisplayMapping.PRODUCTION_HYBRID -
Options:
-
LEGACY- Original v1.x method -
WHITEBOARD- Fast approximation -
FULL_INVERSE- Accurate inverse -
HYBRID- Basic hybrid -
PRODUCTION_HYBRID- Gradient-aware (recommended)
-
# Recommended
config = DTUTMOConfig(display_mapping=DisplayMapping.PRODUCTION_HYBRID)
# Speed critical
config = DTUTMOConfig(display_mapping=DisplayMapping.WHITEBOARD)
# Maximum accuracy
config = DTUTMOConfig(display_mapping=DisplayMapping.FULL_INVERSE)See Display Mapping for detailed comparison.
Gradient threshold for hybrid blending.
-
Type:
float -
Default:
0.15 -
Range:
0.05to0.30 -
Applies to:
PRODUCTION_HYBRIDonly
Effect:
- Higher → More whiteboard (faster, slightly less accurate)
- Lower → More full inverse (slower, more accurate)
# More aggressive (faster)
config = DTUTMOConfig(
display_mapping=DisplayMapping.PRODUCTION_HYBRID,
gradient_threshold=0.20
)
# Conservative (more accurate)
config = DTUTMOConfig(
display_mapping=DisplayMapping.PRODUCTION_HYBRID,
gradient_threshold=0.10
)Gradient map smoothing sigma.
-
Type:
float -
Default:
2.0 -
Range:
0.5to5.0 -
Applies to:
PRODUCTION_HYBRIDonly
Effect:
- Lower → Sharper transitions, possible artifacts
- Higher → Smoother blending, may over-smooth
# Sharper transitions
config = DTUTMOConfig(
display_mapping=DisplayMapping.PRODUCTION_HYBRID,
gradient_smoothing=1.0
)
# Smoother blending
config = DTUTMOConfig(
display_mapping=DisplayMapping.PRODUCTION_HYBRID,
gradient_smoothing=3.0
)Glare model type.
-
Type:
str -
Default:
'cie_general' -
Options:
-
'cie_general'- CIE 180:2010 (recommended) -
'cie_simplified'- Simplified CIE -
'none'- No glare
-
config = DTUTMOConfig(glare_model='cie_general')Contrast sensitivity function model.
-
Type:
str -
Default:
'castle' -
Options:
-
'castle'- CastleCSF (Ashraf 2024, recommended) -
'barten'- Barten CSF -
'movshon'- Movshon & Kiorpes
-
config = DTUTMOConfig(csf_model='castle')Cone temporal integration time in seconds.
-
Type:
float -
Default:
0.01(10 ms) -
Range:
0.005to0.05 - Effects: Temporal dynamics (future feature)
Rod temporal integration time in seconds.
-
Type:
float -
Default:
0.1(100 ms) -
Range:
0.05to0.2 - Effects: Temporal dynamics (future feature)
Optimized for speed:
fast_config = DTUTMOConfig(
use_otf=False,
use_glare=False,
use_bilateral=False,
use_cam=CAMType.NONE,
display_mapping=DisplayMapping.WHITEBOARD,
)
tmo = CompleteDTUTMO(fast_config)Performance: ~0.2s for 1080p
Balanced quality/performance:
production_config = DTUTMOConfig(
observer_age=30,
use_otf=True,
use_glare=True,
use_bilateral=True,
use_cam=CAMType.DTUCAM,
viewing_condition=ViewingCondition.AVERAGE,
display_mapping=DisplayMapping.PRODUCTION_HYBRID,
target_display=DisplayStandard.REC_709,
)
tmo = CompleteDTUTMO(production_config)Performance: ~0.7s for 1080p
Research/validation quality:
research_config = DTUTMOConfig(
observer_age=24, # Standard observer
use_otf=True,
use_glare=True,
use_bilateral=True,
use_cam=CAMType.DTUCAM,
viewing_condition=ViewingCondition.AVERAGE,
display_mapping=DisplayMapping.FULL_INVERSE,
target_display=DisplayStandard.REC_709,
)
tmo = CompleteDTUTMO(research_config)Performance: ~2.1s for 1080p
For HDR displays:
hdr10_config = DTUTMOConfig(
use_cam=CAMType.DTUCAM,
viewing_condition=ViewingCondition.DIM,
display_mapping=DisplayMapping.PRODUCTION_HYBRID,
target_display=DisplayStandard.REC_2100_PQ,
target_luminance=1000.0, # HDR display peak
)
tmo = CompleteDTUTMO(hdr10_config)Diagnostic accuracy:
medical_config = DTUTMOConfig(
observer_age=45, # Typical radiologist
use_bilateral=True, # Preserve fine details
use_cam=CAMType.DTUCAM, # Physiological accuracy
viewing_condition=ViewingCondition.DIM, # Reading room
display_mapping=DisplayMapping.FULL_INVERSE,
target_luminance=150.0, # Medical display
)
tmo = CompleteDTUTMO(medical_config)import json
config = DTUTMOConfig(
observer_age=35,
use_cam=CAMType.DTUCAM,
target_display=DisplayStandard.REC_709,
)
# Convert to dict
config_dict = {
'observer_age': config.observer_age,
'use_cam': config.use_cam.value,
'target_display': config.target_display.value,
# ... other parameters
}
# Save to JSON
with open('config.json', 'w') as f:
json.dump(config_dict, f, indent=2)import json
from dtutmo import DTUTMOConfig, CAMType, DisplayStandard
# Load from JSON
with open('config.json', 'r') as f:
config_dict = json.load(f)
# Create config
config = DTUTMOConfig(
observer_age=config_dict['observer_age'],
use_cam=CAMType(config_dict['use_cam']),
target_display=DisplayStandard(config_dict['target_display']),
# ... other parameters
)
tmo = CompleteDTUTMO(config)from dtutmo import CAMType
CAMType.NONE # No CAM (fastest)
CAMType.DTUCAM # Physiologically-grounded
CAMType.XLRCAM # HDR psychophysics
CAMType.CIECAM16 # CIE standardfrom dtutmo import DisplayStandard
DisplayStandard.REC_709 # sRGB, HDTV
DisplayStandard.REC_2020 # UHDTV
DisplayStandard.DCI_P3 # Digital cinema
DisplayStandard.REC_2100_PQ # HDR10
DisplayStandard.REC_2100_HLG # HLG HDRfrom dtutmo import ViewingCondition
ViewingCondition.DARK # <0.2 cd/m²
ViewingCondition.DIM # 0.2-20 cd/m²
ViewingCondition.AVERAGE # >20 cd/m²from dtutmo import DisplayMapping
DisplayMapping.LEGACY # v1.x compatibility
DisplayMapping.WHITEBOARD # Fast approximation
DisplayMapping.FULL_INVERSE # Accurate inverse
DisplayMapping.HYBRID # Basic hybrid
DisplayMapping.PRODUCTION_HYBRID # Gradient-aware (best)Validate configuration before processing:
def validate_config(config: DTUTMOConfig) -> bool:
"""Validate configuration parameters"""
# Check observer age
if not (18 <= config.observer_age <= 80):
raise ValueError(f"Observer age {config.observer_age} out of range [18, 80]")
# Check field diameter
if not (10 <= config.field_diameter <= 180):
raise ValueError(f"Field diameter {config.field_diameter} out of range [10, 180]")
# Check target luminance
if not (0.1 <= config.target_luminance <= 10000):
raise ValueError(f"Target luminance {config.target_luminance} out of range [0.1, 10000]")
# Warn about inconsistent combinations
if config.use_cam == CAMType.CIECAM16 and config.target_luminance > 1000:
warnings.warn("CIECAM16 validated only up to 1000 cd/m². Consider DTUCAM or XLR-CAM.")
return True
# Usage
config = DTUTMOConfig(observer_age=25)
validate_config(config)- Pipeline Stages - Understand what each parameter affects
- Display Mapping - Display mapping strategies
- Performance Optimization - Speed tuning
- API Reference - Complete class documentation