Intel® Integrated Performance Primitives (Intel® IPP) - 16-bit Unsigned Image Processing Functions


Does the Intel® IPP image processing library support 16-bit unsigned (16u) images?
Yes. Some image processing functions support 16u data.

Which functions support 16u images?
  • Copy with subpixel precision (CopySubpix, CopySubpixIntersect)
  • Summation (Add, AddSquare, AddProduct, Addweighted)
  • Absolute difference (AbsDiff, AbsDissC)
  • Statistical (Mean_StdDev, masked Mean, MinMaxIndx)
  • Masked Norms
  • Distance Transform (16u optput)
  • Update Motion History
  • Optical Flow
  • Universal Pyramids
  • Correct Camera Distortions (Undistort)

Where can I get more information on 16u image processing support?
If you have any questions or feature requests related to 16u support, please submit an issue to Intel® Premier Support.

The Intel IPP function I use does not support 16u. Are there any workarounds for processing 16u image data?
  1. Use the ippiConvert functions to convert the 16u data to a bit depth supported by the function you need.
  2. Call the function on the converted data.
  3. Convert the image data back to 16u when processing is complete.

Can I use 16s functions to process my 16u data?
For a wide range of operations, Intel IPP 16s functions can be called on 16u data e.g. for logic, copy and set. However, sign is important for arithmetic, filtering, LUT and other function sets.

The arithmetic functions for 16s data treat image pixels and other values as 16-bit signed integers. If all arguments and results are within the interval (0,2 15-1) the operation will be the same as for 16-bit unsigned values. If the value is greater than 2 15-1, 16s functions will treat this as a negative value.

How do I set pixel values for 16u images?
For ippiSet_16s there is no difference between signed or unsigned values, therefore the function can be used for 16u data by direct data type redefinition:
Ipp16u init_value;
ippiSet_16s_C1R( (Ipp16s)init_value, pDst, step, roiSize );
Note: The compiler could convert the variable init_value to a signed type. The Intel® C++ Compiler does not saturate to 16-bit unsigned to 16-bit signed. Signed values should bitwise coincide with required unsigned values.

Operating System:

Red Hat* Enterprise Linux Desktop 4, Windows Server* 2003 Standard x64 Edition, Mac OS*, Red Hat* Enterprise Linux 2.1, SUSE* Linux 9.1, SUSE* Linux Enterprise Server 8.0, SUSE* Linux Enterprise Server 9.0, Windows* XP Professional, Red Hat* Linux 7.2, Red Hat* Linux 7.3, Red Hat* Linux 8.0, Windows Server* 2003, Red Hat* Linux 9.0, Red Hat* Enterprise Linux 3.0, SUSE* Linux* 8.2, Windows* XP 64-Bit Edition Version 2003