SD-Retinex: A Stable Retinex Method for Low-Light Image Enhancement Designed Around the Sigmoid Derivative
Training-free Retinex enhancement that moves the sigmoid derivative to the real axis: 16.47 dB PSNR on LOL eval15, about 54 FPS at 600×400 on one CPU thread

Most low-light image enhancement today is deep learning on a GPU, usually in the cloud. I wanted it to work in the opposite setting: a factory at night or a disaster site, where the hardware is a CPU and the video often cannot leave the site. SD-Retinex is a training-free, deterministic method for that regime. It exists because my earlier method, XCR, had a flaw I could not explain.
Retinex, and the bug in XCR
Retinex theory (Land and McCann, 1971) treats an image as reflectance multiplied by illumination. Divide the illumination out and a scene can be brightened without amplifying the noise. XCR replaced the usual Gaussian blur with a separable kernel derived from a complex exponential. It was fast but touchy: a small change to its slope or radius could break the output.
The bug was in the math, not the code. XCR’s kernel is exactly the magnitude of the sigmoid derivative sampled along the imaginary axis, where the logistic function has all of its poles. Once the truncation radius N reaches 20 the main lobe jumps from u = ±6 to u = ±19, and at a = π/6 there is a division by zero. The XCR implementation the paper analyzes also clipped its reflectance gain to [0.5, 1.5], so a deep shadow could be brightened at most 1.5 times.
Method
SD-Retinex keeps the sigmoid derivative and moves it to the real axis, where it is bounded and smooth by construction. The illumination kernel is σ′(au) normalized over u in [−N, N], applied separably at O(N) per pixel. The tone map is a bounded sigmoid on log(Y / L^β), a Naka–Rushton response renormalized so that black maps to 0 and white to 1; it needs no hard clipping, and its local gain is again k·σ′. Every parameter was fixed in advance and never tuned on test data.
Results
On LOL eval15, SD-Retinex reaches 16.47 dB PSNR against 9.83 for XCR, 8.99 for SSR, 8.91 for MSR and 8.72 for LIME, and a color error ΔE00 of 15.90 where every other classical method is above 30.9. It takes 18.41 ms per 600×400 image, about 54 FPS, on one AMD Ryzen 7 8840U CPU thread, faster than XCR, LIME, SSR and MSR. Without any training it also passes the zero-reference deep methods Zero-DCE (14.80 dB) and SCI (14.78 dB). Paired-trained GPU methods such as URetinex-Net (19.84 dB) and Retinexformer (25.15 dB) remain higher; the roughly 9 dB gap is the measured price of a GPU and paired training.
In the ablations the bounded tone map is the dominant factor: swapping it for XCR’s clip drops PSNR from 16.47 to 8.78 dB. The real-axis kernel is within 0.1 dB of a scale-matched Gaussian and is kept for stability: its main lobe stays at u = 0 for every N.
What it led to
SD-Retinex is the front end of Beacon, the fully offline inspection system for dark environments we pitched at the Tongali Business Plan Contest 2026 in June 2026. The code, evaluation harness and per-image metric tables behind these numbers are on GitHub and Zenodo.
Publications
SD-Retinex: A Stable Retinex Method for Low-Light Image Enhancement Designed Around the Sigmoid Derivative
ZenodoPreprint
BibTeX
@misc{okugawa2026sdretinex, author = {Okugawa, Toma}, title = {{SD-Retinex}: A Stable Retinex Method for Low-Light Image Enhancement Designed Around the Sigmoid Derivative}, howpublished = {Zenodo}, year = {2026}, month = jun, doi = {10.5281/zenodo.20945211}, url = {https://doi.org/10.5281/zenodo.20945211} }
Built on this work
Beacon
Closed-network edge-AI inspection for dark factory floors and plant interiors, built on training-free Retinex enhancement; four awards at Tongali BPC 2026
