34#include <visp3/core/vpConfig.h>
35#include <visp3/core/vpImageFilter.h>
39#ifndef DOXYGEN_SHOULD_SKIP_THIS
40#if (VISP_CXX_STANDARD < VISP_CXX_STANDARD_11)
41 double vpImageFilter::filterXR(
const vpImage<vpRGBa> &I,
unsigned int r,
unsigned int c,
const double *filter,
unsigned int size)
43 const unsigned int stop = (size - 1) / 2;
45 for (
unsigned int i = 1;
i <= stop; ++
i) {
46 result +=
filter[
i] *
static_cast<double>(I[
r][c +
i].R + I[
r][c -
i].R);
48 return result + (
filter[0] *
static_cast<double>(I[
r][c].R));
51double vpImageFilter::filterXG(
const vpImage<vpRGBa> &I,
unsigned int r,
unsigned int c,
const double *filter,
unsigned int size)
53 const unsigned int stop = (size - 1) / 2;
56 for (
unsigned int i = 1;
i <= stop; ++
i) {
57 result +=
filter[
i] *
static_cast<double>(I[
r][c +
i].G + I[
r][c -
i].G);
59 return result + (
filter[0] *
static_cast<double>(I[
r][c].G));
62double vpImageFilter::filterXB(
const vpImage<vpRGBa> &I,
unsigned int r,
unsigned int c,
const double *filter,
unsigned int size)
64 const unsigned int stop = (size - 1) / 2;
67 for (
unsigned int i = 1;
i <= stop; ++
i) {
68 result +=
filter[
i] *
static_cast<double>(I[
r][c +
i].B + I[
r][c -
i].B);
70 return result + (
filter[0] *
static_cast<double>(I[
r][c].B));
73double vpImageFilter::filterXLeftBorderR(
const vpImage<vpRGBa> &I,
unsigned int r,
unsigned int c,
74 const double *filter,
unsigned int size)
76 const unsigned int stop = (size - 1) / 2;
79 for (
unsigned int i = 1;
i <= stop; ++
i) {
81 result +=
filter[
i] *
static_cast<double>(I[
r][c +
i].R + I[
r][c -
i].R);
84 result +=
filter[
i] *
static_cast<double>(I[
r][c +
i].R + I[
r][
i - c].R);
87 return result + (
filter[0] *
static_cast<double>(I[
r][c].R));
90double vpImageFilter::filterXLeftBorderG(
const vpImage<vpRGBa> &I,
unsigned int r,
unsigned int c,
91 const double *filter,
unsigned int size)
93 const unsigned int stop = (size - 1) / 2;
96 for (
unsigned int i = 1;
i <= stop; ++
i) {
98 result +=
filter[
i] *
static_cast<double>(I[
r][c +
i].G + I[
r][c -
i].G);
101 result +=
filter[
i] *
static_cast<double>(I[
r][c +
i].G + I[
r][
i - c].G);
104 return result + (
filter[0] *
static_cast<double>(I[
r][c].G));
107double vpImageFilter::filterXLeftBorderB(
const vpImage<vpRGBa> &I,
unsigned int r,
unsigned int c,
108 const double *filter,
unsigned int size)
110 const unsigned int stop = (size - 1) / 2;
113 for (
unsigned int i = 1;
i <= stop; ++
i) {
115 result +=
filter[
i] *
static_cast<double>(I[
r][c +
i].B + I[
r][c -
i].B);
118 result +=
filter[
i] *
static_cast<double>(I[
r][c +
i].B + I[
r][
i - c].B);
121 return result + (
filter[0] *
static_cast<double>(I[
r][c].B));
124double vpImageFilter::filterXRightBorderR(
const vpImage<vpRGBa> &I,
unsigned int r,
unsigned int c,
125 const double *filter,
unsigned int size)
127 const unsigned int val_2 = 2;
128 const unsigned int stop = (size - 1) / 2;
132 for (
unsigned int i = 1;
i <= stop; ++
i) {
133 if ((c + i) < width) {
134 result +=
filter[
i] *
static_cast<double>(I[
r][c +
i].R + I[
r][c -
i].R);
137 result +=
filter[
i] *
static_cast<double>(I[
r][((val_2 *
width) - c) -
i - 1].R + I[
r][c -
i].R);
140 return result + (
filter[0] *
static_cast<double>(I[
r][c].R));
143double vpImageFilter::filterXRightBorderG(
const vpImage<vpRGBa> &I,
unsigned int r,
unsigned int c,
144 const double *filter,
unsigned int size)
146 const unsigned int val_2 = 2;
147 const unsigned int stop = (size - 1) / 2;
151 for (
unsigned int i = 1;
i <= stop; ++
i) {
152 if ((c + i) < width) {
153 result +=
filter[
i] *
static_cast<double>(I[
r][c +
i].G + I[
r][c -
i].G);
156 result +=
filter[
i] *
static_cast<double>(I[
r][((val_2 *
width) - c) -
i - 1].G + I[
r][c -
i].G);
159 return result + (
filter[0] *
static_cast<double>(I[
r][c].G));
162double vpImageFilter::filterXRightBorderB(
const vpImage<vpRGBa> &I,
unsigned int r,
unsigned int c,
163 const double *filter,
unsigned int size)
165 const unsigned int val_2 = 2;
166 const unsigned int stop = (size - 1) / 2;
170 for (
unsigned int i = 1;
i <= stop; ++
i) {
171 if ((c + i) < width) {
172 result +=
filter[
i] *
static_cast<double>(I[
r][c +
i].B + I[
r][c -
i].B);
175 result +=
filter[
i] *
static_cast<double>(I[
r][(val_2 *
width) - c -
i - 1].B + I[
r][c -
i].B);
178 return result + (
filter[0] *
static_cast<double>(I[
r][c].B));
181double vpImageFilter::filterYR(
const vpImage<vpRGBa> &I,
unsigned int r,
unsigned int c,
const double *filter,
unsigned int size)
183 const unsigned int stop = (size - 1) / 2;
186 for (
unsigned int i = 1;
i <= stop; ++
i) {
187 result +=
filter[
i] *
static_cast<double>(I[
r +
i][c].R + I[
r -
i][c].R);
189 return result + (
filter[0] *
static_cast<double>(I[
r][c].R));
192double vpImageFilter::filterYG(
const vpImage<vpRGBa> &I,
unsigned int r,
unsigned int c,
const double *filter,
unsigned int size)
194 const unsigned int stop = (size - 1) / 2;
197 for (
unsigned int i = 1;
i <= stop; ++
i) {
198 result +=
filter[
i] *
static_cast<double>(I[
r +
i][c].G + I[
r -
i][c].G);
200 return result + (
filter[0] *
static_cast<double>(I[
r][c].G));
203double vpImageFilter::filterYB(
const vpImage<vpRGBa> &I,
unsigned int r,
unsigned int c,
const double *filter,
unsigned int size)
205 const unsigned int stop = (size - 1) / 2;
208 for (
unsigned int i = 1;
i <= stop; ++
i) {
209 result +=
filter[
i] *
static_cast<double>(I[
r +
i][c].B + I[
r -
i][c].B);
211 return result + (
filter[0] *
static_cast<double>(I[
r][c].B));
214double vpImageFilter::filterYTopBorderR(
const vpImage<vpRGBa> &I,
unsigned int r,
unsigned int c,
const double *filter,
unsigned int size)
216 const unsigned int stop = (size - 1) / 2;
219 for (
unsigned int i = 1;
i <= stop; ++
i) {
221 result +=
filter[
i] *
static_cast<double>(I[
r +
i][c].R + I[
r -
i][c].R);
224 result +=
filter[
i] *
static_cast<double>(I[
r +
i][c].R + I[
i -
r][c].R);
227 return result + (
filter[0] *
static_cast<double>(I[
r][c].R));
230double vpImageFilter::filterYTopBorderG(
const vpImage<vpRGBa> &I,
unsigned int r,
unsigned int c,
const double *filter,
unsigned int size)
232 const unsigned int stop = (size - 1) / 2;
235 for (
unsigned int i = 1;
i <= stop; ++
i) {
237 result +=
filter[
i] *
static_cast<double>(I[
r +
i][c].G + I[
r -
i][c].G);
240 result +=
filter[
i] *
static_cast<double>(I[
r +
i][c].G + I[
i -
r][c].G);
243 return result + (
filter[0] *
static_cast<double>(I[
r][c].G));
246double vpImageFilter::filterYTopBorderB(
const vpImage<vpRGBa> &I,
unsigned int r,
unsigned int c,
const double *filter,
unsigned int size)
248 const unsigned int stop = (size - 1) / 2;
251 for (
unsigned int i = 1;
i <= stop; ++
i) {
253 result +=
filter[
i] *
static_cast<double>(I[
r +
i][c].B + I[
r -
i][c].B);
256 result +=
filter[
i] *
static_cast<double>(I[
r +
i][c].B + I[
i -
r][c].B);
259 return result + (
filter[0] *
static_cast<double>(I[
r][c].B));
262double vpImageFilter::filterYBottomBorderR(
const vpImage<vpRGBa> &I,
unsigned int r,
unsigned int c,
263 const double *filter,
unsigned int size)
265 const unsigned int val_2 = 2;
267 const unsigned int stop = (size - 1) / 2;
270 for (
unsigned int i = 1;
i <= stop; ++
i) {
271 if ((r + i) < height) {
272 result +=
filter[
i] *
static_cast<double>(I[
r +
i][c].R + I[
r -
i][c].R);
275 result +=
filter[
i] *
static_cast<double>(I[((val_2 *
height) -
r) -
i - 1][c].R + I[
r -
i][c].R);
278 return result + (
filter[0] *
static_cast<double>(I[
r][c].R));
281double vpImageFilter::filterYBottomBorderG(
const vpImage<vpRGBa> &I,
unsigned int r,
unsigned int c,
282 const double *filter,
unsigned int size)
284 const unsigned int val_2 = 2;
286 const unsigned int stop = (size - 1) / 2;
289 for (
unsigned int i = 1;
i <= stop; ++
i) {
290 if ((r + i) < height) {
291 result +=
filter[
i] *
static_cast<double>(I[
r +
i][c].G + I[
r -
i][c].G);
294 result +=
filter[
i] *
static_cast<double>(I[((val_2 *
height) -
r) -
i - 1][c].G + I[
r -
i][c].G);
297 return result + (
filter[0] *
static_cast<double>(I[
r][c].G));
300double vpImageFilter::filterYBottomBorderB(
const vpImage<vpRGBa> &I,
unsigned int r,
unsigned int c,
301 const double *filter,
unsigned int size)
303 const unsigned int val_2 = 2;
305 const unsigned int stop = (size - 1) / 2;
308 for (
unsigned int i = 1;
i <= stop; ++
i) {
309 if ((r + i) < height) {
310 result +=
filter[
i] *
static_cast<double>(I[
r +
i][c].B + I[
r -
i][c].B);
313 result +=
filter[
i] *
static_cast<double>(I[((val_2 *
height) -
r) -
i - 1][c].B + I[
r -
i][c].B);
316 return result + (
filter[0] *
static_cast<double>(I[
r][c].B));
320 void dummy_vpImageFilter_xy()
static void filter(const vpImage< ImageType > &I, vpImage< FilterType > &If, const vpArray2D< FilterType > &M, bool convolve=false, const vpImage< bool > *p_mask=nullptr)
Definition of the vpImage class member functions.
unsigned int getWidth() const
unsigned int getHeight() const