Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 如何在Julia中导入整数tif文件_Image Processing_Julia_Ijulia Notebook - Fatal编程技术网

Image processing 如何在Julia中导入整数tif文件

Image processing 如何在Julia中导入整数tif文件,image-processing,julia,ijulia-notebook,Image Processing,Julia,Ijulia Notebook,我有一个tif图像,其中的像素是整数。我想把它导入Julia并进一步处理。 我在IJulia中使用: using FileIO using Images using ImageView path_seed = joinpath(@__DIR__,"seed.tif") seed = load(path_seed); 当我输入seed和enter时,我将得到一个图像,而我需要元素矩阵。 如果我使用: mat = convert(Array{Float32}, seed) 我会得到一个矩阵,但有

我有一个tif图像,其中的像素是整数。我想把它导入Julia并进一步处理。 我在IJulia中使用:

using FileIO
using Images
using ImageView
path_seed = joinpath(@__DIR__,"seed.tif")
seed = load(path_seed);
当我输入seed和enter时,我将得到一个图像,而我需要元素矩阵。 如果我使用:

mat = convert(Array{Float32}, seed)
我会得到一个矩阵,但有两个问题:

1-其条目均为浮点,但不是整数

2-浮点值与我期望的整数值不对应。例如,在我的图像中有值0,1,2,3,4。图像是一个遮罩,每个连接的组件的值为0,1,2,3,4,但我得到的浮点值为0.0、0.011764707、0.015686275、0.007843138、0.003921569

如何将图像作为整数矩阵导入?以下是示例图像:


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

每个像素都是一个数组中的单个条目,例如,如果是RGB图像,则为3个条目 数字意味着他们所说的。特别是,255≠ 1.0. 加载seed.tif图像时,您会注意到返回值的类型为灰色{N0f8}。灰色部分意味着它被解释为灰度图像——如果它是彩色图像,它们可能是RGB{N0f8}1.0、0.8、0.4之类的元素。在任何一种情况下,访问img[i,j]都会返回关于整个像素的所有信息

您可能最关心的部分是N0f8。在大多数图像处理框架中,数字的含义取决于其表示形式,例如。如果数字编码为UInt8,则白色为255;如果数字编码为Float32,则白色为1.0。当您想要更改表示时,必须记住使用特殊的转换函数,这些函数也会更改像素的值。在数学的任何其他领域,我都不知道等式255==1.0

为了停止鼓励糟糕的数学,Juliamiages不厌其烦地定义了新的数字类型,以协调这些概念。在青少年时期,白色总是1。但是为了支持8位图像,我们定义了一个新的数字类型,N0f8,其中8位的最大值为1。它们的内部表示方式与UInt8类似,它们被解释为被255除。类似地,N0f16适用于16位图像,甚至N4f12等特殊类型也很有用,例如,如果您使用12位相机采集图像。这意味着可以通过查找值为1的像素来检测图像饱和

当然,有时候你可能想换个角度看问题。JuliaImages支持几种对相同位数据提供替代解释的方法。就你而言

rawview(channelview(seed))
将返回一个UInt8值数组,这可能是您所期望的


但是,请注意,如果要保存不应真正解释为图像的整数数组,可能有更好的格式,如HDF5。图像格式有时会受到压缩,从而损坏保存的值。TIFF通常被称为无损压缩,但事实上,使用有损压缩是可能的

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

每个像素都是一个数组中的单个条目,例如,如果是RGB图像,则为3个条目 数字意味着他们所说的。特别是,255≠ 1.0. 加载seed.tif图像时,您会注意到返回值的类型为灰色{N0f8}。灰色部分意味着它被解释为灰度图像——如果它是彩色图像,它们可能是RGB{N0f8}1.0、0.8、0.4之类的元素。在任何一种情况下,访问img[i,j]都会返回关于整个像素的所有信息

您可能最关心的部分是N0f8。在大多数图像处理框架中,数字的含义取决于其表示形式,例如。如果数字编码为UInt8,则白色为255;如果数字编码为Float32,则白色为1.0。当您想要更改表示时,必须记住使用特殊的转换函数,这些函数也会更改像素的值。在数学的任何其他领域,我都不知道等式255==1.0

为了停止鼓励糟糕的数学,Juliamiages不厌其烦地定义了新的数字类型,以协调这些概念。在青少年时期,白色总是1。但是为了支持8位图像,我们定义了一个新的数字类型,N0f8,其中8位的最大值为1。它们的内部表示方式与UInt8类似,它们被解释为被255除。类似地,N0f16适用于16位图像,甚至N4f12等特殊类型也很有用,例如,如果您使用12位相机采集图像。这意味着可以通过查找值为1的像素来检测图像饱和

当然,有时候你可能想换个角度看问题。JuliaImages支持几种对相同位数据提供替代解释的方法。就你而言

rawview(channelview(seed))
w 您将返回一个UInt8值数组,这可能是您所期望的

但是,请注意,如果要保存不应真正解释为图像的整数数组,可能有更好的格式,如HDF5。图像格式有时会受到压缩,从而损坏保存的值。TIFF通常被称为无损压缩,但事实上,使用有损压缩是可能的

这个[s.val.i代表种子中的s]给了你想要的吗?这个[s.val.i代表种子中的s]给了你想要的吗?