Color Space Converter
Convert color information between color spaces
 Library:
Vision HDL Toolbox / Conversions
Description
The Color Space Converter block converts between R'G'B' and Y'CbCr color spaces, and also converts R'G'B' to intensity.
Note
The Color Space Converter block operates on gammacorrected color spaces, usually indicated with prime notation ('). However, for simplicity, the block and mask labels do not include the prime notation.
Ports
This block uses a streaming pixel interface with a
pixelcontrol
bus for frame control signals. This interface enables the
block to operate independently of image size and format. All Vision HDL Toolbox™ blocks use the same streaming interface. The block accepts and returns a scalar
pixel value and a bus that contains five control signals. The control signals indicate the
validity of each pixel and its location in the frame. To convert a frame (pixel matrix) into a
serial pixel stream and control signals, use the Frame
To Pixels block. For a full description of the interface, see Streaming Pixel Interface.
This block also supports multipixel streams, where the pixel input is a matrix of Mby3 values. M is the number of pixels and each pixel has 3 R'G'B' or Y'CbCr components. These values correspond to the Number of pixels and Number of components parameters of the Frame To Pixels block.
Input
pixel
— Input pixel stream
vector  matrix
For scalar pixel streams, specify pixel as a vector of 1by3 values. For multipixel streams, specify pixel as a matrix of Number of pixelsby3 pixel intensity values.
The pixel stream must be in Y'CbCr or R'G'B' color space. The pixel
values must be uint8
, uint16
, or
fixdt(0,N,0)
, where
N is from 8 through 16.
double
and single
data
types are supported for simulation, but not for HDL code generation.
Data Types: single
 double
 uint8
 uint16
 fixed point
ctrl
— Control signals associated with pixel stream
pixelcontrol
bus
The pixelcontrol
bus contains five signals.
The signals describe the validity of the pixel and its location in the frame. For more
information, see Pixel Control Bus.
Data Types: bus
Output
pixel
— Output pixel stream in new colorspace
scalar  vector  matrix
Output pixel stream in intensity, Y'CbCr, or R'G'B' color space, returned as a single pixel stream or multipixel stream. The data type and Number of pixels of the output stream is the same as the input pixel stream. If the output is intensity values, each pixel has one component. If the output is Y'CbCr or R'G'B', each pixel has three components.
double
and single
data
types are supported for simulation, but not for HDL code generation.
Data Types: single
 double
 uint8
 uint16
 fixed point
ctrl
— Control signals associated with pixel stream
pixelcontrol
bus
The pixelcontrol
bus contains five signals.
The signals describe the validity of the pixel and its location in the frame. For more
information, see Pixel Control Bus.
Data Types: bus
Parameters
Conversion
— Type of color space conversion
RGB to YCbCr
(default)  YCbCr to RGB
 RGB to intensity
The block accepts input pixels as vectors of three values that represent a
single pixel. If you choose RGB to intensity
,
each output pixel is a scalar. Otherwise, each output pixel is a vector of
three values.
Use conversion specified by
— Conversion equation
Rec. 601 (SDTV)
(default)  Rec. 709 (HDTV)
Conversion equation used between R'G'B' and Y'CbCr color spaces.
Dependencies
This parameter applies only when you set
Conversion to RGB to YCbCr
or YCbCr to RGB
.
Scanning standard
— HDTV scanning standard
1250/50/2:1
(default)  1125/60/2:1
Scanning standard used to convert between R'G'B' and Y'CbCr color spaces in HDTV format.
Dependencies
This parameter applies when you set Use conversion specified
by to Rec. 709 (HDTV)
.
Model Examples
Algorithms
When you use multipixel streaming, the block replicates the conversion algorithm for each of the M input pixels, in parallel. This increase in hardware resources is a trade off for increasing throughput compared to singlepixel streaming.
Conversion Between R'G'B' and Y'CbCr Color Spaces
The following equations define R'G'B' to Y'CbCr conversion and Y'CbCr to R'G'B' conversion:
$$\left[\begin{array}{c}{Y}^{\prime}\\ Cb\\ Cr\end{array}\right]=\left[\begin{array}{c}16\\ 128\\ 128\end{array}\right]+{\rm A}\times \left[\begin{array}{c}{R}^{\prime}\\ {G}^{\prime}\\ {B}^{\prime}\end{array}\right]$$
$$\left[\begin{array}{c}{R}^{\prime}\\ {G}^{\prime}\\ {B}^{\prime}\end{array}\right]={\rm B}\times \left(\left[\begin{array}{c}{Y}^{\prime}\\ Cb\\ Cr\end{array}\right]\left[\begin{array}{c}16\\ 128\\ 128\end{array}\right]\right)$$
The values in matrices A
and B
are
based on your choices for the Use conversion specified by and Scanning
standard parameters.
Matrix  Use conversion specified by = Rec. 601 (SDTV)  Use conversion specified by = Rec. 709 (HDTV)  

Scanning standard = 1125/60/2:1  Scanning standard = 1250/50/2:1  
A  $$\left[\begin{array}{ccc}0.25678824& 0.50412941& 0.09790588\\ 0.1482229& 0.29099279& 0.43921569\\ 0.43921569& 0.36778831& 0.07142737\end{array}\right]$$  $$\left[\begin{array}{l}\text{0}\text{.182585880}\text{.614230590}\text{.06200706}\\ \text{0}\text{.100643730}\text{.338571950}\text{.43921569}\\ \text{0}\text{.439215690}\text{.398942160}\text{.04027352}\end{array}\right]$$  $$\left[\begin{array}{ccc}0.25678824& 0.50412941& 0.09790588\\ 0.1482229& 0.29099279& 0.43921569\\ 0.43921569& 0.36778831& 0.07142737\end{array}\right]$$ 
B  $$\left[\begin{array}{ccc}1.1643836& 0& 1.5960268\\ 1.1643836& 0.39176229& 0.81296765\\ 1.1643836& 2.0172321& 0\end{array}\right]$$  $$\left[\begin{array}{ccc}\text{1}\text{.16438356}& \text{0}& \text{1}\text{.79274107}\\ \text{1}\text{.16438356}& \text{0}\text{.21324861}& \text{0}\text{.53290933}\\ \text{1}\text{.16438356}& \text{2}\text{.11240179}& \text{0}\end{array}\right]$$  $$\left[\begin{array}{ccc}1.1643836& 0& 1.5960268\\ 1.1643836& 0.39176229& 0.81296765\\ 1.1643836& 2.0172321& 0\end{array}\right]$$ 
Conversion from R'G'B' to Intensity
The following equation defines conversion from the R'G'B' color space to intensity:
$$\text{intensity}=\left[\begin{array}{ccc}0.299& 0.587& 0.114\end{array}\right]\left[\begin{array}{c}{R}^{\prime}\\ {G}^{\prime}\\ {B}^{\prime}\end{array}\right]$$
Data Types
For fixedpoint and integer input, the block converts matrix A
to fixdt(1,17,16)
, and matrix B to
fixdt(1,17,14)
.
For double or single input, the block applies the conversion matrices in double
type, and scales the Y'CbCr offset vector ([16,128,128]
) by
1/255. The block saturates double or single R'G'B' and intensity outputs to the
range [0,1]
.
The Y'CbCr standard includes headroom and footroom. For 8bit data, luminance
values in the range 16–235 and chrominance values in the range 16–240 are valid.
The Color
Space Converter block pins outofrange input to these limits before
calculating the conversion. The block scales the offset vector and the allowed
headroom and footroom depending on the word length of the input signals. For
example, when you convert a Y'CbCr input of type fixdt(0,10,0)
to
R'G'B', the block multiplies the offset vector by 2^{(10 –
8)} = 4. As a result, the valid luminance range becomes 64–940 and
the valid chrominance range becomes 64–960.
Latency
When you use this block with R'G'B' input, the block has a latency of 9 cycles. When you use this block with Y'CbCr input, the block has a latency of 10 cycles. The extra cycle is required to check for and correct headroom and footroom violations.
Note
When you use edge padding, use a horizontal blanking interval greater than twice the kernel width. This interval lets the block finish processing one line before it starts processing the next one, including adding padding pixels before and after the active pixels in the line. Standard streaming video formats use a horizontal blanking interval of about 25% of the frame width. This interval is much larger than the filters applied to each frame. When you disable edge padding, the horizontal blanking interval must be at least 12 cycles and is independent of the kernel size. If you are using a custom video format, set the horizontal blanking interval by using the Frame To Pixels block parameters. The horizontal blanking interval is equal to Total pixels per line – Active pixels per line or, equivalently, Front porch + Back porch. For more information, see Configure Blanking Intervals.
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using Simulink® Coder™.
This block supports C/C++ code generation for Simulink^{®} accelerator and rapid accelerator modes and for DPI component generation.
HDL Code Generation
Generate Verilog and VHDL code for FPGA and ASIC designs using HDL Coder™.
HDL Coder™ provides additional configuration options that affect HDL implementation and synthesized logic.
This block has a single, default HDL architecture.
ConstrainedOutputPipeline  Number of registers to place at
the outputs by moving existing delays within your design. Distributed
pipelining does not redistribute these registers. The default is

InputPipeline  Number of input pipeline stages
to insert in the generated code. Distributed pipelining and constrained
output pipelining can move these registers. The default is

OutputPipeline  Number of output pipeline stages
to insert in the generated code. Distributed pipelining and constrained
output pipelining can move these registers. The default is

See Also
Color Space Conversion (Computer Vision Toolbox)  Frame To Pixels  visionhdl.ColorSpaceConverter
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
 América Latina (Español)
 Canada (English)
 United States (English)
Europe
 Belgium (English)
 Denmark (English)
 Deutschland (Deutsch)
 España (Español)
 Finland (English)
 France (Français)
 Ireland (English)
 Italia (Italiano)
 Luxembourg (English)
 Netherlands (English)
 Norway (English)
 Österreich (Deutsch)
 Portugal (English)
 Sweden (English)
 Switzerland
 United Kingdom (English)