← All Use Cases
📷
Box-Behnken Design

Landscape Photo Exposure

Box-Behnken design to maximize dynamic range and minimize noise by tuning ISO, aperture, and shutter speed

Summary

This experiment investigates landscape photo exposure. Box-Behnken design to maximize dynamic range and minimize noise by tuning ISO, aperture, and shutter speed.

The design varies 3 factors: iso (ISO), ranging from 100 to 3200, aperture (f-stop), ranging from 2.8 to 16, and shutter speed ms (ms), ranging from 1 to 1000. The goal is to optimize 2 responses: dynamic range ev (EV) (maximize) and noise score (pts) (minimize). Fixed conditions held constant across all runs include lens mm = 24, white balance = daylight.

A Box-Behnken design was chosen because it efficiently fits quadratic models with 3 continuous factors while avoiding extreme corner combinations — requiring only 15 runs instead of the 8 needed for a full factorial at two levels.

Quadratic response surface models were fitted to capture potential curvature and factor interactions. The RSM contour plots below visualize how pairs of factors jointly affect each response.

Key Findings

For dynamic range ev, the most influential factors were shutter speed ms (49.6%), iso (31.5%), aperture (18.9%). The best observed value was 13.2 (at iso = 1650, aperture = 9.4, shutter speed ms = 500.5).

For noise score, the most influential factors were iso (54.9%), shutter speed ms (28.6%), aperture (16.6%). The best observed value was 0.8 (at iso = 1650, aperture = 2.8, shutter speed ms = 1000).

Recommended Next Steps

Experimental Setup

Factors

FactorLowHighUnit
iso1003200ISO
aperture2.816f-stop
shutter_speed_ms11000ms

Fixed: lens_mm = 24, white_balance = daylight

Responses

ResponseDirectionUnit
dynamic_range_ev↑ maximizeEV
noise_score↓ minimizepts

Configuration

use_cases/147_landscape_exposure/config.json
{ "metadata": { "name": "Landscape Photo Exposure", "description": "Box-Behnken design to maximize dynamic range and minimize noise by tuning ISO, aperture, and shutter speed" }, "factors": [ { "name": "iso", "levels": [ "100", "3200" ], "type": "continuous", "unit": "ISO" }, { "name": "aperture", "levels": [ "2.8", "16" ], "type": "continuous", "unit": "f-stop" }, { "name": "shutter_speed_ms", "levels": [ "1", "1000" ], "type": "continuous", "unit": "ms" } ], "fixed_factors": { "lens_mm": "24", "white_balance": "daylight" }, "responses": [ { "name": "dynamic_range_ev", "optimize": "maximize", "unit": "EV" }, { "name": "noise_score", "optimize": "minimize", "unit": "pts" } ], "settings": { "operation": "box_behnken", "test_script": "use_cases/147_landscape_exposure/sim.sh" } }

Experimental Matrix

The Box-Behnken Design produces 15 runs. Each row is one experiment with specific factor settings.

Runisoapertureshutter_speed_ms
116502.81
216509.4500.5
332009.41000
432009.41
516509.4500.5
616509.4500.5
71009.41000
832002.8500.5
916502.81000
10320016500.5
111009.41
121650161000
131002.8500.5
1410016500.5
151650161

Step-by-Step Workflow

1

Preview the design

Terminal
$ doe info --config use_cases/147_landscape_exposure/config.json
2

Generate the runner script

Terminal
$ doe generate --config use_cases/147_landscape_exposure/config.json \ --output use_cases/147_landscape_exposure/results/run.sh --seed 42
3

Execute the experiments

Terminal
$ bash use_cases/147_landscape_exposure/results/run.sh
4

Analyze results

Terminal
$ doe analyze --config use_cases/147_landscape_exposure/config.json
5

Get optimization recommendations

Terminal
$ doe optimize --config use_cases/147_landscape_exposure/config.json
6

Multi-objective optimization

With 2 competing responses, use --multi to find the best compromise via Derringer–Suich desirability.

Terminal
$ doe optimize --config use_cases/147_landscape_exposure/config.json --multi
7

Generate the HTML report

Terminal
$ doe report --config use_cases/147_landscape_exposure/config.json \ --output use_cases/147_landscape_exposure/results/report.html

Features Exercised

FeatureValue
Design typebox_behnken
Factor typescontinuous (all 3)
Arg styledouble-dash
Responses2 (dynamic_range_ev ↑, noise_score ↓)
Total runs15

Analysis Results

Generated from actual experiment runs using the DOE Helper Tool.

Response: dynamic_range_ev

Top factors: shutter_speed_ms (49.6%), iso (31.5%), aperture (18.9%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
iso26.08733.04361.9510.2041
aperture21.20150.60080.3850.6923
shutter_speed_ms212.54906.27454.0220.0618
LackofFit632.79555.4659
PureError23.1200
Error835.91551.5600
Total1455.75333.9824

Pareto Chart

Pareto chart for dynamic_range_ev

Main Effects Plot

Main effects plot for dynamic_range_ev

Normal Probability Plot of Effects

Normal probability plot for dynamic_range_ev

Half-Normal Plot of Effects

Half-normal plot for dynamic_range_ev

Model Diagnostics

Model diagnostics for dynamic_range_ev

Response: noise_score

Top factors: iso (54.9%), shutter_speed_ms (28.6%), aperture (16.6%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
iso217.58148.79071.5250.2747
aperture21.43740.71870.1250.8844
shutter_speed_ms26.12143.06070.5310.6074
LackofFit639.72926.6215
PureError211.5267
Error851.25595.7633
Total1476.39605.4569

Pareto Chart

Pareto chart for noise_score

Main Effects Plot

Main effects plot for noise_score

Normal Probability Plot of Effects

Normal probability plot for noise_score

Half-Normal Plot of Effects

Half-normal plot for noise_score

Model Diagnostics

Model diagnostics for noise_score

Response Surface Plots

3D surfaces fitted with quadratic RSM. Red dots are observed data points.

dynamic range ev aperture vs shutter speed ms

RSM surface: dynamic range ev aperture vs shutter speed ms

dynamic range ev iso vs aperture

RSM surface: dynamic range ev iso vs aperture

dynamic range ev iso vs shutter speed ms

RSM surface: dynamic range ev iso vs shutter speed ms

noise score aperture vs shutter speed ms

RSM surface: noise score aperture vs shutter speed ms

noise score iso vs aperture

RSM surface: noise score iso vs aperture

noise score iso vs shutter speed ms

RSM surface: noise score iso vs shutter speed ms

Multi-Objective Optimization

When responses compete, Derringer–Suich desirability finds the best compromise. Each response is scaled to a 0–1 desirability, then combined via a weighted geometric mean.

Overall Desirability
D = 0.9545

Per-Response Desirability

ResponseWeightDesirabilityPredictedDir
dynamic_range_ev 1.5
0.9545
13.20 0.9545 13.20 EV
noise_score 1.0
0.9545
0.80 0.9545 0.80 pts

Recommended Settings

FactorValue
iso100 ISO
aperture9.4 f-stop
shutter_speed_ms1000 ms

Source: from observed run #14

Trade-off Summary

Sacrifice = how much worse than single-objective best.

ResponsePredictedBest ObservedSacrifice
noise_score0.800.80+0.00

Top 3 Runs by Desirability

RunDFactor Settings
#70.9230iso=3200, aperture=9.4, shutter_speed_ms=1
#110.8007iso=3200, aperture=9.4, shutter_speed_ms=1000

Model Quality

ResponseType
noise_score0.2742linear

Full Multi-Objective Output

doe optimize --multi
============================================================ MULTI-OBJECTIVE OPTIMIZATION Method: Derringer-Suich Desirability Function ============================================================ Overall desirability: D = 0.9545 Response Weight Desirability Predicted Direction --------------------------------------------------------------------- dynamic_range_ev 1.5 0.9545 13.20 EV ↑ noise_score 1.0 0.9545 0.80 pts ↓ Recommended settings: iso = 100 ISO aperture = 9.4 f-stop shutter_speed_ms = 1000 ms (from observed run #14) Trade-off summary: dynamic_range_ev: 13.20 (best observed: 13.20, sacrifice: +0.00) noise_score: 0.80 (best observed: 0.80, sacrifice: +0.00) Model quality: dynamic_range_ev: R² = 0.7624 (quadratic) noise_score: R² = 0.2742 (linear) Top 3 observed runs by overall desirability: 1. Run #14 (D=0.9545): iso=100, aperture=9.4, shutter_speed_ms=1000 2. Run #7 (D=0.9230): iso=3200, aperture=9.4, shutter_speed_ms=1 3. Run #11 (D=0.8007): iso=3200, aperture=9.4, shutter_speed_ms=1000

Full Analysis Output

doe analyze
=== Main Effects: dynamic_range_ev === Factor Effect Std Error % Contribution -------------------------------------------------------------- shutter_speed_ms 2.0286 0.5153 49.6% iso 1.2893 0.5153 31.5% aperture 0.7750 0.5153 18.9% === ANOVA Table: dynamic_range_ev === Source DF SS MS F p-value ----------------------------------------------------------------------------- iso 2 6.0873 3.0436 1.951 0.2041 aperture 2 1.2015 0.6008 0.385 0.6923 shutter_speed_ms 2 12.5490 6.2745 4.022 0.0618 Lack of Fit 6 32.7955 5.4659 3.504 0.2386 Pure Error 2 3.1200 1.5600 Error 8 35.9155 1.5600 Total 14 55.7533 3.9824 === Summary Statistics: dynamic_range_ev === iso: Level N Mean Std Min Max ------------------------------------------------------------ 100 4 10.9750 2.2500 7.9000 12.8000 1650 7 9.6857 1.9178 6.2000 11.7000 3200 4 10.9500 2.0339 8.3000 13.2000 aperture: Level N Mean Std Min Max ------------------------------------------------------------ 16 4 9.9750 2.8987 6.2000 13.2000 2.8 4 10.7500 1.6663 8.5000 12.5000 9.4 7 10.3714 1.8715 7.9000 12.8000 shutter_speed_ms: Level N Mean Std Min Max ------------------------------------------------------------ 1 4 9.7500 2.9738 6.2000 12.8000 1000 4 9.3000 1.5078 7.9000 11.2000 500.5 7 11.3286 1.2816 9.3000 13.2000 === Main Effects: noise_score === Factor Effect Std Error % Contribution -------------------------------------------------------------- iso 2.4821 0.6032 54.9% shutter_speed_ms 1.2929 0.6032 28.6% aperture 0.7500 0.6032 16.6% === ANOVA Table: noise_score === Source DF SS MS F p-value ----------------------------------------------------------------------------- iso 2 17.5814 8.7907 1.525 0.2747 aperture 2 1.4374 0.7187 0.125 0.8844 shutter_speed_ms 2 6.1214 3.0607 0.531 0.6074 Lack of Fit 6 39.7292 6.6215 1.149 0.5343 Pure Error 2 11.5267 5.7633 Error 8 51.2559 5.7633 Total 14 76.3960 5.4569 === Summary Statistics: noise_score === iso: Level N Mean Std Min Max ------------------------------------------------------------ 100 4 2.9500 2.6338 0.8000 6.7000 1650 7 4.6571 2.3071 2.1000 7.3000 3200 4 2.1750 1.4221 0.8000 3.5000 aperture: Level N Mean Std Min Max ------------------------------------------------------------ 16 4 3.3000 2.9200 0.8000 7.3000 2.8 4 4.0500 2.1794 2.8000 7.3000 9.4 7 3.3857 2.4197 0.8000 6.7000 shutter_speed_ms: Level N Mean Std Min Max ------------------------------------------------------------ 1 4 4.1250 3.6682 0.8000 7.3000 1000 4 4.1500 1.7369 2.8000 6.7000 500.5 7 2.8571 1.8645 0.8000 6.6000

Optimization Recommendations

doe optimize
=== Optimization: dynamic_range_ev === Direction: maximize Best observed run: #14 iso = 1650 aperture = 9.4 shutter_speed_ms = 500.5 Value: 13.2 RSM Model (linear, R² = 0.2882, Adj R² = 0.0941): Coefficients: intercept +10.3667 iso +0.4625 aperture -1.3375 shutter_speed_ms -0.0750 RSM Model (quadratic, R² = 0.6666, Adj R² = 0.0664): Coefficients: intercept +11.5667 iso +0.4625 aperture -1.3375 shutter_speed_ms -0.0750 iso*aperture -0.0500 iso*shutter_speed_ms -0.6750 aperture*shutter_speed_ms +0.5250 iso^2 -1.7583 aperture^2 -1.1583 shutter_speed_ms^2 +0.6667 Curvature analysis: iso coef=-1.7583 concave (has a maximum) aperture coef=-1.1583 concave (has a maximum) shutter_speed_ms coef=+0.6667 convex (has a minimum) Notable interactions: iso*shutter_speed_ms coef=-0.6750 (antagonistic) aperture*shutter_speed_ms coef=+0.5250 (synergistic) Predicted optimum (from linear model, at observed points): iso = 3200 aperture = 2.8 shutter_speed_ms = 500.5 Predicted value: 12.1667 Surface optimum (via L-BFGS-B, linear model): iso = 3200 aperture = 2.8 shutter_speed_ms = 1 Predicted value: 12.2417 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. aperture (effect: 2.7, contribution: 46.0%) 2. iso (effect: 2.2, contribution: 37.6%) 3. shutter_speed_ms (effect: 0.9, contribution: 16.3%) === Optimization: noise_score === Direction: minimize Best observed run: #7 iso = 1650 aperture = 2.8 shutter_speed_ms = 1000 Value: 0.8 RSM Model (linear, R² = 0.1338, Adj R² = -0.1024): Coefficients: intercept +3.5400 iso -0.1000 aperture +1.0375 shutter_speed_ms +0.4375 RSM Model (quadratic, R² = 0.7725, Adj R² = 0.3630): Coefficients: intercept +1.8667 iso -0.1000 aperture +1.0375 shutter_speed_ms +0.4375 iso*aperture +0.8000 iso*shutter_speed_ms +0.9500 aperture*shutter_speed_ms -0.2750 iso^2 +3.1292 aperture^2 +0.8542 shutter_speed_ms^2 -0.8458 Curvature analysis: iso coef=+3.1292 convex (has a minimum) aperture coef=+0.8542 convex (has a minimum) shutter_speed_ms coef=-0.8458 concave (has a maximum) Notable interactions: iso*shutter_speed_ms coef=+0.9500 (synergistic) iso*aperture coef=+0.8000 (synergistic) Predicted optimum (from quadratic model, at observed points): iso = 3200 aperture = 16 shutter_speed_ms = 500.5 Predicted value: 7.5875 Surface optimum (via L-BFGS-B, quadratic model): iso = 2088.53 aperture = 3.45483 shutter_speed_ms = 1 Predicted value: -0.1563 Model quality: Good fit — general trends are captured, some noise remains. Factor importance: 1. iso (effect: 3.2, contribution: 47.0%) 2. aperture (effect: 2.1, contribution: 30.2%) 3. shutter_speed_ms (effect: 1.6, contribution: 22.8%)
← Previous: 3D Print Quality Tuning Next: Studio Portrait Lighting →