Думаю, наиболее быстро будет с помощью предварительно сформированной таблицы подстановки - Look up table (LUT).
Просто создаете таблицу из 65536 16-битных чисел, где каждому индексу соответствует результат транспонирования. И берите готовый результат по индексу.
Нужно преобразовать значение RGB в систему XYZ, затем на диаграмме xy (цветовой локус, CIE 1931) провести луч из точки белого (для заданого источника света A, C, D65...) через заданую точку xy. Точка пересечения луча с кривой спектральных цветов даст доминирующую длину волны. Для пурпурных цветов луч проводится в противоположную сторону. Обычно для них ставится штрих у лямбды. С програмной точки зрения можно использовать сплайны. Литература: Джадд, Вышецки.
Преобразование Хаара это свертка сигнала с вейвлетом Хаара и масштабирующей функцией. https://ru.wikipedia.org/wiki/%D0%92%D0%B5%D0%B9%D...
Преобразование Хаара соотносится с вейвлетом Хаара примерно так же, как и преобразование Фурье соотносится к функции синуса.