如何使用Matlab中所有像素的rgb值重建图像

时间:2014-06-05 16:24:47

标签: image matlab pixel

我正在尝试使用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值,我将如何重新创建此图像。

1 个答案:

答案 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循环中交换xy值,以便迭代所有y然后迭代所有x值 - 因为这是MATLAB存储数据的方式,您可以更改以上代码:

for ind = 1:3    
    recreatedImage(:,:, ind) =  ( reshape(rgbValues(:, ind), ny, nx));
end

(编辑),然后直接重塑也可以:

rgbValuesBacktoShape=reshape(rgbValues,[50,50,3]);