我想知道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
将输入数组显示为图像。当该输入是矩阵时,默认情况下 image
的 CDataMapping
属性设置为 'direct'
。这意味着输入的每个值都被直接解释为颜色图中颜色的索引,超出范围的值将被剪掉:
由于 Matlab 颜色图默认有
image(C)
[...] 当C
是二维M
xN
矩阵时,C
的元素用作当前colormap
的索引来确定颜色。这 图像对象的CDataMapping
属性的值决定了 用于选择颜色图条目的方法。对于'direct'
CDataMapping
(默认值),C
中的值被视为颜色图索引(如果是 double,则从 1 开始;如果 uint8 或 uint16,则从 0 开始)。
64 种颜色(编辑:自 R2019b 起,它们默认有 256 种颜色),在您的情况下,这会导致 64 以上的值被剪掉。这就是您在 image
图表中看到的内容。具体来说,在第一张图中,颜色图是默认的
parula
,有 64 种颜色;在第二张图中,
colormap('gray')
应用了 64 个灰度级的灰色颜色图。例如,如果您尝试在此图中使用
colormap(gray(256))
,则图像范围将与颜色数量匹配,并且您将获得与
imagesc
相同的结果。与
image
类似,但应用自动缩放,以便图像范围跨越整个色彩图:
具体而言,
imagesc(...)
与image(...)
相同,只是数据被缩放以使用完整颜色图。
imagesc
对应于
image
,且
CDataMapping
属性设置为
'scaled'
:
这就是为什么您看不到任何带有
image(C)
[...] 对于'scaled'
CDataMapping
,C
中的值首先根据轴CLim
进行缩放,然后将结果视为颜色图索引。
imagesc
的剪辑。