无法将索引(逻辑)图像转换为灰度图像

时间:2014-12-15 21:22:20

标签: image matlab image-processing

我有这张图片:

enter image description here

          Filename: '/bmp/ae07_001.bmp'
       FileModDate: '09-Apr-2014 19:21:20'
          FileSize: 7202
            Format: 'bmp'
     FormatVersion: 'Version 3 (Microsoft Windows 3.x)'
             Width: 449
            Height: 119
          BitDepth: 1
         ColorType: 'indexed'
   FormatSignature: 'BM'
NumColormapEntries: 2
          Colormap: [2x3 double]
           RedMask: []
         GreenMask: []
          BlueMask: []
   ImageDataOffset: 62
  BitmapHeaderSize: 40
         NumPlanes: 1
   CompressionType: 'none'
        BitmapSize: 7140
    HorzResolution: 2925
    VertResolution: 2925
     NumColorsUsed: 2
NumImportantColors: 2

因此它是逻辑格式的索引图像。

问题在于我无法读取它。例如,如果我使用简单命令

img = imread(file);

我明白了:

enter image description here

所以要正确阅读,我使用:

[img, map] = imread(file);
imshow(img, map);

这里它显示正常,但我不想显示它,我想进一步处理它所以我必须将它转换为灰度,我使用此命令:

new = ind2gray(img, map);

我在这里收到了警告:

  

警告:X应该是double,single,uint8或uint16数组。   使用IM2DOUBLE(X,'INDEXED')将图像转换为double。

如果我使用imshow(new),它只会显示为空白框,只是一张没有文字的白色图片。

我尝试了推荐的im2double(img, 'indexed'),然后使用ind2gray,但我再次看到一个白色的框,数据丢失。

为什么我无法将此图像转换为灰度?

1 个答案:

答案 0 :(得分:1)

如果您有二进制索引图像,并且当您将索引显示为强度图像时它是向后的,您只需要反转这些强度:

uint8(255*~imread(file))

double(~imread(file))