matlab中image与imagesc有什么区别

问题描述 投票:0回答:1

我想知道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个回答
5
投票

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

image(C)

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

由于 Matlab 颜色图默认有

64 种颜色(编辑:自 R2019b 起,它们默认有 256 种颜色),在您的情况下,这会导致 64 以上的值被剪掉。这就是您在 image

 图表中看到的内容。

具体来说,在第一张图中,颜色图是默认的

parula

,有 64 种颜色;在第二张图中,
colormap('gray')
 应用了 64 个灰度级的灰色颜色图。例如,如果您尝试在此图中使用 
colormap(gray(256))
,则图像范围将与颜色数量匹配,并且您将获得与 
imagesc
 相同的结果。

imagesc

image
 类似,但应用 
自动缩放,以便图像范围跨越整个色彩图:

imagesc(...)

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

具体而言,

imagesc

 对应于 
image
,且 
CDataMapping
 属性设置为 
'scaled'

image(C)

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

这就是为什么您看不到任何带有

imagesc

 的剪辑。

© www.soinside.com 2019 - 2024. All rights reserved.