如何在Julia中导入整数TIF文件

月亮

我有一幅tif图像,其像素是整数。我想将其导入到Julia中并进行进一步处理。我在IJulia中使用过:

using FileIO
using Images
using ImageView
path_seed = joinpath(@__DIR__,"seed.tif")
seed = load(path_seed);

当我进入seed并进入时,当我想要元素矩阵时,我会得到一张图像。如果我使用:

mat = convert(Array{Float32}, seed)

我将得到一个矩阵,但是有两个问题:

1-它的条目都是浮点数,但不是整数。

2- float的值与我期望的整数值不对应。例如,在我的图像中,值为0、1、2、3、4(图像为蒙版,每个连接的组件的值为0、1、2、3、4),但浮点数为0.0、0.011764707、0.015686275 ,0.007843138、0.003921569。

如何将图像导入为整数矩阵?这是示例图片:

http://s000.tinyupload.com/index.php?file_id=21432720633236092551

智者

加载该文件时,您会看到JuliaImages的两个关键抽象的效果:

  • 每个像素都是数组中的单个条目(不是,例如,如果是RGB图像则为3个条目)
  • 数字代表他们说的是什么。尤其是255≠1.0。

加载seed.tif图像时,您会注意到返回值的类型为Gray{N0f8}Gray部分意味着它已被解释为灰度图像-如果它是彩色图像,则它们可能是类似的元素RGB{N0f8}(1.0, 0.8, 0.4)无论哪种情况,访问都会img[i,j]返回有关该整个像素的所有信息

您可能最关心的部分是N0f8在大多数图像处理框架中,数字的含义取决于其表示形式(例如https://scikit-image.org/docs/stable/user_guide/data_types.html)。如果您的数字编码为UInt8则“白色”为255 ,但是如果您的数字编码为,则白色为1.0 Float32要更改表示形式时,必须记住使用特殊的转换功能,这些功能也会更改像素的值。在其他任何数学领域,我都没有意识到255 == 1.0。

为了停止鼓励不良数学,JuliaImages忙于定义新的数字类型以协调这些概念。在JuliaImages中,白色始终为1。但是,为了支持8位图像,我们定义了一个新的数字类型N0f8,其8位最大值为1。它们在内部表示的方式与一样UInt8,它们被解释为好像已被划分了一样。乘以255。类似地,还有N0f1616位图像,甚至像N4f12这样的特殊类型也很有用,例如,如果您要使用12位相机收集图像。这意味着可以简单地通过查找值为1的像素来检测图像饱和度。

当然,有时您可能希望以不同的方式看待事物。JuliaImages支持多个“视图”,它们为相同的按位数据提供了另一种解释。就你而言

rawview(channelview(seed))

将返回UInt8可能是您期望的数组

但是请注意,如果要保存一个不应该真正解释为图像的整数数组,则可能有更好的格式,例如HDF5。图像格式有时会受到压缩,从而损坏您保存的值。TIFF通常被称为无损压缩,但实际上可以使用有损压缩(https://en.wikipedia.org/wiki/TIFF)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章