显示图像

时间:2013-04-25 09:47:32

标签: image matlab show

我来到matlab代码,首先读取图片并将其转换为double,如下所示:

I = double(imread(img));

之后,它显示如下图像:

imshow(I/max(I(:)))

这是什么意思?特别是当我删除max部分时,我只得到一张白色背景的图像。这种划分的目标是什么?并且,为什么它在完成时正确显示图像,如果直接显示读取的图像而没有按最大值划分,则不能正确显示图像?

感谢。

3 个答案:

答案 0 :(得分:3)

表达式:

I/max(I(:))

将像素值标准化为0..1.0范围。它通过将所有像素值除以最大值来实现。

答案 1 :(得分:2)

max(I(:))似乎是一个标准化步骤

documentation开始,imshow需要一个输入矩阵,其值介于0和1.0之间

  

imshow(I)在HandleGraphics®图中显示我的图像   是灰度,RGB(真彩色)或二进制图像。对于二进制图像,   imshow显示值为0(零)为黑色且1为的像素   白。

答案 2 :(得分:0)

I是2D或3D矩阵(取决于灰度或颜色)。 I(:)是一个向量,矩阵的所有值都写在一列中,就像它们被安排在内存中一样;你也可以reshape做。请在Matlab documentation中阅读更多关于冒号运算符的内容,这是Matlab的绝对基本概念。

max为您提供矢量的最大值,即max(I(:))为您提供整个图像的最大值。

图像范围从0开始是不成文的法律。因此,您可以将图像的值除以[0,1],将其映射到max(I(:))。在Matlab中,它是这样完成的:myMatrix/myScalar

因此I/max(I(:))会为您提供[0,1]中包含值的图片,您想要使用imshow显示的双图片需要什么。

请注意:

(1)你可以写imshow(I,[])代替它,它会向你显示图像的值被拉伸到[0,1](与你的版本不同,最小值也被映射到0)。

(2)在我的视图中,您应该映射图像的值以便仅在特殊情况下进行可视化。它可以给你错误的图像印象(例如,非常暗的图像将被视为完整的对比图像)。尽量选择最大的原始值范围(通常为255,4095或65535)。例如:

img = imread('some12bit.png');
img = double(img);
img = img / 4095; % [0,4095] -> [0,1]
imshow(img);

(3)如果不将图像映射到[0,1],则所有值> 1都将被解释为1。这就是为什么您的图像显示为白色图像而不将其映射到[0,1]之前的原因。