matlab - 如何更改 Matlab 代码以便 imshow() 函数显示正确的颜色?
问题描述
我编写了一个简单的 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);
我真的很感激这里的一些帮助。正如我已经提到的: - 如果翻译是负的,那么颜色是正确的 - 当我查看一个小图像(例如,10x10)的张量时,它被移动了 2 个像素,那么我可以看到前两个列是 0以下列包含它们应包含的值。所以我猜这是 imshow() 的问题
编辑(附加评论):输出图片的 RGB 值只有 0 或 255 值,但两者之间没有。
解决方案
所以我玩了一会儿代码,发现如果我不手动0
将子句放入else
子句,而是像这样从图片张量中取出它:
else
picture_out(j+1,k+1,h+1)=picture_in(1,1,1);
然后一切正常。深入挖掘我发现我可以手动输入值,但我需要将它们作为uint8()
变量放入。
最后,如果我像这样更改else
子句,代码将起作用:
else
picture_out(j+1,k+1,h+1)=uint8(0);
推荐阅读
- rust - 如何解决涉及从 Rust 中的结构获取值的引用的不匹配类型错误
- typescript - Asciidoc.js - 从已解析的文档中获取 AsciiDoc 源
- java - void 方法返回什么?
- flutter - 即使在飞镖中有下划线,如何制作公共财产?
- firebase - 在 DNS 更改几周后,Zombie PWA 仍然获得流量
- applet - 在智能卡上下载 HCI 小程序有什么问题?
- docker - 带有 Python 包的 Ubuntu 的 Docker 映像大小将达到 1.7 G
- three.js - 自定义几何变换扭曲材质
- git - git clean 删除未跟踪的子模块
- python - 保存循环而不覆盖数据