如何将图像写入文件

时间:2009-12-13 22:05:30

标签: matlab image-processing

我特别陷入这种情况

I = imread('liftingbody.png');
S = qtdecomp(I,.27);
blocks = repmat(uint8(0),size(S));
for dim = [512 256 128 64 32 16 8 4 2 1];
    numblocks = length(find(S==dim));
    if (numblocks > 0)
        values = repmat(uint8(1),[dim dim numblocks]);
        values(2:dim,2:dim,:) = 0;
        blocks = qtsetblk(blocks,S,dim,values);
    end
end
blocks(end,1:end) = 1;
blocks(1:end,end) = 1;
imshow(I), figure, imshow(blocks,[])

(上面的例子来自MATLAB的帮助)

如果我尝试使用imwrite(blocks)来编写图像即块,则整个图像看起来是黑色的。这适用于任何输入图像。但我想准确写出imshow在这里显示的输出。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:7)

您创建了块作为uint8矩阵。按照惯例,MATLAB和图像处理工具箱将uint8灰度视为具有0到255之间的值范围。即,0为黑色,255为白色。因此,您的块矩阵(仅包含0和1)通常会显示为黑色且几乎为黑色。

使用以下方式显示块时

imshow(blocks,[])

您使用了imshow的“自动量程”语法,它将块的最小值显示为黑色,将块的最大值显示为白色。

但是当你使用imwrite保存块时,它正常假设0为黑色,255为白色。

尝试将块初始化为逻辑矩阵,如下所示:

blocks = logical(size(S));

MATLAB和图像处理工具箱将逻辑矩阵视为二进制图像,将0显示为黑色,1和白色显示。如果您将逻辑矩阵传递给imwrite,它将创建一个1位深度的二进制图像文件。

答案 1 :(得分:0)

通用答案是将图像规范化为imwrite(blocks)的范围:

imwrite((blocks-min(blocks))/(max(blocks)-min(blocks)))