matlab中图像与imagesc之间的区别是什么

时间:2015-11-19 00:13:26

标签: image matlab image-scaling imshow

我想知道imagesc& matlab中的图像

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

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');

1 个答案:

答案 0 :(得分:2)

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

  

image(C) [...]当C是二维M x N矩阵时,C的元素将用作索引当前colormap来确定颜色。该       图像对象的CDataMapping属性的值决定了       用于选择色彩映射条目的方法。对于'direct' CDataMapping(默认值),C中的值被视为色彩映射索引(如果为double,则为1,如果为uint8或uint16,则为0)。

由于Matlab色彩映射默认情况下 64种颜色,在您的情况下,这会产生64以上的值被剪裁的效果。这是您在image图表中看到的内容。

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

imagescimage类似,但应用自动缩放,以便图片范围涵盖整个色彩映射:

  

imagesc(...)image(...)相同,只是缩放数据以使用完整的色彩映射。

具体而言,imagesc对应imageCDataMapping属性设置为'scaled'

  

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

这就是为什么你看不到imagesc的任何剪辑。