Вы должны будете сделать это, используя кусочные функции, где составное отображение является непрерывным, монотонным и предпочтительно дифференцируемым. Хороший способ реализовать это - использовать сплайн-интерполяцию между контрольными точками.
Линейное отображение идентичности имеет контрольные точки (0,0), (1,1). Введение контрольной точки между и ниже линейной, подобно (0,5, 0,4), действует как уменьшение значения гаммы. Используя несколько промежуточных контрольных точек, отображение можно контролировать очень точно, хотя для простого контроля экспозиции, вероятно, лучше линеаризовать исходные значения (типичные изображения имеют предварительно примененную гамму около 2,4, хотя цветовые пространства, такие как sRGB, немного усложняют ситуацию), затем отрегулируйте смещение и усиление, возможно, установив первую и последнюю контрольную точку в отображении на основе сплайна. Затем используйте промежуточную контрольную точку или примените гамму.
Автоматизация процесса немного сложна, но хорошим методом является определение гистограммы, а затем выполнение наименьших квадратов гауссовского распределения с параметрами смещения и средней ширины. Обратное значение этих параметров дает корректировку для выполнения. Гистограмма типичного изображения никоим образом не похожа на гауссову, но имеет смысл предположить, что большая часть содержимого изображения имеет медианное значение.