matrix to rgb conversion
12 次查看(过去 30 天)
显示 更早的评论
When we write
i=imread('test.jpg');
if test.jpg is a colored image then it returns us i as a 3D matrix.
if we write
figure,imshow(i)
it shows the colored image test.jpg
but if we assign the values in i to another variable using the following syntax:
a=i(:,:,1); a=i(:,:,2); a=i(:,:,3);
then if i write
figure,imshow(a)
it does not return me the colored image as test.jpg
can any one say why this happen? How can i get the make a rgb image if i assign value to a 3D matrix manually how can i get the corresponding colored rgb image?
0 个评论
采纳的回答
Matt Fig
2011-3-29
The reason why you are having the problem is that when you call the ZEROS function, you are getting an array of doubles, whereas a jpg image is of type uint8.
I = imread('test.jpg');
figure
imshow(I)
a = zeros(size(I),'uint8'); % Or, a = zeros(size(I),class(I));
a(:,:,1) = I(:,:,1);
a(:,:,2) = I(:,:,2);
a(:,:,3) = I(:,:,3);
figure
imshow(a)
Note that the above is a horrible way to copy any data from one array to another. Simply use:
a = I; % Don't use variable name i!
更多回答(1 个)
Jan
2011-3-28
i = imread('test.jpg');
a = i(:,:,1);
% Now [a] is a 2D-Matrix containing the first
% submatrix of i.
a = i(:,:,2);
% Now [a] is a 2D-Matrix containing the second
% Submatrix of i. The former values are overwritten.
a = i(:,:,3);
% Now [a] is a 2D-Matrix containing the third
% Submatrix of i. The former values are overwritten.
Therefore [a] is a matrix at the end. To copy the 3D-Array:
a = cat(3, i(:,:,1), i(:,:,2), i(:,:,3));
% Or simpler:
a = i;
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!