| name | rl-awb-nighttime-white-balance |
| title | RL-AWB: Deep Reinforcement Learning for Auto White Balance Correction in Low-Light Night-time Scenes |
| version | 0.0.2 |
| engine | skillxiv-v0.0.2-claude-opus-4.6 |
| license | MIT |
| url | https://arxiv.org/abs/2601.05249 |
| keywords | ["Reinforcement Learning","Computational Photography","Low-Light Processing","White Balance"] |
| description | Correct color distortion in nighttime photos by combining statistical gray-pixel detection with reinforcement learning parameter optimization. Achieves superior cross-camera generalization without extensive labeled nighttime training data through a hybrid architecture that preserves interpretability while gaining adaptive tuning capability. |
When to Use This Skill
- Processing nighttime or low-light photography with unknown camera sensors
- Applications requiring cross-camera generalization without retraining
- Real-world white balance correction where sensor-specific optimization is impractical
- Scenarios where interpretable statistical methods provide baseline reliability
When NOT to Use This Skill
- Well-lit image processing (standard AWB algorithms suffice)
- Applications with access to extensive labeled nighttime datasets and GPU capacity
- Scenarios requiring sub-millisecond inference (RL adds latency)
Problem Summary
Traditional automatic white balance (AWB) assumes sufficient scene diversity and reliable gray pixel detection, which fail under extreme low-light conditions where sensor noise dominates signal. Deep learning approaches require extensive labeled nighttime data and suffer catastrophic generalization loss across different camera sensors. Existing methods either sacrifice interpretability or generalization capability.
Solution: Hybrid SGP-LRD + RL Framework
Combine an interpretable statistical algorithm with learned parameter optimization via Soft Actor-Critic reinforcement learning.
class SGPLRDWBCorrector:
def __init__(self, N_percentile=35, p_norm=4):
self.N = N_percentile
self.p = p_norm
def detect_salient_gray_pixels(self, image):
"""Two-stage filtering: local variance + color deviation"""
local_variance = compute_local_variance(image)
color_deviation = measure_chroma_deviation(image)
return apply_confidence_weighting(local_variance, color_deviation)
def estimate_illuminant():
norm_pixels = gray_pixels ** (/.p)
illuminant = compute_avg_illuminant(norm_pixels)
illuminant