我想知道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');
答案 0 :(得分:2)
image
将输入数组显示为图像。当该输入是矩阵时,默认情况下image
将CDataMapping
属性设置为'direct'
。这意味着输入的每个值都直接解释为colormap 中颜色的索引,并且超出了范围值:
image(C)
[...]当C
是二维M
xN
矩阵时,C
的元素将用作索引当前colormap
来确定颜色。该 图像对象的CDataMapping
属性的值决定了 用于选择色彩映射条目的方法。对于'direct'
CDataMapping
(默认值),C
中的值被视为色彩映射索引(如果为double,则为1,如果为uint8或uint16,则为0)。
由于Matlab色彩映射默认情况下 64种颜色,在您的情况下,这会产生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
的任何剪辑。