将具有n位位深度的图像转换为具有Intel IPP的16位位深度图像。 (其中8 <n <16)

时间:2018-03-09 04:23:04

标签: performance image-processing intel intel-ipp

我需要在输入图像数据上调用以下Intel IPP方法。

  • ippiColorToGray
  • ippiLUTPalette
  • ippiScale(仅适用于16位图像)
  • ippiCopy
  • ippiSet
  • ippiAlphaComp

到目前为止,我一直使用这种方法的8位和16位版本。但现在我们也允许12位图像作为输入。对于 ippiLUTPalette ,我看到我们可以传递我们正在处理的bitSize。但对于其他API,我们还没有。

我想到的一种方法是将位深度介于8位和16位之间的图像转换为16位图像并继续处理结果。我相信,ippiScale会进行此类转换。但我无法找到适用于除了8,16和8之外的钻头深度的它。 32。

有没有办法执行此转换?

或者是否可以在比特深度不是8位和16位的图像上调用前面提到的API?

1 个答案:

答案 0 :(得分:2)

数据类型基于处理器体系结构。通常它们是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)。 当然,您也可以将12位值引用到图像中的最大值,而不是2^12。然后你总是使用完整的16位。