Fawkes API Fawkes Development Version
thresholds_black.cpp
1/* This program is free software; you can redistribute it and/or modify
2 * it under the terms of the GNU General Public License as published by
3 * the Free Software Foundation; either version 2 of the License, or
4 * (at your option) any later version. A runtime exception applies to
5 * this software (see LICENSE.GPL_WRE file mentioned below for details).
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU Library General Public License for more details.
11 *
12 * Read the full text in the LICENSE.GPL_WRE file in the doc directory.
13 */
14
15#include "thresholds_black.h"
16
17#include <cmath>
18
19namespace firevision {
20
21/** @class ColorModelBlack <fvmodels/color/thresholds_black.h>
22 * Detect configurable shades/hues of "black" as a cuboid in YUV space.
23 */
24
25/**
26 * Initialize black colormodel. The Y reference component is always 0,
27 * i.e. the accepted cuboid extends from Y=0 to Y=y_thresh, by u_thresh
28 * around ref_u, and by v_thresh around ref_v.
29 *
30 * @param y_thresh maximum brightness
31 * @param u_thresh maximum difference from ref_u
32 * @param v_thresh maximum difference from ref_v
33 * @param ref_u U component of the "black" reference color (default 128)
34 * @param ref_v V component of the "black" reference color (default 128)
35 */
37 unsigned int u_thresh,
38 unsigned int v_thresh,
39 unsigned int ref_u,
40 unsigned int ref_v)
41: y_thresh_(y_thresh), u_thresh_(u_thresh), v_thresh_(v_thresh), ref_u_(ref_u), ref_v_(ref_v)
42{
43}
44
45color_t
46ColorModelBlack::determine(unsigned int y, unsigned int u, unsigned int v) const
47{
48 int diff_u = ref_u_ - u;
49 int diff_v = ref_v_ - v;
50 if (y <= y_thresh_
51#if defined(__GNUC__) && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 6) || (__GNUC__ > 4))
52 && std::abs(diff_u) < u_thresh_ && std::abs(diff_v) < v_thresh_
53#else
54 && (diff_u < 0)
55 ? (diff_u > -1 * (int)u_thresh_)
56 : (diff_u < (int)u_thresh_) && (diff_v < 0) ? (diff_v > -1 * (int)v_thresh_)
57 : (diff_v < (int)v_thresh_)
58#endif
59 ) {
60 return C_BLACK;
61 } else {
62 return C_OTHER;
63 }
64}
65
66const char *
68{
69 return "ColorModelBlack";
70}
71
72} // end namespace firevision
const char * get_name()
Get name of color model.
ColorModelBlack(unsigned int y_thresh=30, unsigned int u_thresh=30, unsigned int v_thresh=30, unsigned int ref_u=128, unsigned int ref_v=128)
Initialize black colormodel.
color_t determine(unsigned int y, unsigned int u, unsigned int v) const
Determine classification of YUV pixel.