在不将单个像素值转换为浮点数的情况下调整目标分割图的大小
Resizing a target segmentation map without converting individual pixel values to floats
我有一个数据集,其中包含尺寸为 4000x6000 的灰度无人机视图图像。每个单独的像素值对应一个 class(我总共有 20 个 class),因此像素值为 3 表示例如“树”。使用原始图像,通过在 NumPy 中使用相等运算符,我可以非常轻松地为所有 20 个 classes 创建二进制掩码,并且我得到像素完美的掩码。
下面是一行的示例:
[[2, 2, 2, 2, ......, 5, 5, 5]]
但是,4000x6000 对我的目的来说太大了,我想将这些分割目标调整为更容易接受的尺寸,例如 400x400 或 400x600。尽管我尝试了几个不同的 Python 库,但它们都将我的像素值转换为不同的浮点值,导致我丢失了分割图标签。有没有什么方法(不包括裁剪)可以在不丢失标签的情况下调整分割目标图和原始 RGB 输入图像的大小?
当调整图像大小时,通常需要对像素值进行插值(例如,决定子像素位置的“强度”)。自然图像往往在像素之间平滑变化,这使得具有大支持的插值非常有吸引力(参见 detailed discussion here)。
但是,正如您所观察到的,在标签的整数值之间进行插值根本没有意义。
因此,您可以:
不插值 - 使用最近邻调整大小标签图。
也就是说,对输入图像使用您喜欢的任何插值方法(LANCZOS
、BICUBIC
...),但对标签图使用 NEAREST
方法。
插入每个标签的概率图 - 对于每个 4000x6000
标签图,生成 20 个每个 class 的概率图并将它们插入到所需的大小(使用相同的用于图像的插值方法:LANCZOS
、BICUBIC
...)。现在,对于每个调整大小的像素,您都有一个 20 维的目标分布。您可以使用这些“软标签”进行训练,或者采用 argmax
并使用每像素最主要的标签进行训练。
我有一个数据集,其中包含尺寸为 4000x6000 的灰度无人机视图图像。每个单独的像素值对应一个 class(我总共有 20 个 class),因此像素值为 3 表示例如“树”。使用原始图像,通过在 NumPy 中使用相等运算符,我可以非常轻松地为所有 20 个 classes 创建二进制掩码,并且我得到像素完美的掩码。
下面是一行的示例:
[[2, 2, 2, 2, ......, 5, 5, 5]]
但是,4000x6000 对我的目的来说太大了,我想将这些分割目标调整为更容易接受的尺寸,例如 400x400 或 400x600。尽管我尝试了几个不同的 Python 库,但它们都将我的像素值转换为不同的浮点值,导致我丢失了分割图标签。有没有什么方法(不包括裁剪)可以在不丢失标签的情况下调整分割目标图和原始 RGB 输入图像的大小?
当调整图像大小时,通常需要对像素值进行插值(例如,决定子像素位置的“强度”)。自然图像往往在像素之间平滑变化,这使得具有大支持的插值非常有吸引力(参见 detailed discussion here)。
但是,正如您所观察到的,在标签的整数值之间进行插值根本没有意义。
因此,您可以:
不插值 - 使用最近邻调整大小标签图。
也就是说,对输入图像使用您喜欢的任何插值方法(LANCZOS
、BICUBIC
...),但对标签图使用NEAREST
方法。插入每个标签的概率图 - 对于每个
4000x6000
标签图,生成 20 个每个 class 的概率图并将它们插入到所需的大小(使用相同的用于图像的插值方法:LANCZOS
、BICUBIC
...)。现在,对于每个调整大小的像素,您都有一个 20 维的目标分布。您可以使用这些“软标签”进行训练,或者采用argmax
并使用每像素最主要的标签进行训练。