What is the decimal RGB scale used in Matlab called?

182 visualizaciones (últimos 30 días)
P_L
P_L el 7 de Feb. de 2019
Editada: Adam Danz el 8 de Feb. de 2019
Hi there,
I have been trying lots of websites to find colours for my plots. The colours i find on webistes that are RGB are ont on the decimal scale. Therefore is there another scale I should search for, or is there a way to convert them?
Example:
  • RGB: (37, 147, 174)
Many thanks!
  1 comentario
Rik
Rik el 7 de Feb. de 2019
The colors in Matlab are generally 8bit, meaning that the colors are scale 0-255. So I don't know what you would mean by converting.

Iniciar sesión para comentar.

Respuesta aceptada

Adam Danz
Adam Danz el 7 de Feb. de 2019
Editada: Adam Danz el 8 de Feb. de 2019
As Rik Wisselink mentioned, RGB values are scaled to 0-255 (8 bit means 2^8 which equal 256). Matlab normalizes each RGB value to this 256 range. So a value of 0.5 means 50% of the 256 range.
For example, the color crimson is represented as [0.85938 0.078125 0.23438]. When you multiply this by 256,
[0.85938 0.078125 0.23438] * 256
ans =
[ 220 20 60]
Likewise, if you have an RBG value of [0, 250, 100], matlab will represent it as
[0, 250, 100] / 256
ans =
[ 0 0.97656 0.39063]
[UPDATE]
Scaling by 255 makes more sense than by 256 for reasons explained in the comment section below.
  5 comentarios
Stephen23
Stephen23 el 8 de Feb. de 2019
Editada: Stephen23 el 8 de Feb. de 2019
@ Adam Danz & Image Analyst: errrr... why divide by 256?
Why not just divide by 255 (that being the maximum value per channel, and is exactly what MATLAB's inbuilt functions do, e.g. im2double)? Is there a secret reason why you want to scale the colors a smidgen darker, and totally ignore white?
>> im2double(uint8(255)) % correct scaling
ans = 1
>> 255/255 % correct scaling
ans = 1
>> 255/256 % your suggestions
ans = 0.99609
See also the MATLAB documentation:
which explains:
"Conversely, divide by 255 after converting a uint8 RGB image to double:"
RGB64 = double(RGB8)/255
Adam Danz
Adam Danz el 8 de Feb. de 2019
That's a good point and the better scaler is 255 for that reason.
The rgb() FEX function scales all values < 240 using 256 and then essentially scales values 241:255 using 255. The author notes that scaling by 256 more often gives rounder numbers such as [0 128 0] / 256 = [0 .5 0] but that rarely matters.

Iniciar sesión para comentar.

Más respuestas (2)

TADA
TADA el 7 de Feb. de 2019
some functions like plot use color intensity values (between 0 and 1) to represent RGB values, instead of what you are used to and is used in web browsers (values between 0 and 255).
you can just take your RGB vector and divide it by 255
also I found this rgb function very useful

Walter Roberson
Walter Roberson el 7 de Feb. de 2019
uint8() the decimal values to get something that MATLAB will understand.

Categorías

Más información sobre Images en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by