Matlab的imwrite
允许我在将2D 'BitDepth',4
数组写入文件' *。png'时指定配对参数uint16
。我的Octave' imwrite
不接受配对参数'BitDepth',4
。但是,如果我缩放uint8
的数据并将其保存到2D uint8
数组,我可以对位深度进行一些有限的控制; ' *。png'从imwrite
开始,uint16
数组的文件大小只有imread
的一半。我想通过查看uint
来做到这一点,源图像文件的位深度决定了目标变量的uint
类型。假设源2D图像阵列的imwrite
类型类似地确定uint8
目标文件的位深度,imwrite
产生的位深度为8.我发现有点深度为2通常足以进行手动音符的100 dpi灰度扫描。 是否有一种简单的方法可以对uint16
进行任意位深度控制?
旁白:关于上面对rgb2gray
的引用,我并没有做到这一点。它是来自彩色RGB的转换的默认值。通过网络搜索,我找到了旧的Octave 4.0(无im=imread('rgb.jpeg');
[imInd,Ind]=rgb2ind(im);
imGray16=ind2gray(imInd,Ind); imwrite(imGray16,'gray16b.png');
imGray8=uint8(imGray16/256); imwrite(imGray8,'gray8b.png');
)的转换方法:
/std:c++latest /permissive-
我使用的是Octg安装,它是Cygwin的一部分。但是,我使用的笔记本电脑的用户权限有限,升级Octave需要非常大的时间。
答案 0 :(得分:3)
在回答您的问题时,您无法在致电BitDepth
时设置imwrite
。该函数将使用变量的数据类型编写图像(假设图像文件类型支持它)。
如果在编写文件时确实需要任意位深度控制,则需要直接与libpng交互,即编写自己的oct函数。
但是,您的评论还有一些内容:
从uint16转换的问题 - > uint8并且大小超过一半,我猜是因为图像被压缩了。
rgb2ind
默认情况下也不转换为uint16
。它会转换为uint8
或uint16
,具体取决于图片中唯一颜色的数量。
函数rgb2gray
是图像包的一部分。如果您想要该功能,请加载该包。