Image 八度音程4.0`imwrite`png:`BitDepth`4?

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类型类似地确定

Matlab的
imwrite
允许我在将2D
uint16
数组写入文件“*.png”时指定成对参数
'BitDepth',4
。我的八度音阶的
imwrite
不接受成对的参数
'BitDepth',4
。但是,如果我缩放
uint8
的数据并将其保存到2D
uint8
数组中,我可以对位深度进行一些有限的控制;然后,
imwrite
中的“*.png”刚好是
uint16
数组文件大小的一半以上。我是通过查看
imread
来实现这一点的,源图像文件的位深度决定了目标变量的
uint
类型。假设源2D图像数组的
uint
类型类似地确定
imwrite
目标文件的位深度,
uint8
产生8的位深度。然而,我发现,深度为2的一点通常足以对手写笔记进行100 dpi的灰度扫描对于
imwrite
,有没有一种简单的方法可以实现这样的任意位深度控制?

旁白:关于上面提到的
uint16
,我并不是瞎编的。这是从颜色RGB转换而来的默认值。通过网络搜索,我找到了旧的Octave 4.0的转换方法(no
rgb2gray
):


我使用的是Cygwin的八度音阶装置。但是,我使用的笔记本电脑的用户权限有限,升级Octave需要大量的时间。

回答您的问题时,在调用
imwrite
时,您无法设置
BitDepth
。函数将使用变量的数据类型写入一个映像(前提是映像文件类型支持它)

如果在编写文件时确实需要任意位深度控制,则需要直接与libpng交互,即编写自己的oct函数

然而,关于你的评论有几点:

  • 我猜,从uint16->uint8转换并获得超过一半大小的问题是因为图像被压缩了

  • 默认情况下,
    rgb2ind
    不转换为
    uint16
    。它将根据图像中独特颜色的数量转换为
    uint8
    uint16

  • 功能
    rgb2gray
    是图像包的一部分。如果需要该函数,请加载该包


  • 在回答您的问题时,您无法在调用
    imwrite
    时设置
    BitDepth
    。函数将使用变量的数据类型写入一个映像(前提是映像文件类型支持它)

    如果在编写文件时确实需要任意位深度控制,则需要直接与libpng交互,即编写自己的oct函数

    然而,关于你的评论有几点:

  • 我猜,从uint16->uint8转换并获得超过一半大小的问题是因为图像被压缩了

  • 默认情况下,
    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');