【发布时间】:2018-10-23 15:51:53
【问题描述】:
Matlab 的imwrite 允许我在将二维uint16 数组写入文件“*.png”时指定配对参数'BitDepth',4。我的 Octave 的 imwrite 不接受配对参数 'BitDepth',4。但是,如果我缩放uint8 的数据并将其保存到二维uint8 数组,我可以对位深度进行一些有限的控制;来自imwrite 的'*.png' 是uint16 数组的文件大小的一半多一点。我通过查看imread 得到了这样做的想法,源图像文件的位深度决定了目标变量的uint 类型。假设源二维图像数组的uint 类型同样决定了imwrite 目标文件的位深度,uint8 产生的位深度为 8。然而,我发现位深度为 2 通常就足够了用于手笔记的 100 dpi 灰度扫描。 有没有简单的方法来控制imwrite 的任意位深度?
旁白:关于上面提到的uint16,我不是随便编的。这是从颜色 RGB 转换的默认值。通过网络搜索,我找到了旧 Octave 4.0(没有 rgb2gray)的转换方法:
im=imread('rgb.jpeg');
[imInd,Ind]=rgb2ind(im);
imGray16=ind2gray(imInd,Ind); imwrite(imGray16,'gray16b.png');
imGray8=uint8(imGray16/256); imwrite(imGray8,'gray8b.png');
我正在使用属于 Cygwin 的 Octave 安装。但是,我使用的笔记本电脑的用户权限有限,升级 Octave 需要大量时间。
【问题讨论】: