Я нашел эту функцию где-то, довольно давно. Я точно не знаю, что он делает. Я использую его для манипулирования выходным сигналом симплексного шума (со значениями серой шкалы от 0 до 255), но хотел бы лучше понять его.
int ExponentFilter(int value, int cover, double sharpness)
{
int c = value - (255 - cover);
if(c < 0)
c = 0;
return 255 - ((std::pow(sharpness,c)) * 255);
}
Я использую это как:
ExponentFilter(n,140,0.98f)
Где n — это мое значение от 0 до 255.
cover
как «экранированный» сигнал от полного отключения. cover
140 означает, что 140 самых высоких (самых ярких) значений (116-255) могут привести к выходу> 0.
sharpness
описывает, как быстро свет исчезает. 0,98
означает, что свет гаснет примерно вдвое быстрее, но эффект затухания не линейный, он уменьшается для более темных областей.
Я ожидал бы, что этот фильтр затемнит и обострит переэкспонированные изображения.
Exponentfilter — подходящее имя, так как функция резкости использует экспоненты (pow — функция экспоненты).
Других решений пока нет …