Создание цветовой шкалы из изображения в градациях серого
У меня 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.