【发布时间】:2019-09-10 05:25:32
【问题描述】:
我编写了一个简单的 Matlab 代码,它加载图像并在 x 轴和 y 轴上进行平移。如果图像应该在 x 轴上平移 10 个像素,我用 0 填充前 10 列,将所有列向右移动 10 个单位,并将图片的右侧切割 10 个像素。当我输入正 x 值时,加载的图片不再显示正确的颜色(它显示负值),尽管当我将 RGB 值打印到屏幕上时它们是正确的!
我已经在互联网上读到,imshow() 做了某种缩放,但这并没有真正帮助我。
代码如下:
clear;
clc;
picture_in = imread('landscape.jpg'); %load picture
[P,Q,RGB]=size(picture_in); %obtain size of dimension
%Translation
tx=2;
ty=0;
k=0;
j=0;
h=0;
while k<Q
j=0;
while j<P
h=0;
while h<RGB
if (round(k+1-tx)>0)&&(round(k+1-tx)<=Q)&&(round(j+1+ty)>0)&&(round(j+1+ty)<=P)
picture_out(j+1,k+1,h+1)=picture_in(round(j+1+ty),round(k+1-tx),h+1);
else
picture_out(j+1,k+1,h+1)=0;
end
h=h+1;
end
j=j+1;
end
k=k+1;
end
picture_out;
imagesc(picture_out);
我真的很感谢这里的一些帮助。正如我已经提到的: - 如果翻译是否定的,那么颜色是正确的 - 当我查看移动了 2 个像素的小图像(例如 10x10)的张量时,我可以看到前两个列是 0,后面的列包含它们应该包含的值。 所以我猜是imshow()的问题
编辑(附加注释):输出图片的 RGB 值只有 0 或 255 值,但两者之间没有。
【问题讨论】:
标签: matlab image-processing imshow