在尝试编写移动图像的功能时,我遇到了复制到新图像时图像看起来不同的问题。首先,我创建一个新图像,每边大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
答案 0 :(得分:2)
地图是在uint8
空间定义的地图,您的图片I
为uint8
并正确显示。 newI
类型为double
,我认为地图重复2 ^ 24次以匹配32位颜色,无论其“破碎”。
将newI
转换为uint8
,一切正常:newI=uint8(newI)