Visual Servoing Platform
version 3.7.0
Toggle main menu visibility
Loading...
Searching...
No Matches
vpTemplateTrackerSSD.cpp
1
/*
2
* ViSP, open source Visual Servoing Platform software.
3
* Copyright (C) 2005 - 2025 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
* Description:
31
* Template tracker.
32
*
33
* Authors:
34
* Amaury Dame
35
* Aurelien Yol
36
*/
37
38
#include <visp3/tt/vpTemplateTrackerSSD.h>
39
40
BEGIN_VISP_NAMESPACE
41
vpTemplateTrackerSSD::vpTemplateTrackerSSD
(
vpTemplateTrackerWarp
*warp) :
vpTemplateTracker
(warp),
DI
(),
temp
()
42
{
43
dW
.resize(2,
nbParam
);
44
G
.resize(
nbParam
);
45
H
.resize(
nbParam
,
nbParam
);
46
HLM
.resize(
nbParam
,
nbParam
);
47
48
temp
.resize(
nbParam
);
49
50
X1
.resize(2);
51
X2
.resize(2);
52
DI
.resize(2);
53
}
54
55
double
vpTemplateTrackerSSD::getCost
(
const
vpImage<unsigned char>
&I,
const
vpColVector
&tp)
56
{
57
double
erreur = 0;
58
double
IW;
59
int
Nbpoint = 0;
60
61
Warp
->computeCoeff(tp);
62
for
(
unsigned
int
point = 0; point <
templateSize
; point++) {
63
int
i =
ptTemplate
[point].y;
64
int
j =
ptTemplate
[point].x;
65
X1
[0] = j;
66
X1
[1] = i;
67
Warp
->computeDenom(
X1
, tp);
68
Warp
->warpX(
X1
,
X2
, tp);
69
70
double
j2 =
X2
[0];
71
double
i2 =
X2
[1];
72
if
((i2 >= 0) && (j2 >= 0) && (i2 < I.getHeight() - 1) && (j2 < I.getWidth() - 1)) {
73
double
Tij =
ptTemplate
[point].val;
74
if
(!
blur
)
75
IW = I.getValue(i2, j2);
76
else
77
IW =
BI
.getValue(i2, j2);
78
erreur += (Tij - IW) * (Tij - IW);
79
Nbpoint++;
80
}
81
}
82
ratioPixelIn
=
static_cast<
double
>
(Nbpoint) /
static_cast<
double
>
(
templateSize
);
83
84
if
(Nbpoint == 0)
85
return
10e10;
86
return
erreur / Nbpoint;
87
}
88
89
double
vpTemplateTrackerSSD::getSSD
(
const
vpImage<unsigned char>
&I,
const
vpColVector
&tp)
90
{
91
double
erreur = 0;
92
double
IW;
93
unsigned
int
Nbpoint = 0;
94
95
if
(
pyrInitialised
) {
96
templateSize
=
templateSizePyr
[0];
97
ptTemplate
=
ptTemplatePyr
[0];
98
}
99
100
Warp
->computeCoeff(tp);
101
for
(
unsigned
int
point = 0; point <
templateSize
; point++) {
102
int
i =
ptTemplate
[point].y;
103
int
j =
ptTemplate
[point].x;
104
X1
[0] = j;
105
X1
[1] = i;
106
Warp
->computeDenom(
X1
, tp);
107
Warp
->warpX(
X1
,
X2
, tp);
108
109
double
j2 =
X2
[0];
110
double
i2 =
X2
[1];
111
if
((j2 < I.getWidth() - 1) && (i2 < I.getHeight() - 1) && (i2 > 0) && (j2 > 0)) {
112
double
Tij =
ptTemplate
[point].val;
113
IW = I.getValue(i2, j2);
114
erreur += (Tij - IW) * (Tij - IW);
115
Nbpoint++;
116
}
117
}
118
if
(Nbpoint == 0)
119
return
10e10;
120
return
erreur / Nbpoint;
121
}
122
END_VISP_NAMESPACE
vpColVector
Implementation of column vector and the associated operations.
Definition
vpColVector.h:191
vpImage
Definition of the vpImage class member functions.
Definition
vpImage.h:131
vpTemplateTrackerSSD::getSSD
double getSSD(const vpImage< unsigned char > &I, const vpColVector &tp)
Definition
vpTemplateTrackerSSD.cpp:89
vpTemplateTrackerSSD::temp
vpRowVector temp
Definition
vpTemplateTrackerSSD.h:73
vpTemplateTrackerSSD::getCost
double getCost(const vpImage< unsigned char > &I, const vpColVector &tp)
Definition
vpTemplateTrackerSSD.cpp:55
vpTemplateTrackerSSD::DI
vpRowVector DI
Definition
vpTemplateTrackerSSD.h:72
vpTemplateTrackerSSD::vpTemplateTrackerSSD
VP_EXPLICIT vpTemplateTrackerSSD(vpTemplateTrackerWarp *warp)
Definition
vpTemplateTrackerSSD.cpp:41
vpTemplateTrackerWarp
Definition
vpTemplateTrackerWarp.h:65
vpTemplateTracker::nbParam
unsigned int nbParam
Definition
vpTemplateTracker.h:125
vpTemplateTracker::vpTemplateTracker
vpTemplateTracker()
Default constructor.
Definition
vpTemplateTracker.h:154
vpTemplateTracker::ptTemplatePyr
vpTemplateTrackerPoint ** ptTemplatePyr
Definition
vpTemplateTracker.h:82
vpTemplateTracker::G
vpColVector G
Definition
vpTemplateTracker.h:111
vpTemplateTracker::templateSizePyr
unsigned int * templateSizePyr
Definition
vpTemplateTracker.h:85
vpTemplateTracker::H
vpMatrix H
Definition
vpTemplateTracker.h:103
vpTemplateTracker::X2
vpColVector X2
Definition
vpTemplateTracker.h:143
vpTemplateTracker::ratioPixelIn
double ratioPixelIn
Definition
vpTemplateTracker.h:122
vpTemplateTracker::pyrInitialised
bool pyrInitialised
Definition
vpTemplateTracker.h:74
vpTemplateTracker::ptTemplate
vpTemplateTrackerPoint * ptTemplate
Definition
vpTemplateTracker.h:81
vpTemplateTracker::dW
vpMatrix dW
Definition
vpTemplateTracker.h:145
vpTemplateTracker::Warp
vpTemplateTrackerWarp * Warp
Definition
vpTemplateTracker.h:136
vpTemplateTracker::blur
bool blur
Definition
vpTemplateTracker.h:116
vpTemplateTracker::BI
vpImage< double > BI
Definition
vpTemplateTracker.h:147
vpTemplateTracker::X1
vpColVector X1
Definition
vpTemplateTracker.h:142
vpTemplateTracker::HLM
vpMatrix HLM
Definition
vpTemplateTracker.h:106
vpTemplateTracker::templateSize
unsigned int templateSize
Definition
vpTemplateTracker.h:84
BEGIN_VISP_NAMESPACE
Definition
vpMbtDistanceCircle.cpp:55
modules
tracker
tt
src
ssd
vpTemplateTrackerSSD.cpp
Generated by
1.17.0