Show HN: Brawshot – Basic temporal denoise for videos in BRAW format (github.com)
If you want to use this tool for artistic purposes, it will produce extreme motion blur depending on the window size you choose.
I am aware that tools like ffmpeg or the paid version of DaVinci Resolve have denoising features, but at least ffmpeg's denoising filters are extremely slow and memory intensive, and it's fun to implement this as fast GPU accelerated open source software for this non-standard use case anyway.
To use this tool, you'll need a Blackmagic Design camera which records in BRAW format (or you could hack the video decoder in the main.cpp file to decode some other source video file format).
If someone has a good idea how to remove the remaining noise pattern which seems to be inherent in the image sensor and very slowly changes over time, I'd be very interested!
6 comments
[ 4.3 ms ] story [ 25.5 ms ] threadWhen performing the subtraction after applying the LUT (that is, result = apply_lut(raw) - apply_lut(raw_noise) instead of result = apply_lut(raw - raw_noise + mean(raw_noise))), the result is quite different for reasons that I don't fully understand yet, but the noise is reduced in the same way. This will need some further investigation.
You could also average just the middle quantiles or similar, if you still want to average over several frames.
I'm also not entirely sure if computing the average of the non-linear "raw" sensor data which is what I did so far is a good or a bad idea / how it interacts at the endpoints of the value range.
Doing linear combinations of values that aren't linear does indeed sound problematic, values from one end will have a disproportional influence over the result, although maybe it's not a big deal since the same pixel in neighboring frames will probably only vary slightly in an approximately locally linear fashion.