CS 184 Final Project · Final Report
We build a computational photography pipeline for high-ISO burst RAW imaging and display-ready color rendering. Our system compares multiple processing orders (denoise→merge, merge→denoise, and coarse→merge→refine), integrates an optional diffusion-based learned refinement backend, and evaluates tone-mapping / color finishing variants (Reinhard, filmic/Hable, and ACES). The report emphasizes visual quality, pipeline clarity, and reproducible evaluation, aligning with the graphics-oriented focus of CS 184. We learned that in a graphics setting, the finishing stage (tone mapping and color) often dominates perceived quality, and that clear comparisons (tables, metrics, zoom-ins) are essential for communicating results.
We evaluate three end-to-end processing orders (Pipeline A/B/C) that reorder the same core stages (classical denoising, HDR merge/alignment, diffusion refinement, and finishing). For readability, we summarize A/B/C explicitly in the Pipeline Overview section and then present denoising and tone-mapping effects separately in the Results.
Unique decisions and enhancements. We implemented a modular C++ pipeline interface that allows swapping denoisers and reordering stages with a single flag. We integrated a diffusion backend as an optional post-merge refiner via a C++↔Python bridge, and performed a tone mapping ablation to align the project with CS 184’s emphasis on visual quality.
Our system is organized as three end-to-end pipeline variants that reorder the same core stages (denoising, HDR merge/alignment, and finishing). This report separates denoising effects from tone mapping effects to keep the results easy to read.
| Pipeline | Order | Intuition | When it helps |
|---|---|---|---|
| Pipeline A | classical denoise (per-frame) → HDR merge → finishing | Remove sensor noise early so fusion operates on cleaner inputs | Fast baselines; stable improvement on high ISO |
| Pipeline B | HDR merge → diffusion refine (merged) → finishing | Learned prior cleans the merged image while preserving global structure | Strong denoising at very low light; may over-smooth textures |
| Pipeline C | coarse denoise → HDR merge → diffusion refine → finishing | Hybrid cascade: light classical pre-clean + diffusion fine-tune | More robust across scenes; more knobs but better trade-offs |
In the sections below, we first isolate the denoising vs. no-denoising comparison (using DSC08538/DSC08539), then isolate the tone mapping ablation (using three additional scenes).
We use two low-light scenes (DSC08538 and DSC08539) to highlight the effect of denoising. The goal is to show how much noise can be removed without destroying small light sources and subtle gradients in dark regions.
For each scene: No-mapping (baseline) → Denoise → Method3 (tone map). Hover to zoom for close inspection.
After denoising and merging, the same scene-referred signal can look dramatically different once mapped to display space. We therefore compare three tone-mapping operators side-by-side on three scenes, using No-mapping as the baseline.
Indoor / structured content. Inspect edges and smooth gradients for banding or contrast loss. Hover to zoom; compare highlight roll-off, midtone contrast, and color shift.
Additional scene (filename contains space). Useful to validate robustness of the reporting pipeline. Hover to zoom; compare highlight roll-off, midtone contrast, and color shift.
Low-light sample for generalization. Focus on highlight roll-off and color casts. Hover to zoom; compare highlight roll-off, midtone contrast, and color shift.
We group methods into (i) HDR+ reproduction baselines that isolate alignment/merge behavior (Average vs. Robust), (ii) our end-to-end pipeline orders (A/B/C), and (iii) a tone mapping ablation that compares three display-mapping operators.
| Baseline | Order | Key idea | Improves | Failure mode |
|---|---|---|---|---|
| Average | align → temporal mean | Aligned averaging across burst frames (simplest HDR+ baseline). | Noise reduction (≈ √N) | Blur/ghosting if residual misalignment exists |
| Robust | align → robust merge | Adaptive fusion that down-weights inconsistent regions to suppress mismatch artifacts. | Sharper details; fewer ghosts | More compute; sensitive to weighting/window choices |
| Pipeline | Order | Intuition | When it helps | Trade-off |
|---|---|---|---|---|
| Pipeline A | classical denoise → HDR merge → finish | Reduce per-frame sensor noise first so fusion operates on cleaner inputs. | Fast, stable improvements at high ISO | May smooth fine detail before merge |
| Pipeline B | HDR merge → diffusion refine → finish | Apply a learned prior after merging to clean noise while preserving global structure. | Strong denoising in very low light | Higher runtime; risk of over-smoothing textures |
| Pipeline C | coarse denoise → HDR merge → diffusion refine → finish | Hybrid cascade: light classical pre-clean stabilizes merge, then diffusion fine-tunes. | More robust across scenes; better trade-off | More knobs; tuning required |
| Tone mapping | What it does | Typical visual effect | What to look for |
|---|---|---|---|
| Hasselblad | Filmic-style curve tuned for photographic contrast and smooth roll-off. | More “photo-like” contrast; smoother highlights. | Highlight roll-off, midtone contrast, shadow lift |
| Guided-filmic | Guided/edge-aware filmic mapping to preserve structure under compression. | Better structure preservation; reduces flat-looking compression. | Edge halos, local contrast around boundaries |
| ACES-luminance | ACES fitted curve applied through luminance for stable color appearance. | Cinematic highlight compression; consistent color response. | Color cast shift, highlight saturation, shadow noise |
To keep the report readable, we group proxy metrics by scene (image_id) and enforce a consistent variant order. We report no-reference proxies (MAD noise σ, Tenengrad sharpness, local contrast) because ground truth is unavailable.
Variants are sorted consistently: raw → no-mapping → denoise → hasselblad → guided-filmic → aces-luminance.
| Variant | Noise σ | Sharpness | Contrast |
|---|---|---|---|
raw | 0.011178 | 0.001865 | 0.000062 |
no-mapping | 0.017466 | 0.001039 | 0.000038 |
denoise | 0.017466 | 0.001039 | 0.000038 |
hasselblad | 0.041881 | 0.003197 | 0.000113 |
guided-filmic | 0.039509 | 0.001059 | 0.000052 |
aces-luminance | 0.145644 | 0.031824 | 0.000966 |
Variants are sorted consistently: raw → no-mapping → denoise → hasselblad → guided-filmic → aces-luminance.
| Variant | Noise σ | Sharpness | Contrast |
|---|---|---|---|
raw | 0.005311 | 0.001645 | 0.000046 |
no-mapping | 0.012468 | 0.001165 | 0.000032 |
denoise | 0.012468 | 0.001165 | 0.000032 |
hasselblad | 0.024532 | 0.002812 | 0.000080 |
guided-filmic | 0.020528 | 0.001271 | 0.000043 |
aces-luminance | 0.117489 | 0.035240 | 0.001039 |
Variants are sorted consistently: raw → no-mapping → denoise → hasselblad → guided-filmic → aces-luminance.
| Variant | Noise σ | Sharpness | Contrast |
|---|---|---|---|
raw | 0.081817 | 0.059159 | 0.001773 |
no-mapping | 0.076027 | 0.046148 | 0.001455 |
denoise | 0.076027 | 0.046148 | 0.001455 |
hasselblad | 0.065634 | 0.035964 | 0.001166 |
guided-filmic | 0.078156 | 0.034825 | 0.001211 |
aces-luminance | 0.046077 | 0.084833 | 0.002846 |
Variants are sorted consistently: raw → no-mapping → denoise → hasselblad → guided-filmic → aces-luminance.
| Variant | Noise σ | Sharpness | Contrast |
|---|---|---|---|
raw | 0.006211 | 0.049939 | 0.001523 |
no-mapping | 0.008706 | 0.036756 | 0.001211 |
denoise | 0.008706 | 0.036756 | 0.001211 |
hasselblad | 0.024050 | 0.078913 | 0.002732 |
guided-filmic | 0.031993 | 0.033571 | 0.001349 |
aces-luminance | 0.058994 | 0.611604 | 0.021229 |
Variants are sorted consistently: raw → no-mapping → denoise → hasselblad → guided-filmic → aces-luminance.
| Variant | Noise σ | Sharpness | Contrast |
|---|---|---|---|
raw | 0.019098 | 0.382335 | 0.009969 |
no-mapping | 0.018678 | 0.364108 | 0.009573 |
denoise | 0.018678 | 0.364108 | 0.009573 |
hasselblad | 0.034885 | 0.239251 | 0.006534 |
guided-filmic | 0.029490 | 0.195524 | 0.005350 |
aces-luminance | 0.142034 | 0.087948 | 0.002890 |
Note: We intentionally omit PSNR/SSIM because valid ground-truth references are unavailable for these captures; surrogate PSNR can be misleading. Across all scenes, the proxy metrics show a consistent trade-off between noise suppression and detail preservation. Variants designed to smooth the image (e.g., the denoise output) generally reduce the MAD-based noise estimate in very dark regions, while simultaneously lowering Tenengrad sharpness and, in some cases, local contrast—indicating that part of the “detail” being removed is either fine texture or high-frequency noise. In contrast, display-mapping variants (hasselblad / guided-filmic / aces-luminance) mainly shift local contrast and perceived brightness rather than purely minimizing the noise proxy, which matches our qualitative observation that tone mapping improves readability (midtone lift and highlight roll-off) but can also amplify visible noise if shadows are lifted aggressively. Because our captures lack a noise-free ground truth, we report these no-reference proxies to support trends rather than absolute quality rankings, and we interpret them together with the zoom-in visual comparisons.
This project combined a multi-stage imaging pipeline with learning-based refinement. Below are the most important engineering issues we faced and the takeaways that shaped our final presentation and evaluation.