Я использую эту функцию для преобразования нормализованного значения от 0 до 1 в значение RGB в зависимости от цветовой карты JET.
std::vector<double> mapJet(double v, double vmin, double vmax)
{
if (v < vmin)
v = vmin;
if (v > vmax)
v = vmax;
double dr, dg, db;
if (v < 0.1242) {
db = 0.504 + ((1.-0.504) / 0.1242)*v;
dg = dr = 0.;
} else if (v < 0.3747) {
db = 1.;
dr = 0.;
dg = (v - 0.1242) * (1. / (0.3747-0.1242));
} else if (v < 0.6253) {
db = (0.6253 - v) * (1. / (0.6253-0.3747));
dg = 1.;
dr = (v - 0.3747) * (1. / (0.6253-0.3747));
} else if (v < 0.8758) {
db = 0.;
dr = 1.;
dg = (0.8758 - v) * (1. / (0.8758-0.6253));
} else {
db = 0.;
dg = 0.;
dr = 1. - (v - 0.8758) * ((1.-0.504) / (1.-0.8758));
}
return std::vector<double> { 255 * dr, 255 * dg, 255 * db };
}
Моя цель - найти функцию double v = mapJet_inv(R,G,B)
.То есть я конвертирую цвет RGB в нормализованное значение между 0 и 1 в зависимости от цветовой карты.Я попытался начать с конца функции mapJet, однако я не знал, как указать диапазоны компонентов RGB.Может быть, я делаю это плохо.Я буду признателен за вашу помощь.Спасибо