Performance 使用“英特尔IPP”将具有n位深度的图像转换为16位深度的图像。(其中8<;n<;16)
我需要对输入图像数据调用以下Intel IPP方法Performance 使用“英特尔IPP”将具有n位深度的图像转换为16位深度的图像。(其中8<;n<;16),performance,image-processing,intel,intel-ipp,Performance,Image Processing,Intel,Intel Ipp,我需要对输入图像数据调用以下Intel IPP方法 单色射线 iPilutPalette iPiscale(仅适用于16位图像) 伊皮克比 伊皮塞特 伊皮亚法康 到目前为止,我一直在使用这种方法的8位和16位版本。但现在我们也允许12位图像作为输入。对于ippilutplate,我发现我们可以传递我们正在处理的位大小。但是对于其他API,我们没有它 我想到的一种方法是将深度在8到16位之间的图像转换为16位图像,然后继续处理结果。我相信,iPiscale会执行这样的转换。但除了8、16和32
- 单色射线
- iPilutPalette
- iPiscale(仅适用于16位图像)
- 伊皮克比
- 伊皮塞特
- 伊皮亚法康
或者可以对位深度不是8位和16位的图像调用前面提到的API吗?数据类型基于处理器体系结构。通常情况下,它们是该值的分数或倍数 因此,现代CPU和现代编程语言中没有12位数据类型。您有64、32、16、8个可寻址内存 但是没有人会阻止你将少量的比特放入寄存器 因此,如果您想存储12位,通常将其存储在16位类型的较低12位中 这就是为什么图像处理算法通常支持8,16,。。。一点您可以使用任何16位算法处理12位强度信息,就像处理16位强度信息一样 在某些情况下,您可以将12位信息缩放为16位。但在大多数情况下,这是不必要的 将12位缩放到16位是一个简单的数学问题<代码>12位U值/(2^12-1)=16位U值/(2^16-1)。
当然,您也可以将您的12位值引用到图像中的最大值,而不是
2^12
。那么您将始终使用完整的16位 您的10位或12位图像很可能是使用每个样本16位存储的。如果是这样,您可以将其视为16位图像,但其中的最大值是1024或4092,而不是65k。@CrisLuengo感谢您的回答。不过,只有一个问题,如果我们最终对12位和16位使用相同的内存量,那么使用12位图像的优势是什么?@sajas没有优势。这只是一个量化的问题。大多数相机只有8、10或12位ADC。因此,对于12位分辨率,任何强度值都将在区间[04095]内。他们没有理由将其扩展到16位。是否有任何未压缩的存储格式将10位或12位组件分组打包?e、 g.6*12位=72位=每2像素9字节(对于yuv444或rgb,无子采样)。我检查了FFmpeg源代码,在内部,高深度格式似乎对每个组件都有一个完整的字节数。()@PeterCordes:我不是压缩方面的专家,但我想如果不压缩位,利用图像中的冗余可能会更容易。例如,MPEG编码像素块的移位,如果这些像素被压缩,这可能很难做到。图像压缩的目标是输出具有尽可能高的信息内容的比特流。因此,输出流将以某种方式进行压缩(例如哈夫曼编码),但该输出流不再是每像素位数的固定值。@CrisLuengo;我问的是未压缩的格式,例如,在高深度视频模式下的视频RAM中,或者在OpenGL纹理中,专用硬件将对其进行处理。有了硬件支持,从一组连续像素的位字段中解包组件不是问题。