What is the decimal RGB scale used in Matlab called?
180 views (last 30 days)
Show older comments
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 Comment
Rik
on 7 Feb 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.
Accepted Answer
Adam Danz
on 7 Feb 2019
Edited: Adam Danz
on 8 Feb 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 Comments
Stephen23
on 8 Feb 2019
Edited: Stephen23
on 8 Feb 2019
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
on 8 Feb 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.
More Answers (2)
TADA
on 7 Feb 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
Walter Roberson
on 7 Feb 2019
uint8() the decimal values to get something that MATLAB will understand.
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!