Visual Servoing Platform version 3.7.0
Loading...
Searching...
No Matches
vpRBSilhouettePoint.h
1/*
2 * ViSP, open source Visual Servoing Platform software.
3 * Copyright (C) 2005 - 2024 by Inria. All rights reserved.
4 *
5 * This software is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 * See the file LICENSE.txt at the root directory of this source
10 * distribution for additional information about the GNU GPL.
11 *
12 * For using ViSP with software that can not be combined with the GNU
13 * GPL, please contact Inria about acquiring a ViSP Professional
14 * Edition License.
15 *
16 * See https://visp.inria.fr for more information.
17 *
18 * This software was developed at:
19 * Inria Rennes - Bretagne Atlantique
20 * Campus Universitaire de Beaulieu
21 * 35042 Rennes Cedex
22 * France
23 *
24 * If you have questions regarding the use of this file, please contact
25 * Inria at visp@inria.fr
26 *
27 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
28 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
29 */
30
35#ifndef VP_RB_SILHOUETTE_POINT_H
36#define VP_RB_SILHOUETTE_POINT_H
37
38#include <visp3/core/vpConfig.h>
39#include <visp3/core/vpColVector.h>
40
53class VISP_EXPORT vpRBSilhouettePoint
54{
55public:
56 unsigned int i, j;
58 double orientation;
59 double Z;
61
62 vpRBSilhouettePoint(unsigned int a_i, unsigned int a_j, const vpColVector &a_normal, double a_orientation, double a_Z) :
63 i(a_i), j(a_j), normal(a_normal), orientation(a_orientation), Z(a_Z)
64 { }
65
67 {
68 int range = 4;
69 unsigned int urange = static_cast<unsigned int>(range);
70 unsigned int k = 0;
71 if (i < urange || j < urange || i >= (I.getHeight() - urange) || j >= (I.getWidth() - urange)) {
72 isSilhouette = false;
73 return;
74 }
75 double c = cos(orientation);
76 double s = sin(orientation);
77 for (int n = -range; n <= range; n++) {
78 unsigned int ii = static_cast<unsigned int>(round(i + s * n));
79 unsigned int jj = static_cast<unsigned int>(round(j + c * n));
80 unsigned int isBg = static_cast<unsigned int>(I[ii][jj] == 0.f);
81 k += isBg;
82 }
83 isSilhouette = k > 2;
84 }
85
86};
87
88END_VISP_NAMESPACE
89
90#endif
Implementation of column vector and the associated operations.
Definition of the vpImage class member functions.
Definition vpImage.h:131
double Z
angle of the normal in the image.
vpRBSilhouettePoint(unsigned int a_i, unsigned int a_j, const vpColVector &a_normal, double a_orientation, double a_Z)
vpColVector normal
Pixel coordinates of the silhouette point.
double orientation
Normal to the silhouette at point i,j, in world frame.
bool isSilhouette
Point depth.
void detectSilhouette(const vpImage< float > &I)