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

Posted

技术标签:

【中文标题】在不将单个像素值转换为浮点数的情况下调整目标分割图的大小【英文标题】:Resizing a target segmentation map without converting individual pixel values to floats 【发布时间】:2021-06-26 06:22:31 【问题描述】:

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

以下是一行的示例:

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

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

【问题讨论】:

【参考方案1】:

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

因此,您可以:

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

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

【讨论】:

以上是关于在不将单个像素值转换为浮点数的情况下调整目标分割图的大小的主要内容,如果未能解决你的问题,请参考以下文章

在不更改像素值的情况下将 svg 转换为 png

将列表中的所有字符串转换为浮点数。适用于单个列表,但不适用于数据框

有啥方法可以在不将 CIImage 转换为 UIImage 或 CGImage 的情况下将 CIImage 转换为 NSData?

Pandas / 如何将存储为字符串的科学记数法转换为浮点数?

如何在不将目录包含到彼此编译命令中的情况下构建目标?

我可以在不将图像上传到 cloudinary 的情况下转换图像吗?