Я работаю над инструментом визуализации данных с использованием OpenGL, и цветовое пространство LAB является наиболее понятным цветовым пространством для визуализации данных, с которыми я имею дело (3 оси данных отображаются на 3 оси цветового пространства). Существует ли быстрый (например, без нецелочисленного возведения в степень, подходящий для выполнения в шейдере) алгоритм приблизительного преобразования значений LAB в значения RGB и обратно?
Быстрый приближенный алгоритм преобразования RGB/LAB?
Ответы (1)
Если выполнение фактического вычисления преобразования в шейдере слишком сложно/дорого, вы всегда можете использовать таблицу поиска. Поскольку оба цветовых пространства имеют 3 компонента, вы можете использовать трехмерную текстуру RGB для представления таблицы поиска.
Использование 3D-текстуры может показаться слишком накладным. Поскольку для представления цветов в OpenGL часто используется 8 бит/компонент, вам потребуется 3D-текстура размером 256x256x256. При 4 байтах на тексель это 64-мегабайтная текстура, что не так уж возмутительно, но очень существенно.
Однако, в зависимости от того, насколько сглажены значения в таблице перевода, вы можете обойтись более низким разрешением. Имейте в виду, что выборка текстуры использует линейную интерполяцию. Если кусочно-линейная интерполяция достаточно хороша при определенном базовом разрешении интерполяционной таблицы, вы можете значительно уменьшить ее размер.
Если вы идете в этом направлении и не можете позволить себе использовать 64 МБ для LUT, вам придется поиграть с размером LUT и сделать возможный компромисс между размером/производительностью и качеством.