Sunday, February 19, 2012

The Colorspace Conversions Library

The purpose of this library is to provide functions and data structures for color space conversion operations.

In order operate more easily with the components of the color spaces we shall define every color space as a structure.
Color space Structure Members
RGB RgbFColor double R,G,B
RGB RgbIColor uint8_t R,G,B
HSI HsiColor double H,S,I
HSL HslColor double H,S,L
HSV HsvColor double H,S,V
YIQ YiqColor double Y,I,Q
YUV YuvColor double Y,U,V

The RgbIColor is associated with the RGB color space model and it will contain the R,G,B components expressed as natural numbers in the range [0,255].

The RbgFColor is associated with the RGB color space model and it will contain the R,G,B components expressed as real numbers in the range [0.0, 1.0].

The HslColor is associated with the HSL color space model and it will contain the H,S,L components expressed as real numbers where H is in the range [0.0, 360.0] and S and L are in the range [0.0, 1.0].

The HsvColor is associated with the HSV color space model and it will contain the H,S,V components expressed as real numbers where H is in the range [0.0, 360.0] and S and V are in the range [0.0, 1.0].

The HsiColor is associated with the HSI color space model and it will contain the H,S,I components expressed as real numbers where H is in the range [0.0, 360.0] and S and I are in the range [0.0, 1.0].

The YiqColor is associated with the YIQ color space model and it will contain the Y,I,Q components expressed as real numbers where Y is in the range [0.0, 1.0], I is in the range [-0.5957, 0.5957], Q is in the range [-0.5226, 0.5226].

The YuvColor is associated with the YUV color space model and it will contain the Y,U,V components expressed as real numbers where Y is in the range [0.0, 1.0], U is in the range [-0.436, 0.436], Q is in the range [-0.615, 0.615].

We shall also define the following functions which will be used for the conversion algorithms:
/*
 * Description:
 *  Checks if a value is within a specified interval
 * Parameters:
 *  value - the value who is checked
 *  lowerLimit - the lower limit of the interval
 *  upperLimit - the upper limit of the interval
 * Returns:
 *  true if the value is within the interval
 *  false if the value is not within the interval
 */
bool RealIsWithinBounds(double value, double lowerLimit, double upperLimit);
/*
 * Description:
 *  Checks if a value is within a specified interval
 * Parameters:
 *  value - the value who is checked
 *  lowerLimit - the lower limit of the interval
 *  upperLimit - the upper limit of the interval
 * Returns:
 *  true if the value is within the interval
 *  false if the value is not within the interval
 */
bool IntegerIsWithinBounds(uint8_t value, uint8_t lowerLimit, uint8_t upperLimit);
/*
 * Description:
 *  Returns the smallest of the three parameters
 * Parameters
 *  r,g,b - 3 real numbers
 * Returns
 *  The smallest real number from the set {r,g,b}
 */
double Double_GetMinimum(double r, double g, double b);
/*
 * Description:
 *  Returns the largest of the three parameters
 * Parameters
 *  r,g,b - 3 real numbers
 * Returns
 *  The largest real number from the set {r,g,b}
 */
double Double_GetMaximum(double r, double g, double b);

/*
 * Description:
 *  Checks if the RGB components are valid
 * Parameters:
 *  r,g,b - the components of an RGB model expressed
 *          as real numbers
 * Returns:
 *  true if the values are correct
 *  false if the values are incorrect
 */
bool RgbF_IsValid(double r, double g, double b);
/*
 * Description:
 *  Checks if the HSI components are valid
 * Parameters:
 *  h,s,i - the components of an HSI model expressed
 *          as real numbers
 * Returns:
 *  true if the values are correct
 *  false if the values are incorrect
 */
bool Hsi_IsValid(double h, double s, double i);
/*
 * Description:
 *  Checks if the RGB components are valid
 * Parameters:
 *  r,g,b - the components of an RGB model expressed
 *          as natural numbers
 * Returns:
 *  true if the values are correct
 *  false if the values are incorrect
 */
bool RgbI_IsValid(uint8_t r, uint8_t g, uint8_t b);
/*
 * Description:
 *  Checks if the HSL components are valid
 * Parameters:
 *  h,s,l - the components of an HSL model expressed
 *          as real numbers
 * Returns:
 *  true if the values are correct
 *  false if the values are incorrect
 */
bool Hsl_IsValid(double h, double s, double l);
/*
 * Description:
 *  Checks if the HSV components are valid
 * Parameters:
 *  h,s,v - the components of an HSV model expressed
 *          as real numbers
 * Returns:
 *  true if the values are correct
 *  false if the values are incorrect
 */
bool Hsv_IsValid(double h, double s, double v);
/*
 * Description:
 *  Checks if the YIQ components are valid
 * Parameters:
 *  y,i,q - the components of an YIQ model expressed
 *          as real numbers
 * Returns:
 *  true if the values are correct
 *  false if the values are incorrect
 */
bool Yiq_IsValid(double y, double i, double q);
/*
 * Description:
 *  Checks if the YUV components are valid
 * Parameters:
 *  y,u,v - the components of an YUV model expressed
 *          as real numbers
 * Returns:
 *  true if the values are correct
 *  false if the values are incorrect
 */
bool Yuv_IsValid(double y, double u, double v);
If you want to view the implementation of these functions, see the links below:

No comments:

Post a Comment

Got a question regarding something in the article? Leave me a comment and I will get back at you as soon as I can!

Related Posts Plugin for WordPress, Blogger...
Recommended Post Slide Out For Blogger