matlab - 如何将图像写入文件

标签 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) 编写图像,即 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/

相关文章:

image - 使用 Imagemagick,如何裁剪白色背景?

algorithm - 从 Photoshop 模拟高光恢复工具

oop - 我可以在 MATLAB 中为类属性分配类型吗?

matlab - 如何在MATLAB中提取传递函数的符号系数

c - 在 Matlab 的 c 代码中设置 #define

python-3.x - Python OpenCV - 如何保存 5 channel 图像

python - 从图像轮廓或边缘检测弧

matlab - 如何获得 unique() 的二进制输出?

matlab - 为什么我的 matlab 程序占用这么多内存?

python - 在 python 中读取卫星图像文件时优化性能