首页 > 解决方案 > 在 Python 中将 12 位灰度图像转换为每通道 8 位彩色图像

问题描述

我正在寻找在 Python 中将 12 位 (0-4096) 灰度图像转换为 3 通道 8 位彩色图像以便将其传递到卷积神经网络方面的建议或最佳实践。

使用 8 位 RGB,我基本上有 24 位颜色,所以我认为没有理由在转换中丢失数据,尽管大多数其他帖子建议简单地将像素值除以 16 以便将其压缩为 8 位然后复制这以有损方式覆盖所有三个通道。

我想出的一些想法包括创建某种渐变函数,将 12 位 uint 转换为渐变上的相应颜色,但我对 RGB 颜色空间的理解是,使用 Numpy 或其他类似的实现会很棘手图书馆。

OpenCV / Scikit 等常用库是否提供这种功能?我在文档中找不到任何内容。其他想法包括使用某种中间色彩空间,例如 HSL/L*AB,但我对此知之甚少。

请注意,我最终试图创建一个 8 位 RGB 图像,而不是 16 位 RGB 图像。只需尝试以在整个颜色范围内保留原始 12 位数据的方式对灰度图像进行着色。

希望有人能帮忙!

标签: pythonopencvpython-imaging-libraryscikit-image

解决方案


我的第一个问题是:为什么需要以任何特定方式将其转换为颜色?

如果您在这些图像上训练 CNN,则任何任意转换都应该有效并为您提供类似的性能。您只需要以相同的方式转换训练图像和输入图像。

您可能只需拆分 16 位并将下半部分放在 R 中,将上半部分放在 G 中,然后将 B 保留为零。

这有点取决于这个 CNN 的黑盒程度。但是您始终可以通过使用我上面提到的转换运行几个训练/测试周期来测试这一点,然后使用“压缩”版本再次执行此操作。


推荐阅读