Создание цветовой шкалы из изображения в градациях серого

У меня 8-битное изображение в градациях серого, представляющее интенсивности. Я хотел бы отобразить его цветом в соответствии со значением интенсивности (чтобы быть понятным, что-то вроде этого http://www.matthiaspospiech.de/files/matlab/plot/pcolor/pcolor-example-simple.png).

Я попытался с HSV шкалой (с H в (0->85) или (85->140) или (140->255), а затем вернуться к RGB, но, кажется, не работает. У кого-нибудь есть идея? Здесь мой код: (он работает в циклах на i а также j, img это изображение в градациях серого,

grey = img[j*w+i];                                                                                             

H = (grey * 360.0) / 255 ;
X = 1-((int)abs((int)(h/60.0) % 2) - 1);

if(BETWEEN(H,0,60) || BETWEEN(H,300,360)) r = 1.0;
else if(BETWEEN(H,60,120) || BETWEEN(H,240,300)) r = X;
else r = 0;

if(BETWEEN(H,60,180)) g = 1.0;
else if(H >= 240) g = 0;
else g = X;

if(BETWEEN(H,180,300)) b = 1.0;
else if(H < 120) b = 0;
else b = X;

R = (int)(r*255.0);
G = (int)(g*255.0);
B = (int)(b*255.0);

(конечная цель - использовать его в Java-программе с OpenImaj, так что если кто-то что-то знает об этом, это тоже хорошо:))

1 ответ

Решение

Возьмите систему HSB. Установите S на 100 (полное насыщение). Установите B на 100 (максимальная яркость). Я полагаю, ваш серый цвет в [0,255], установите H в (1-(серый /255,0))*240.

Это примерно создаст что-то вроде данной картинки. Когда серый =0, H будет 240° таким синим, а когда серый =255, H будет 0 ° таким красным...

Вы также можете изменить B, чтобы получить яркие или глубокие цвета...

Преобразование HVB в RGB можно найти в Интернете, если оно недоступно в вашем API.

Другие вопросы по тегам