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