我特别卡在这种情况下
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)
编写图像,即 block ,那么整个图像看起来都是黑色的。对于任何输入图像都会发生这种情况。但我想准确地写出 imshow 在这里显示的输出。谁能帮忙?
最佳答案
您将 block 创建为 uint8 矩阵。按照惯例,MATLAB 和图像处理工具箱将 uint8 灰度视为具有从 0 到 255 的值范围。也就是说,0 是黑色,255 是白色。因此,仅包含 0 和 1 的 block 矩阵通常会显示为黑色和近乎黑色。
当您使用以下方式显示 block 时:
imshow(blocks,[])
您使用了 imshow 的“自动调整范围”语法,它将 block 的最小值显示为黑色, block 的最大值显示为白色。
但是当您使用 imwrite 保存 block 时,它会正常假设 0 为黑色,255 为白色。
尝试将 block 初始化为逻辑矩阵,如下所示:
blocks = logical(size(S));
MATLAB 和图像处理工具箱将逻辑矩阵视为二进制图像,并将 0 显示为黑色,将 1 显示为白色。如果将逻辑矩阵传递给 imwrite,它将创建一个 1 位深度的二进制图像文件。
关于matlab - 如何将图像写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1897947/