将 RGBA{U8}(0.384,0.0,0.0,1.0) 转换为整数
Convert RGBA{U8}(0.384,0.0,0.0,1.0) to Integer
我在 Julia
中使用 Images.jl
。我正在尝试将图像转换为类似图形的数据结构 (v,w,c),其中
v是一个节点
w 是邻居并且
c是成本函数
我想给那些没有相同颜色的邻居一个昂贵的成本。但是,当我加载图像时,每个像素都具有以下类型 RGBA{U8}(1.0,1.0,1.0,1.0)
,是否有任何方法可以将其转换为 Int64 或 Float 等数字?
根据@daycaster 的建议,可以使用 Colors.jl 中的 colordiff
。
colordiff
将两种颜色作为参数。要使用它,您应该使用 color
提取像素的颜色部分,即 colordiff(color(v),color(w))
,其中 v
将是 RGBA{U8(0.384,0.0,0.0,1.0)
值。
如果你只想惩罚具有不同颜色值的相邻对(无论差异有多小),我认为 img[i,j] != img[i+1,j]
应该足够了,而且比调用 [=11= 更高效].
Images.jl 还包含方法 raw
和 separate
,它们允许您将图像 "convert" 转换为 UInt8
的高维数组。但是,对于您明显的应用程序,这可能会更痛苦,因为您必须在使用像 A[:, i, j] != A[:, i+1, j]
这样的语法(这将分配内存并且性能更差)或写出循环并检查每个循环之间做出选择手动颜色通道。然后总是有一点烦恼,必须对灰度和颜色的代码进行特殊处理,想知道 3d 数组的真正含义(它是 3d 灰度还是带颜色通道的 2d?),并想知道颜色通道是否存储为第一个或最后一个维度。
None 如果您直接使用 RGBA 格式的数据,就会出现这些烦恼。关于更多背景知识,它们是 Julia 的 "immutable" 对象的示例,它们至少有两个优点。首先,它们允许您清楚地指定特定数字集合的 "meaning"(在这种情况下,这 4 个数字代表特定颜色空间中的一种颜色,而不是来自传感器的压力读数)- --这意味着您可以编写不被迫做出无法强制执行的假设的代码。其次,一旦您学会了如何使用它们,它们就会使您的代码更漂亮,同时提供出色的性能。
颜色类型已记录 here。
如果你想要的只是幅度差异,我可能会建议将每个像素转换为灰度。
有关操作方法,请参阅此答案:
Converting RGB to grayscale/intensity
这将为您提供一个单一的强度值,然后您可以使用该值进行比较。
我在 Julia
中使用 Images.jl
。我正在尝试将图像转换为类似图形的数据结构 (v,w,c),其中
v是一个节点
w 是邻居并且
c是成本函数
我想给那些没有相同颜色的邻居一个昂贵的成本。但是,当我加载图像时,每个像素都具有以下类型 RGBA{U8}(1.0,1.0,1.0,1.0)
,是否有任何方法可以将其转换为 Int64 或 Float 等数字?
根据@daycaster 的建议,可以使用 Colors.jl 中的 colordiff
。
colordiff
将两种颜色作为参数。要使用它,您应该使用 color
提取像素的颜色部分,即 colordiff(color(v),color(w))
,其中 v
将是 RGBA{U8(0.384,0.0,0.0,1.0)
值。
如果你只想惩罚具有不同颜色值的相邻对(无论差异有多小),我认为 img[i,j] != img[i+1,j]
应该足够了,而且比调用 [=11= 更高效].
Images.jl 还包含方法 raw
和 separate
,它们允许您将图像 "convert" 转换为 UInt8
的高维数组。但是,对于您明显的应用程序,这可能会更痛苦,因为您必须在使用像 A[:, i, j] != A[:, i+1, j]
这样的语法(这将分配内存并且性能更差)或写出循环并检查每个循环之间做出选择手动颜色通道。然后总是有一点烦恼,必须对灰度和颜色的代码进行特殊处理,想知道 3d 数组的真正含义(它是 3d 灰度还是带颜色通道的 2d?),并想知道颜色通道是否存储为第一个或最后一个维度。
None 如果您直接使用 RGBA 格式的数据,就会出现这些烦恼。关于更多背景知识,它们是 Julia 的 "immutable" 对象的示例,它们至少有两个优点。首先,它们允许您清楚地指定特定数字集合的 "meaning"(在这种情况下,这 4 个数字代表特定颜色空间中的一种颜色,而不是来自传感器的压力读数)- --这意味着您可以编写不被迫做出无法强制执行的假设的代码。其次,一旦您学会了如何使用它们,它们就会使您的代码更漂亮,同时提供出色的性能。
颜色类型已记录 here。
如果你想要的只是幅度差异,我可能会建议将每个像素转换为灰度。
有关操作方法,请参阅此答案:
Converting RGB to grayscale/intensity
这将为您提供一个单一的强度值,然后您可以使用该值进行比较。