Image 八度音程4.0`imwrite`png:`BitDepth`4?
Matlab的Image 八度音程4.0`imwrite`png:`BitDepth`4?,image,octave,Image,Octave,Matlab的imwrite允许我在将2Duint16数组写入文件“*.png”时指定成对参数'BitDepth',4。我的八度音阶的imwrite不接受成对的参数'BitDepth',4。但是,如果我缩放uint8的数据并将其保存到2Duint8数组中,我可以对位深度进行一些有限的控制;然后,imwrite中的“*.png”刚好是uint16数组文件大小的一半以上。我是通过查看imread来实现这一点的,源图像文件的位深度决定了目标变量的uint类型。假设源2D图像数组的uint类型类似地确定
imwrite
允许我在将2Duint16
数组写入文件“*.png”时指定成对参数'BitDepth',4
。我的八度音阶的imwrite
不接受成对的参数'BitDepth',4
。但是,如果我缩放uint8
的数据并将其保存到2Duint8
数组中,我可以对位深度进行一些有限的控制;然后,imwrite
中的“*.png”刚好是uint16
数组文件大小的一半以上。我是通过查看imread
来实现这一点的,源图像文件的位深度决定了目标变量的uint
类型。假设源2D图像数组的uint
类型类似地确定imwrite
目标文件的位深度,uint8
产生8的位深度。然而,我发现,深度为2的一点通常足以对手写笔记进行100 dpi的灰度扫描对于imwrite
,有没有一种简单的方法可以实现这样的任意位深度控制?
旁白:关于上面提到的uint16
,我并不是瞎编的。这是从颜色RGB转换而来的默认值。通过网络搜索,我找到了旧的Octave 4.0的转换方法(norgb2gray
):
我使用的是Cygwin的八度音阶装置。但是,我使用的笔记本电脑的用户权限有限,升级Octave需要大量的时间。回答您的问题时,在调用
imwrite
时,您无法设置BitDepth
。函数将使用变量的数据类型写入一个映像(前提是映像文件类型支持它)
如果在编写文件时确实需要任意位深度控制,则需要直接与libpng交互,即编写自己的oct函数
然而,关于你的评论有几点:
rgb2ind
不转换为uint16
。它将根据图像中独特颜色的数量转换为uint8
或uint16
rgb2gray
是图像包的一部分。如果需要该函数,请加载该包在回答您的问题时,您无法在调用
imwrite
时设置BitDepth
。函数将使用变量的数据类型写入一个映像(前提是映像文件类型支持它)
如果在编写文件时确实需要任意位深度控制,则需要直接与libpng交互,即编写自己的oct函数
然而,关于你的评论有几点:
rgb2ind
不转换为uint16
。它将根据图像中独特颜色的数量转换为uint8
或uint16
rgb2gray
是图像包的一部分。如果需要该函数,请加载该包卡兰德鲁,我为之感到高兴。我不熟悉软件包(对Octave来说也是比较新的),但我在谷歌上搜索了一下安装程序。我收到错误“找不到mkoctfile命令,Octave安装不完整”。我没有构建Octave,它是从一个旧的Cygwin安装
哪个mkoctfile
给出了mkoctfile.m的完整路径,我可以通过管道less
。在某个时候(可能是将来),我将不得不更新我的Cygwin以查看问题是否仍然存在。@user36800是否有理由不使用Cygwin而改用MXE安装程序?我认为也有可能在没有管理员权限的情况下安装它,甚至还有一个便携式版本,你可以安装在一个外部的mediumI上。为了得到cygwin,我不得不移动天堂和地球。在我的店里,获得批准安装任何东西都是一件大事。在这一点上,批准cygwin更新CD比关注新事物更容易。但这是“好的”(在一定程度上是可以的),因为我非常熟悉linux环境及其所有的小便利。我不熟悉软件包(对Octave来说也是比较新的),但我在谷歌上搜索了一下安装程序。我收到错误“找不到mkoctfile命令,Octave安装不完整”。我没有构建Octave,它是从一个旧的Cygwin安装哪个mkoctfile
给出了mkoctfile.m的完整路径,我可以通过管道less
。在某个时候(可能是将来),我将不得不更新我的Cygwin以查看问题是否仍然存在。@user36800是否有理由不使用Cygwin而改用MXE安装程序?我认为也有可能在没有管理员权限的情况下安装它,甚至还有一个便携式版本,你可以安装在一个外部的mediumI上。为了得到cygwin,我不得不移动天堂和地球。在我的店里,获得批准安装任何东西都是一件大事。在这一点上,批准cygwin更新CD比关注新事物更容易。但这是“OK”(在一定程度上是OK的),因为我非常熟悉linux环境及其所有的小便利。
im=imread('rgb.jpeg');
[imInd,Ind]=rgb2ind(im);
imGray16=ind2gray(imInd,Ind); imwrite(imGray16,'gray16b.png');
imGray8=uint8(imGray16/256); imwrite(imGray8,'gray8b.png');