Improve Speed to Convert an RGB Image Stored as a Linear Array to a Matrix
3 次查看(过去 30 天)
显示 更早的评论
I have an RGB image stored as a vector 921,000 bytes long (640x480x3 uint8) in a sequence as follows:
[B(1,1) G(1,1) R(1,1) B(1,2) G(1,2) R(1,2) B(1,3) G(1,3) R(1,3) ... B(480,640) G(480,640) R(480,640)]
I used a FOR loop to convert it to a matrix as shown below. I would like to speed-up this conversion. Any suggestions?
r = zeros(480,640,'uint8');
g = r;
b = r;
a = my_image_obj.Bytes.uint8;
for y = 1:480
f = 1920*(y-1);
for x = 1:640
s = 3*x-2+f;
b(y,x) = a(s);
g(y,x) = a(s+1);
r(y,x) = a(s+2);
end
end
my_image(:,:,1) = r;
my_image(:,:,2) = g;
my_image(:,:,3) = b;
0 个评论
回答(2 个)
Tim Zaman
2011-4-6
to reshape to [B(11) G(11) B(11) ; ... ] so that it is now [3x307000] the first column is now B, second G, third B.
Now, use reshape again to reshape to a square size. (almost) never use for loops!
2 个评论
Sean de Wolski
2011-4-6
A one-liner
my_image = reshape(fliplr(reshape(a,3,numel(a)/3).'),[640 480 3])
3 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!