【问题标题】:what is the difference between image vs imagesc in matlabmatlab中的image和imagesc有什么区别
【发布时间】:2016-02-20 22:54:41
【问题描述】:

想知道matlab中imagesc和image的区别

我用这个例子试图找出两者之间的差异,但我自己无法解释输出图像的差异;你能帮我吗?

I = rand(256,256);
for i=1:256

for j=1:256
    I(i,j) = j;


 end
end
figure('Name','Comparison between image et imagesc')
subplot(2,1,1);image(I);title('using image(I)');
subplot(2,1,2);imagesc(I);title('using imagesc(I)');
figure('Name','gray level of image');
image(I);colormap('gray');
figure('Name','gray level of imagesc');
 imagesc(I);colormap('gray');

【问题讨论】:

  • 你看过文档吗?有什么具体的你不明白吗?

标签: image matlab image-scaling imshow


【解决方案1】:

image 将输入数组显示为图像。当该输入为矩阵时,默认情况下imageCDataMapping 属性设置为'direct'。这意味着输入的每个值都被直接解释为 颜色图中颜色的索引,超出范围的值将被剪裁:

image(C) [...] 当C 是二维MxN 矩阵时,C 的元素用作当前colormap 的索引以确定颜色。这 图像对象的CDataMapping 属性的值确定 用于选择颜色表条目的方法。对于 'direct' CDataMapping(默认值),C 中的值被视为颜色图索引(如果为双精度则基于 1,如果为 uint8 或 uint16,则基于 0)。

由于 Matlab 颜色图默认具有 64 种颜色,在您的情况下,这会导致 64 以上的值被剪裁。这就是您在 image 图表中看到的内容。

具体来说,第一张图中的颜色图是默认的parula,有64种颜色;在第二个图中colormap('gray') 应用了 64 个灰度级的灰度颜色图。例如,如果您尝试此图中的colormap(gray(256)),图像范围将匹配颜色数量,您将获得与imagesc 相同的结果。

imagesc 类似于image,但应用了自动缩放,因此图像范围跨越了整个颜色图:

imagesc(...)image(...) 相同,只是数据被缩放以使用完整的颜色图。

具体来说,imagesc 对应于 imageCDataMapping 属性设置为 'scaled'

image(C) [...] 对于'scaled' CDataMappingC 中的值首先根据坐标轴 CLim 进行缩放,然后将结果视为颜色图索引。

这就是您看不到imagesc 的任何剪辑的原因。

【讨论】:

  • 好吧,我能说什么,非常感谢您的明确回复!你解释得很好!
  • @YassineBakkar 很高兴我能帮上忙!
猜你喜欢
  • 2018-03-23
  • 2011-01-06
  • 2013-03-26
  • 1970-01-01
  • 2020-03-23
  • 2021-08-04
  • 1970-01-01
  • 2022-07-21
  • 2012-12-20
相关资源
最近更新 更多