77 unsigned int n = error.getRows() / dimension;
82 unsigned int increment = 1;
86 while (error[i] < 0 && error[i] < error[i + 1])
90 while (increment >= 1 && i < n) {
94 mean_shift[i] =
vpMath::sqr(bandwidth) * density_gradient[i] / ((dimension + 2) * density[i]);
96 double tmp_shift = mean_shift[i];
99 while (tmp_shift > 0 && tmp_shift > error[i] - error[i + 1]) {
102 tmp_shift -= (error[i] - error[i - 1]);
114 unsigned int n = error.getRows() / dimension;
117 unsigned int j = position;
125 while (std::fabs(Ke) > std::numeric_limits<double>::epsilon() && j <= n) {
127 for (
unsigned int i = 0; i < dimension; i++) {
128 X[i] = (error[position] - error[j]) / bandwidth;
132 position -= dimension;
142 while (std::fabs(Ke) > std::numeric_limits<double>::epsilon() && j >= dimension) {
144 for (
unsigned int i = 0; i < dimension; i++) {
145 X[i] = (error[position] - error[j]) / bandwidth;
149 position -= dimension;
155 density *= 1 / (n * bandwidth);
163 unsigned int n = error.getRows() / dimension;
164 double density_gradient = 0;
165 double sum_delta = 0;
168 double inside_kernel = 1;
169 unsigned int j = position;
174 while (std::fabs(inside_kernel) > std::numeric_limits<double>::epsilon() && j <= n) {
175 delta = error[position] - error[j];
178 sum_delta += error[j] - error[position];
190 while (std::fabs(inside_kernel) > std::numeric_limits<double>::epsilon() && j >= dimension) {
191 delta = error[position] - error[j];
194 sum_delta += error[j] - error[position];
204 return density_gradient;