Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在matlab中读取灰度图像_Matlab - Fatal编程技术网

在matlab中读取灰度图像

在matlab中读取灰度图像,matlab,Matlab,我有灰度图像lena.bmp。我想在matlab中使用imread函数读取此图像。 当我使用下面的代码来读取和显示图像时,我的图像是黑色的 img = imread('lena.bmp'); imshow(img); 但是当我使用下面的代码时,我没有问题查看 [img map]= imread('lena.bmp'); imshow(img,map); 我的第一个代码似乎没有像rgb2gray函数生成的那样读取灰度模式下的图像 我的形象如下: 如何解决此问题?

我有灰度图像lena.bmp。我想在matlab中使用imread函数读取此图像。 当我使用下面的代码来读取和显示图像时,我的图像是黑色的

    img = imread('lena.bmp');
    imshow(img);
但是当我使用下面的代码时,我没有问题查看

    [img map]= imread('lena.bmp');
    imshow(img,map);
我的第一个代码似乎没有像rgb2gray函数生成的那样读取灰度模式下的图像

我的形象如下:


如何解决此问题?

您的图像是索引图像。这意味着它包含的整数值更像是标签,每个标签都映射到一种颜色,即rgb三元组。map变量表示该映射;例如,在第5行,您有对应于“标签”5的rgb三元组

要理解我的意思,请执行uniqueimg,您将看到img数组的值实际上是非常规则的。命令rgbplot可以以图形方式演示实际的彩色地图。在map变量上运行rgbplotmap,查看每个红、绿和蓝颜色的映射

现在,将下面的图像作为img2保存并读取到您的计算机上,然后比较数组值

此图像是通过使用照片编辑软件GIMP将链接到的索引图像转换为灰度图像生成的。区别在于 在灰度图像中,像素值表示实际强度,而不是整数“标签”。默认情况下,Imread将灰度图像读取为uint8图像,这意味着它将强度值指定给从0黑色到255白色的像素。因为这些值恰好是整数,所以您仍然可以欺骗它们,将它们视为“标签”,并强制对其进行颜色映射。但是,如果您指定一个“线性贴图”,即值1=强度1,值2=强度2,等等,那么您的图像将如您所期望的那样

您将看到uniqueimg2中的值非常不同。如果您显示img2,您将看到它如您所期望的那样显示。如果不为imshow指定颜色贴图,它将假定贴图是图像数组中从最低值到最高值的线性映射,这解释了为什么索引图像看起来很奇怪,因为它的值从来都不应该对应于强度

还可以尝试imagescimg2,它将显示这一点,但使用当前的颜色贴图。imagesc使colormap缩放,使最低颜色变为图像中的最低值,类似地,最高颜色也变为最低值。 默认的颜色映射是jet,所以你应该看到一个迷幻的图像,但你应该能够清楚地辨认出lena。如果您尝试colormap gray,您将再次看到灰色版本。还可以尝试colormap hot。现在,要理解颜色贴图,请尝试在其上使用rgbplot命令,例如rgbplotgray、rgbplotshot等

因此,回到imshow,imshow基本上允许您显示索引图像,并指定要使用什么颜色映射来显示它。如果不指定颜色贴图,它将只使用从最低值到最高值的线性插值作为贴图。因此,imshowimg将以与带有灰色彩色贴图的imagescimg几乎相同的方式显示图像。由于第一个img中的值代表的是均匀分布的“标签”,而不是实际的强度,因此你会得到一张垃圾图片

编辑:如果要将索引图像转换为灰度图像,matlab提供ind2gray函数,例如:

[img, map] = imread('lena.bmp');
img_gray = ind2gray(img, map);

如果要将像素值作为强度进行处理,这可能就是您所需要的。

您的图像是索引图像。这意味着它包含的整数值更像是标签,每个标签都映射到一种颜色,即rgb三元组。map变量表示该映射;例如,在第5行,您有对应于“标签”5的rgb三元组

要理解我的意思,请执行uniqueimg,您将看到img数组的值实际上是非常规则的。命令rgbplot可以以图形方式演示实际的彩色地图。在map变量上运行rgbplotmap,查看每个红、绿和蓝颜色的映射

现在,将下面的图像作为img2保存并读取到您的计算机上,然后比较数组值

此图像是通过使用照片编辑软件GIMP将链接到的索引图像转换为灰度图像生成的。区别在于 在灰度图像中,像素值表示实际强度,而不是整数“标签”。默认情况下,Imread将灰度图像读取为uint8图像,这意味着它将强度值指定给从0黑色到255白色的像素。因为这些值恰好是整数,所以您仍然可以欺骗它们,将它们视为“标签”,并强制对其进行颜色映射。但是,如果您指定一个“线性贴图”,即值1=强度1,值2=强度2,等等,那么您的图像将如您所期望的那样

您将看到uniqueimg2中的值非常不同。如果您显示img2,您将看到它如您所期望的那样显示。如果不为imshow指定颜色映射,它将 告诉我贴图是图像数组中从最低值到最高值的线性映射,这解释了为什么索引图像看起来很奇怪,因为它的值从来都不应该与强度对应

还可以尝试imagescimg2,它将显示这一点,但使用当前的颜色贴图。imagesc使colormap缩放,使最低颜色变为图像中的最低值,类似地,最高颜色也变为最低值。 默认的颜色映射是jet,所以你应该看到一个迷幻的图像,但你应该能够清楚地辨认出lena。如果您尝试colormap gray,您将再次看到灰色版本。还可以尝试colormap hot。现在,要理解颜色贴图,请尝试在其上使用rgbplot命令,例如rgbplotgray、rgbplotshot等

因此,回到imshow,imshow基本上允许您显示索引图像,并指定要使用什么颜色映射来显示它。如果不指定颜色贴图,它将只使用从最低值到最高值的线性插值作为贴图。因此,imshowimg将以与带有灰色彩色贴图的imagescimg几乎相同的方式显示图像。由于第一个img中的值代表的是均匀分布的“标签”,而不是实际的强度,因此你会得到一张垃圾图片

编辑:如果要将索引图像转换为灰度图像,matlab提供ind2gray函数,例如:

[img, map] = imread('lena.bmp');
img_gray = ind2gray(img, map);

如果要将像素值处理为强度,这可能就是您需要的。

作为输出的img矩阵的最大值和最小值是多少?作为输出的img矩阵的最大值和最小值是多少?