我正在尝试使用imread
读取图像,然后保存数组中所有像素的RGB值。最后,只能使用RGB值重新创建此图像。
这是for循环,用于保存每个像素的所有RGB值。
A=imread('image.jpg');
N=2500; %the image dimensions are 50x50
i=1;
rgbValues = zeros(N, 3);
for x = 1:50
for y = 1:50
rgbValues(i,:) = A(x,y,:);
i=i+1;
end
end
现在,如果我保存了所有rgb值,我将如何重新创建此图像。
答案 0 :(得分:1)
直接的方法是:
ny = 50;
nx = 50;
recreatedImage = zeros(ny,nx,3, 'uint8');
for ind = 1:3
recreatedImage(:,:, ind) = ( reshape(rgbValues(:, ind), nx, ny))';
end
正如纳坦所指出的那样,重塑也会奏效,但你必须这样做:
recreatedImage=reshape(rgbValues,[ny,nx,3]);
不幸的是,这是转置的,所以你需要工作才能让它重新旋转。
您可以考虑在for循环中交换x
和y
值,以便迭代所有y然后迭代所有x值 - 因为这是MATLAB存储数据的方式,您可以更改以上代码:
for ind = 1:3
recreatedImage(:,:, ind) = ( reshape(rgbValues(:, ind), ny, nx));
end
(编辑),然后直接重塑也可以:
rgbValuesBacktoShape=reshape(rgbValues,[50,50,3]);