相同的图像数据看起来与同一个色彩图不同

时间:2014-02-09 13:44:39

标签: matlab gif color-mapping

在尝试编写移动图像的功能时,我遇到了复制到新图像时图像看起来不同的问题。首先,我创建一个新图像,每边大3倍。然后我复制第一张图像,移动。但随后图像看起来不同。如果我切换到jet colormap,两个图像看起来都一样。这是什么原因?

我正在使用的代码:

% function newImage = shiftImage(Image,x_shift,y_shift)

[Image, map] = imread('sun.gif'); %availible at http://i.imgur.com/e24QOsX.gif
I = Image(:,:,:,1); %frame 1
I1 = Image(:,:,:,2); %frame 2
I2 = Image(:,:,:,3); %frame 3

x_shift = 100;
y_shift = 150;

h = size(I,1);
w = size(I,2);

newI = zeros(3*size(I));

newI((h+y_shift):(2*h+y_shift-1),(w+x_shift):(2*w+x_shift-1)) = I; % copies I to a region of newI

figure(1); clf;
subplot(2,1,1); imshow(I,map); % shows first frame
subplot(2,1,2); imshow(newI((h+y_shift):(2*h+y_shift-1),(w+x_shift):(2*w+x_shift-1)),map);
% shows region in newI which is equal to I

% colormap(jet) % if I set the colormap to jet, both look the same
% colormap(map) % but if I use colormap from the gif, they look different

all(all( newI((h+y_shift):(2*h+y_shift-1),(w+x_shift):(2*w+x_shift-1)) == I ))  
% compares if all cells from I and region in newI which is supposed to be I
% are identical; they are

figure(2); clf; imshow(newI,map); % how the whole newI looks

1 个答案:

答案 0 :(得分:2)

地图是在uint8空间定义的地图,您的图片Iuint8并正确显示。 newI类型为double,我认为地图重复2 ^ 24次以匹配32位颜色,无论其“破碎”。

newI转换为uint8,一切正常:newI=uint8(newI)