Я использую ffmpeg для коррекции фона для видео, и я хотел бы улучшить масштабирование интенсивности вывода.Настройка гистограммы интенсивности ffmpeg
Мое видео с серой шкалой имеет темные движущиеся объекты на светлом фоне. В 8-битных интенсивностях пикселей светлый фон имеет значения пикселей около 240, темные объекты имеют интенсивность около 120.
За пределами ffmpeg, я генерирую фоновое изображение, беря медианную рамку над некоторым количеством кадров. Затем я использую ffmpeg для смешивания/разделения каждого кадра на фоновое изображение. (Я хочу использовать деление, а не вычитание фона). [есть также некоторые кадрирование в моей команде FFmpeg, но это не имеет никакого отношения к моему вопросу]
'ffmpeg.exe', '-i', u'inputVideo.avi', '-i', u'bgMed.tif', '-y', '-r', '160', '-filter_complex', "[1:0] setsar=sar=1 [1sared]; [0:0][1sared] blend=all_mode='divide':repeatlast=1,format=gray,split=1 [int1];[int1]crop=1097:1097:12:11:[out1]", '-map', '[out1]', '-c:v', 'libxvid', '-q:v', '5', '-g', '10', u'outputVideo'
Эта процедура в основном работает, но в результате видеокадры выглядят слишком размыты. Это, вероятно, ожидается? Я предполагаю, что ffmpeg выполняет разделение и создает результат внутреннего поплавка, который затем отображает обратно на 8-битный вывод. Я хотел бы растянуть гистограмму результата из деления. Было бы предпочтительнее растянуть перед отображением до 8 бит для более тонкого динамического диапазона.
В моем примере я предполагаю, что деление фона создает рамку результата, которая имеет значение, близкое к 1 для фона, и значения, близкие к 0,5 для темных объектов. Затем ffmpeg, кажется, отображает полный диапазон 0-1 в 8 бит 0-255. Я бы хотел, чтобы он отображал диапазон 0,5-1 результата разделения в 8-битный диапазон вывода. возможно ли это как-то? Или как еще я могу достичь аналогичного результата?