我有这张图片:
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);
我明白了:
所以要正确阅读,我使用:
[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
,但我再次看到一个白色的框,数据丢失。
为什么我无法将此图像转换为灰度?
答案 0 :(得分:1)
如果您有二进制索引图像,并且当您将索引显示为强度图像时它是向后的,您只需要反转这些强度:
uint8(255*~imread(file))
或
double(~imread(file))