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;
댓글 수: 0
채택된 답변
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
>> sum(X)
ans = 480
Option two convert explicitly to uint16 or double:
>> Y = uint16(X);
>> Y(1)+Y(2)+Y(3)
ans = 480
추가 답변 (1개)
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
2015년 11월 6일
Note that sum converts to double, so there is no need to call double:
sumImage = sum(rgbImage,3);
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!