微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

自动将未知位深度的图像重新缩放到固定范围

如何解决自动将未知位深度的图像重新缩放到固定范围

我想创建一个算法,该算法可以获取数据集并检查每个图像的表示方式并将比例自动更改为 0-255 或 0-1。如果我知道我的完整数据集是如何表示的,我就知道这是如何手动完成的。假设我的数据集是 16 位,我可以通过以下方式将其转换为 8 位:

img = (img/256).astype('uint8')

或者通过以下方式在 0-1 之间转换:

img = (img/65536)

但是,假设我有一个 8 位表示的数据集(我还不知道这一点)并且我单独遍历每个图像可能会发生我的一些图像最大值是 240,250 和 251。然后如果我想重新缩放到 0-1 这将是不正确的:

img = img/240 # first image
img = img/250 # second image
img = img/251 # third image

我还可以检查完整数据集的最大值,然后获得正确的最大值。但是,即使单个图像的最大值为 240,有没有办法“正确”重新缩放?

解决方法

据我所知,您有一个 uint8 和 uint16 图像数据集,但是,dtype 不一定对应,例如用于表示 uint16 数据的 int32 数据类型。问题是如何将每个图像“正确”重新缩放为浮动在 [0,1] 中,即根据原始类型除以 255 或 65535。

我先说这个问题没有完美的解决方案。可以想象,一个非常暗的 uint16 图像的所有值都为 255 或更低,使其错误地看起来是 uint8 数据。理想情况下,首先通过将 ditdepth 保存为数据集中每个图像的元数据来避免陷入这个问题。

也就是说,请考虑以下启发式:给定图像,计算其最大值 (image.max())。那么,

  • 如果最大值≤ 255,则假设为 uint8 数据并将图像除以 255。

  • 否则,假设 uint16 并将图像除以 65535。

如果您有除 uint8 和 uint16 之外的其他表示形式,则根据需要扩展此逻辑。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。