使用 Intel IPP 将具有 n 位位深度的图像转换为 16 位位深度图像。 (其中 8 < n < 16)
Converting an image with n-bit bit depth to a 16-bit bit depth image with Intel IPP. (where 8 < n < 16)
我需要对输入图像数据调用以下英特尔 IPP 方法。
- ippiColorToGray
- ippiLUTPalette
- ippiScale(仅适用于 16 位图像)
- ippi复制
- ippi集
- ippiAlphaComp
到目前为止,我一直在使用这种方法的 8 位和 16 位版本。但现在我们也允许 12 位图像作为输入。对于 ippiLUTPalette,我看到我们可以传递我们正在处理的 bitSize。但对于其他 API,我们没有。
我想到的一种方法是将位深度介于 8 位和 16 位之间的图像转换为 16 位图像,然后继续处理结果。我相信,ippiScale 会执行此类转换。但是我找不到适用于 8、16 和 32 以外的位深度的它的风格。
有没有办法进行这种转换?
或者是否可以在位深度不是 8 位和 16 位的图像上调用前面提到的 APIs?
数据类型基于处理器架构。通常它们是 word length.
的分数或倍数
因此对于现代 CPU,因此在现代编程语言中没有 12 位数据类型。你有 64, 32, 16, 8 的可寻址内存。
但是没有人会阻止您将更少的位数放入寄存器。
所以如果你想存储 12 位,你通常将它们存储在 16 位类型的低 12 位中。
这就是图像处理算法通常支持 8、16、... 位的原因。您可以使用任何 16 位算法来处理 12 位强度信息,就像处理 16 位一样。
在某些情况下,您可以将 12 位信息缩放到 16 位。但在大多数情况下,这是没有必要的。
将 12 位缩放到 16 位是简单的数学运算。 12bit_value / (2^12-1) = 16bit_value / (2^16-1)
。
当然你也可以将你的12bit取值为图像中的最大值而不是2^12
。那么您将始终使用完整的 16 位。
我需要对输入图像数据调用以下英特尔 IPP 方法。
- ippiColorToGray
- ippiLUTPalette
- ippiScale(仅适用于 16 位图像)
- ippi复制
- ippi集
- ippiAlphaComp
到目前为止,我一直在使用这种方法的 8 位和 16 位版本。但现在我们也允许 12 位图像作为输入。对于 ippiLUTPalette,我看到我们可以传递我们正在处理的 bitSize。但对于其他 API,我们没有。
我想到的一种方法是将位深度介于 8 位和 16 位之间的图像转换为 16 位图像,然后继续处理结果。我相信,ippiScale 会执行此类转换。但是我找不到适用于 8、16 和 32 以外的位深度的它的风格。
有没有办法进行这种转换?
或者是否可以在位深度不是 8 位和 16 位的图像上调用前面提到的 APIs?
数据类型基于处理器架构。通常它们是 word length.
的分数或倍数因此对于现代 CPU,因此在现代编程语言中没有 12 位数据类型。你有 64, 32, 16, 8 的可寻址内存。
但是没有人会阻止您将更少的位数放入寄存器。
所以如果你想存储 12 位,你通常将它们存储在 16 位类型的低 12 位中。
这就是图像处理算法通常支持 8、16、... 位的原因。您可以使用任何 16 位算法来处理 12 位强度信息,就像处理 16 位一样。
在某些情况下,您可以将 12 位信息缩放到 16 位。但在大多数情况下,这是没有必要的。
将 12 位缩放到 16 位是简单的数学运算。 12bit_value / (2^12-1) = 16bit_value / (2^16-1)
。
当然你也可以将你的12bit取值为图像中的最大值而不是2^12
。那么您将始终使用完整的 16 位。