Here is universal high precision color transform component based on the direct 3x3 matrix multiplication without convert-specific (such as RGB<->YCbCr) optimization. The current color transformation is defined by the dynamically load matrix factors and can be changed at any time. At this moment we've typed factors for these convertions:
ComputerRGB_to_YCbCr601,
YCbCr601_to_ComputerRGB,
StudioRGB_to_YCbCr601,
YCbCr601_to_StudioRGB,
ComputerRGB_to_YCbCr709,
YCbCr709_to_ComputerRGB,
StudioRGB_to_YCbCr709,
YCbCr709_to_StudioRGB,
YCbCr709_to_YCbCr601,
YCbCr601_to_YCbCr709,
YUV601_to_YIQ601,
StudioRGB_to_YIQ601,
YIQ601_to_StudioRGB.
Precision of matrix factors is 10-E4. Trnasform operations were verifyied by the comparing with Matlab's equation. Testbench is attached.
Resource utilization by the core with 10-bit input data for modern Altera's FPGA StratixII EP2S30F672C5 (has 27104 ALUTs/128 DSP Blocks at all) is about 276 ALUTs and 18 9bit-DSP Blocks.
- Universal, dynamically changable color convertions:
- ComputerRGB_to_YCbCr601,
- YCbCr601_to_ComputerRGB,
- StudioRGB_to_YCbCr601,
- YCbCr601_to_StudioRGB,
- ComputerRGB_to_YCbCr709,
- YCbCr709_to_ComputerRGB,
- StudioRGB_to_YCbCr709,
- YCbCr709_to_StudioRGB,
- YCbCr709_to_YCbCr601,
- YCbCr601_to_YCbCr709,
- YUV601_to_YIQ601,
- StudioRGB_to_YIQ601,
- YIQ601_to_StudioRGB.
- High-precision: upto 16 bit color components;
- Low resource utilisation with modern FPGA;