LUT避免uint32_t幂指数

问题描述 投票:0回答:1

我需要对图像中的所有像素执行幂指数运算。这是一个非常繁重的过程。指数是常数(浮点),底数是uint32_t(乘以2 uint16_t的结果)我正在尝试确定是否可以编写LUT,以便只需要查找为ech像素计算它们的值。

现在,我正在执行此操作:powf((exposure * color) , invGamma)

太慢了

我已经基于uint8_t解决了​​这个问题,但是具有2 ^ 32个元素的LUT太大了。

[使用uint8_t,我使用了这个:

void colorCorrection::vidGammaLUT()
{
    for (uint16_t u16Count = 0; u16Count < 256; u16Count++)
    {
        m_au8GammaRgbLUT[u16Count] = u8clamp(static_cast<int32_t>(255.0f * pow(u16Count/255.0f, m_settings.GammaRgb)));
    }
}
c++ class image-processing lookup-tables exponential
1个回答
1
投票

由于乘幂是乘积的乘积,因此您可以将gamma指数分别应用于曝光和颜色,并在查找后相乘。 2 ^ 16个元素更易于管理。

实际上,并非所有这些位都是有效的(实际很少超过12位),您可以丢弃一些以进一步减少。

© www.soinside.com 2019 - 2024. All rights reserved.