在不将单个像素值转换为浮点数的情况下调整目标分割图的大小

问题描述

我有一个数据集,其中包含大小为 4000x6000 的灰度级无人机视图图像。每个单独的像素值对应一个类(我总共有 20 个类),因此例如像素值为 3 表示“树”。使用原始图像,通过在 NumPy 中使用相等运算符,我可以非常轻松地为所有 20 个类创建二进制掩码,并获得像素完美的掩码。

以下是一行的示例:

[[2,2,......,5,5]]

但是,4000x6000 对我来说太大了,我想将这些分割目标的大小调整为更容易接受的大小,例如 400x400 或 400x600。尽管我尝试了几个不同的 Python 库,但它们都将我的像素值转换为不同的浮点值,导致我丢失了分割图标签。有什么方法(不包括裁剪),可以在不丢失标签的情况下调整分割目标图和原始 RGB 输入图像的大小?

解决方法

当调整图像大小时,通常需要插入像素值(例如,决定子像素位置的“强度”)。自然图像往往在像素之间平滑变化,这使得具有大支持的插值非常有吸引力(请参阅 detailed discussion here)。
但是,正如您所观察到的,在标签的整数值之间进行插值根本没有意义。

因此,您可以:

  1. 不要插值 - 对标签地图使用最近邻调整大小
    也就是说,对输入图像使用您喜欢的任何插值方法 (LANCZOS,BICUBIC...),但对标签图使用 NEAREST 方法。

  2. 内插每个标签的概率图 - 对于每个 4000x6000 标签图,生成 20 个每个类的概率图并将它们内插到所需的大小(使用与图像相同的内插方法: LANCZOSBICUBIC...)。现在,对于每个调整大小的像素,您都有一个 20 暗的目标分布。您可以使用这些“软标签”进行训练,或者采用 argmax 并使用每个像素最显着的标签进行训练。