Sum of RGB components

12 次查看(过去 30 天)
I'm trying to sum the components of RGB of a point. Like it follows in the code. For example, if I have RGB = [230 100 150],
I want to get for RGB(1) + RGB(2) + RGB(3) the value of 230 + 100 + 150 = 480. The problem is that it returns 255. I know that 255 is the maximum value in the RGB system, but how could I fix the code so I can get the right sum?
b = squeeze(a(c, d, :)); % Value in RGB of a point of a image. 'C' and 'd' are the
% coordinates of the point
if ((b(1) + b(2) + b(3)) > 725)
K = 2.00;
elseif ((b(1) > b(2)) && (674.5 < (b(1) + b(2) + b(3))) && ((b(1) + b(2) + b(3)) <= 725))
K = 2.10;

采纳的回答

Stephen23
Stephen23 2015-11-5
编辑:Stephen23 2015-11-5
Currently the numeric class is uint8, which only supports maximum value of 2^8-1 = 255. You need to convert the numeric class to single, double or uint16 (or some other integer).
What you are currently doing:
>> X = uint8([230 100 150]);
>> X(1)+X(2)+X(3)
ans = 255
Option one use sum, which converts internally to double:
>> sum(X)
ans = 480
Option two convert explicitly to uint16 or double:
>> Y = uint16(X);
>> Y(1)+Y(2)+Y(3)
ans = 480
  1 个评论
Pedro Minsk
Pedro Minsk 2015-11-5
It's worked! I used the option one.
Thank you so much.

请先登录,再进行评论。

更多回答(1 个)

Image Analyst
Image Analyst 2015-11-5
I get the idea that you are going to do this on all pixels in the image and then threshold. There are vectorized ways, like
% Sum R+G+B for all pixels in the image:
sumImage = sum(double(rgbImage), 3);
% Get a mask where the sum is more than 725.
brightPixelsMask = sumImage > 725
% and so on.
  3 个评论
Stephen23
Stephen23 2015-11-6
Note that sum converts to double, so there is no need to call double:
sumImage = sum(rgbImage,3);
Image Analyst
Image Analyst 2015-11-6
You're right. I wonder why conv() or conv2() don't do that.

请先登录,再进行评论。

Community Treasure Hunt

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

Start Hunting!

Translated by