11 # include <vcl_msvc_warnings.h> 17 out[0] = T(0.299) * in[0] + T(0.587) * in[1] + T(0.114) * in[2];
18 out[1] = T(0.595716) * in[0] - T(0.274453) * in[1] - T(0.321263) * in[2];
19 out[2] = T(0.211456) * in[0] - T(0.522591) * in[1] + T(0.311135) * in[2];
25 out[0] = in[0] + T(0.956296) * in[1] + T(0.621024) * in[2];
26 out[1] = in[0] - T(0.272122) * in[1] - T(0.647381) * in[2];
27 out[2] = in[0] - T(1.106989) * in[1] + T(1.704615) * in[2];
43 T
max = std::max(r, std::max(g, b));
44 T
min = std::min(r, std::min(g, b));
63 *h = 2 + (b - r)/delta;
65 *h = 4 + (r - g)/delta;
78 T p1, p2, p3, f, nr=0, ng=0, nb=0;
85 extern float hue, s,
v;
87 extern long r2, g2, b2;
94 i = (int)std::floor((
double)xh);
97 p2 =
v * (1 - (s * f));
98 p3 =
v * (1 - (s * (1 - f)));
146 out[0] = T(0.299) * in[0] + T(0.587) * in[1] + T(0.114) * in[2];
147 out[1] = T(0.492) * (in[2] - out[0]);
148 out[2] = T(0.877) * (in[0] - out[0]);
158 out[0] = in[0] + T(1.1402508551881) * in[2];
159 out[1] = in[0] - T(0.39473137491174) * in[1] - T(0.5808092090311) * in[2];
160 out[2] = in[0] + T(2.0325203252033) * in[1];
176 YPbPr[0] = T(0.299) * RGB[0] + T(0.587) * RGB[1] + T(0.114) * RGB[2];
177 YPbPr[1] = T(-0.168736)* RGB[0] - T(0.331264) * RGB[1] + T(0.5) * RGB[2];
178 YPbPr[2] = T(0.5) * RGB[0] - T(0.418688) * RGB[1] - T(0.081312) * RGB[2];
194 RGB[0] = std::max(T(0.0), std::min(T(1.0), (YPbPr[0] + T(1.402) * YPbPr[2])));
195 RGB[1] = std::max(T(0.0), std::min(T(1.0), (YPbPr[0] - T(0.344136) * YPbPr[1] - T(0.714136) * YPbPr[2])));
196 RGB[2] = std::max(T(0.0), std::min(T(1.0), (YPbPr[0] + T(1.772) * YPbPr[1] )));
214 YCbCr[0] = static_cast<unsigned char>(
215 16.0 + ( 65.738 * RGB[0] + 129.057 * RGB[1] + 25.064 * RGB[2])/256.0 + 0.55555555);
216 YCbCr[1] = static_cast<unsigned char>(
217 128.0 + ( -37.945 * RGB[0] - 74.494 * RGB[1] + 112.439 * RGB[2])/256.0 + 0.55555555);
218 YCbCr[2] = static_cast<unsigned char>(
219 128.0 + ( 112.439 * RGB[0] - 94.154 * RGB[1] - 18.285 * RGB[2])/256.0 + 0.55555555);
229 RGB[0] = static_cast<unsigned char>(
230 (298.082 * YCbCr[0] + 408.583 * YCbCr[2]) / 256.0 - 222.921);
231 RGB[1] = static_cast<unsigned char>(
232 (298.082 * YCbCr[0] - 100.291 * YCbCr[1] - 208.120 * YCbCr[2]) / 256.0 + 135.576);
233 RGB[2] = static_cast<unsigned char>(
234 (298.082 * YCbCr[0] + 516.412 * YCbCr[1] ) / 256.0 - 276.836);
241 template void vil_colour_space_RGB_to_YIQ(T const [3], T [3]); \ 242 template void vil_colour_space_YIQ_to_RGB(T const [3], T [3]); \ 243 template void vil_colour_space_RGB_to_HSV(T, T, T, T *, T *, T *); \ 244 template void vil_colour_space_HSV_to_RGB(T, T, T, T *, T *, T *); \ 245 template void vil_colour_space_RGB_to_YUV(T const [3], T [3]); \ 246 template void vil_colour_space_YUV_to_RGB(T const [3], T [3]); \ 247 template void vil_colour_space_RGB_to_YPbPr_601(T const RGB[3], T YPbPr[3]); \ 248 template void vil_colour_space_YPbPr_601_to_RGB(T const YPbPr[3], T RGB[3]) void vil_colour_space_HSV_to_RGB(T h, T s, T v, T *r, T *g, T *b)
Transform from HSV to RGB colour space.
void vil_colour_space_YPbPr_601_to_RGB(T const YPbPr[3], T RGB[3])
Transformation from analog YPbPr to RGB colour spaces.
void vil_colour_space_YUV_to_RGB(T const in[3], T out[3])
Linear transformation from YUV to RGB colour spaces.
void vil_colour_space_RGB_to_YPbPr_601(T const RGB[3], T YPbPr[3])
Transformation from analog RGB to analog YPbPr colour spaces.
void vil_colour_space_RGB_to_YIQ(T const in[3], T out[3])
Linear transformation from RGB to YIQ colour spaces.
void vil_colour_space_RGB_to_HSV(T r, T g, T b, T *h, T *s, T *v)
Transform from RGB to HSV colour spaces.
void vil_colour_space_RGB_to_YCbCr_601(const unsigned char RGB[3], unsigned char YCbCr[3])
Transformation from 8 bit RGB to 8 bit YCbCr colour spaces.
vnl_decnum max(vnl_decnum const &x, vnl_decnum const &y)
void vil_colour_space_YIQ_to_RGB(T const in[3], T out[3])
Linear transformation from YIQ to RGB colour spaces.
vnl_decnum min(vnl_decnum const &x, vnl_decnum const &y)
void vil_colour_space_RGB_to_YUV(T const in[3], T out[3])
Linear transformation from RGB to YUV colour spaces.
void vil_colour_space_YCbCr_601_to_RGB(const unsigned char YCbCr[3], unsigned char RGB[3])
Transformation from 8 bit YCbCr to 8 bit RGB colour spaces.
Functions to convert between different colour spaces.