【问题标题】:Is it possible to add a custom channel on an image? [closed]是否可以在图像上添加自定义通道? [关闭]
【发布时间】:2015-11-11 17:20:02
【问题描述】:

我正在尝试制作具有自定义频道的自定义图像格式。本质上,我试图为每个像素存储一些元数据,但在同一个图像上。我知道每个像素有 4 个通道 a、a、r、g、b。我想知道是否可以执行 a,r,g,b,z 之类的操作,其中 z 是我可以设置和获取的一些新数字。

有人知道吗?

谢谢

【问题讨论】:

  • 那有什么用?
  • GeoTIFF 支持数以万计的波段/频道 - 尝试谷歌搜索 gdalGeoTIFF
  • 当然可以。为什么你不能?虽然也许我不理解这个问题,因为很明显你可以。
  • 我该怎么做呢?
  • 每个通道需要存储一个4字节的浮点数,还是8位整数或16位整数?整个图像是否需要比其宽度和高度以及通道数更多的元数据?您是否了解除您自己的软件之外的任何软件通常都无法使用该图像?

标签: image channel


【解决方案1】:

大多数程序,即 Photoshop、GIMP、ImageMagick 和 OSX Finder 将忽略 JPEG、PNG 或 GIF 图像末尾的无关数据,因此您可能会在此类文件的末尾添加一个或多个额外的数据通道 - 附带条件,当他们会立即丢失所有附加数据时,您不要让他们写文件。

因此,记住这一点,您可以使用 ImageMagick 生成额外的数据通道/波段,并将其附加到正常 RGBA 图像的末尾。所以,让我们创建一个红黄色渐变作为传统的 PNG 图像。您同样可以使用 JPEG 或 TIFF。

convert -size 256x256 gradient:red-yellow.png

在我的机器上是 935 字节。

现在创建一个相同大小和单个通道的棋盘图案,即灰度来模拟您的“额外通道”,并将其附加到 PNG 文件的末尾:

convert -size 256x256 pattern:checkerboard -depth 8 gray:- >> image.png

现在 PNG 文件为 66,471 字节,但仍可查看。所以,要提取你的额外通道,我们需要确定灰度图像是 256x256 字节,即 65,536 字节,然后从 66,471 中减去它得到 935 字节,这是我们二进制棋盘的偏移量。我们现在可以像这样读取它并将其制作成 PNG 或 JPEG:

convert -size 256x256+935 -depth 8 gray:image.png checkerboard.png

然后你拿出你的棋盘:

如果要为每个像素存储一个 4 字节的浮点数,而不是我使用的 8 位灰度,则需要使用

-define quantum:format=floating-point

-depth 32

请记住,在计算偏移量时,您的图像大小为 HxWx4 字节。

ImageMagick 已安装在大多数 Linux 发行版上,并且可用于 OSX(最好使用 homebrew)和来自 here 的 Windows。

是的,这是一个丑陋的 hack,但并不比原来的问题更丑:-)

【讨论】:

    猜你喜欢
    • 2019-11-10
    • 1970-01-01
    • 2018-12-14
    • 2016-11-13
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2019-03-23
    相关资源
    最近更新 更多