Я понятия не имею, какие алгоритмы коммерческое программное обеспечение использует для этой задачи, но я с радостью составлю для вас:
Найти яркость кадра 0 путем суммирования значений пикселей.
Для каждого кадра (i): вычесть кадр (i + 1) из кадра (i), взять среднее значение этих дельта-значений. Чтобы учесть движение, удалите все пиксели с дельтой, превышающей некоторый порог (установленный на основе уровня шума), и пересчитайте среднее значение дельты. Добавьте эту дельту к яркости изображения (i-1) и s
Теперь у нас должен быть массив абсолютных уровней яркости каждого изображения в последовательности. Для каждого значения вычислите скользящее среднее, то есть замените значение (i) на (сумма (от k = i-w до k = i + w) яркости (k)) / 2w для некоторого размера окна w. Выберите w в зависимости от количества мерцания. Для первого и последнего w кадров последовательности вы можете просто использовать постоянную целевую яркость (недостаточно кадров для расчета среднего).
Преобразование каждого изображения из его исходной яркости в новую целевую яркость (результат операции скользящего среднего).
Сделайте это независимо для всех цветовых каналов, и вы также сгладите любые изменения цвета.