How to separate RGB values of an image.

We know that each pixel i in the input image I has rgb colors. My question is how to store them in a 3-vector Ii. Each color is being represented using a 64-bit floating-point number scaled to between 0 and 1.

 Akzeptierte Antwort

Jim Dowd
Jim Dowd am 1 Feb. 2011

1 Stimme

Sean de has told you how to get each plane, but it sounds like you want some kind of vector. I am not sure what you mean by a 3 vector, but here are a couple of guesses.
If you want 3 vectors:
R = reshape(I(:,:,1),[],1);
G = reshape(I(:,:,2),[],1);
B = reshape(I(:,:,3),[],1);
Now if you want them all together in a 3 column vector:
V3 = reshape(A(:),[],3) % R is first col, G is second col, B is third.

3 Kommentare

Niranjan
Niranjan am 2 Feb. 2011
This is the information I received. "Each pixel i in the input image I has rgb colors. So we store them in a 3-vector Ii. Each color is represented
using a 64-bit floating-point number scaled to between 0 and 1." Now can you tell me what this actually means and the solution for this??Thanks in advance
Vespi
Vespi am 6 Mär. 2016
I extracted RGB values of my image using this code. I now have a .txt file with 3 columns. I was wondering how MatLab reads the image so that I can assign the pixel number corresponding to each RGB value in my .txt file.
MATLAB goes "down columns" in constructing the above. So if there were, for example, 5 rows of pixels in the image, the order in the file would be
(1,1)
(2,1)
(3,1)
(4,1)
(5,1)
(1,2)
(2,2)
(3,2)
(4,2)
(5,2)
(1,3)
(2,3)
...

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (3)

Sailesh Sidhwani
Sailesh Sidhwani am 25 Okt. 2018
Bearbeitet: Sailesh Sidhwani am 3 Sep. 2020

1 Stimme

Starting R2018b, Image Processing Toolbox has a new function "imsplit" which does exactly this: https://www.mathworks.com/help/images/ref/imsplit.html
Sean de Wolski
Sean de Wolski am 1 Feb. 2011

0 Stimmen

Rchannel = I(:,:,1);
Gchannel = I(:,:,2);
Bchannel = I(:,:,3);

2 Kommentare

Abinaya
Abinaya am 6 Mai 2014
can you pls explain that 1 2 3 in each channel.
Walter Roberson
Walter Roberson am 25 Okt. 2018
It is by definition: MATLAB interprets the first pane of the third dimension as being red values, the second pane of the third dimension as being green values, the third pane of the third dimension as being blue values.
That particular ordering is arbitrary: there is no reason why it could not have been Green, Red, Blue for example, which would have made some sense in terms of the sensitivity of the human eye to brightness in daylight. Or it could have been Blue that was first, reflecting the fact that the human eye is most sensitive to contrast in the blues. But for whatever reason, RGB was the order standardized on.

Melden Sie sich an, um zu kommentieren.

Sean de Wolski
Sean de Wolski am 1 Feb. 2011

0 Stimmen

You could also do it so you have a cell array with each index being a 3x1 vector, perhaps:
I2 = cellfun(@squeeze,num2cell(I,3),'uni',false);

Kategorien

Community Treasure Hunt

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

Start Hunting!

Translated by