12 std::ptrdiff_t s_istep, std::ptrdiff_t s_jstep,
13 float* gi, std::ptrdiff_t gi_istep, std::ptrdiff_t gi_jstep,
14 float* gj, std::ptrdiff_t gj_istep, std::ptrdiff_t gj_jstep,
15 unsigned ni,
unsigned nj)
17 const unsigned char* s_data = src;
21 if (ni==0 || nj==0)
return;
25 for (
unsigned j=0;j<nj;++j)
37 for (
unsigned i=0;i<ni;++i)
51 const std::ptrdiff_t o1 = s_jstep - s_istep;
52 const std::ptrdiff_t o2 = s_jstep;
53 const std::ptrdiff_t o3 = s_istep + s_jstep;
54 const std::ptrdiff_t o4 = -s_istep;
55 const std::ptrdiff_t o5 = s_istep;
56 const std::ptrdiff_t o6 = -s_istep - s_jstep;
57 const std::ptrdiff_t o7 = -s_jstep;
58 const std::ptrdiff_t o8 = s_istep - s_jstep;
60 const unsigned ni1 = ni-1;
61 const unsigned nj1 = nj-1;
63 s_data += s_istep + s_jstep;
67 for (
unsigned j=1;j<nj1;++j)
69 const unsigned char* s = s_data;
74 *pgi = 0; pgi+=gi_istep;
75 *pgj = 0; pgj+=gj_istep;
77 for (
unsigned i=1;i<ni1;++i)
82 *pgi = (0.125f*s[o3] + 0.25f*s[o5] + 0.125f*s[o8])
83 - (0.125f*s[o1] + 0.25f*s[o4] + 0.125f*s[o6]);
85 *pgj = (0.125f*s[o1] + 0.25f*s[o2] + 0.125f*s[o3])
86 - (0.125f*s[o6] + 0.25f*s[o7] + 0.125f*s[o8]);
104 for (
unsigned i=0;i<ni;++i)
108 *gi_data = 0; gi_data+=gi_istep;
109 *gj_data = 0; gj_data+=gj_istep;
117 std::ptrdiff_t s_istep, std::ptrdiff_t s_jstep,
118 double* gi, std::ptrdiff_t gi_istep, std::ptrdiff_t gi_jstep,
119 double* gj, std::ptrdiff_t gj_istep, std::ptrdiff_t gj_jstep,
120 unsigned ni,
unsigned nj)
122 const unsigned char* s_data = src;
123 double *gi_data = gi;
124 double *gj_data = gj;
126 if (ni==0 || nj==0)
return;
130 for (
unsigned j=0;j<nj;++j)
142 for (
unsigned i=0;i<ni;++i)
156 const std::ptrdiff_t o1 = s_jstep - s_istep;
157 const std::ptrdiff_t o2 = s_jstep;
158 const std::ptrdiff_t o3 = s_istep + s_jstep;
159 const std::ptrdiff_t o4 = -s_istep;
160 const std::ptrdiff_t o5 = s_istep;
161 const std::ptrdiff_t o6 = -s_istep - s_jstep;
162 const std::ptrdiff_t o7 = -s_jstep;
163 const std::ptrdiff_t o8 = s_istep - s_jstep;
165 const unsigned ni1 = ni-1;
166 const unsigned nj1 = nj-1;
168 s_data += s_istep + s_jstep;
172 for (
unsigned j=1;j<nj1;++j)
174 const unsigned char* s = s_data;
175 double* pgi = gi_data;
176 double* pgj = gj_data;
179 *pgi = 0; pgi+=gi_istep;
180 *pgj = 0; pgj+=gj_istep;
182 for (
unsigned i=1;i<ni1;++i)
187 *pgi = (0.125*s[o3] + 0.25*s[o5] + 0.125*s[o8])
188 - (0.125*s[o1] + 0.25*s[o4] + 0.125*s[o6]);
190 *pgj = (0.125*s[o1] + 0.25*s[o2] + 0.125*s[o3])
191 - (0.125*s[o6] + 0.25*s[o7] + 0.125*s[o8]);
209 for (
unsigned i=0;i<ni;++i)
213 *gi_data = 0; gi_data+=gi_istep;
214 *gj_data = 0; gj_data+=gj_istep;
222 std::ptrdiff_t s_istep, std::ptrdiff_t s_jstep,
223 float* gi, std::ptrdiff_t gi_istep, std::ptrdiff_t gi_jstep,
224 float* gj, std::ptrdiff_t gj_istep, std::ptrdiff_t gj_jstep,
225 unsigned ni,
unsigned nj)
227 const float* s_data = src;
231 if (ni==0 || nj==0)
return;
235 for (
unsigned j=0;j<nj;++j)
247 for (
unsigned i=0;i<ni;++i)
261 const std::ptrdiff_t o1 = s_jstep - s_istep;
262 const std::ptrdiff_t o2 = s_jstep;
263 const std::ptrdiff_t o3 = s_istep + s_jstep;
264 const std::ptrdiff_t o4 = -s_istep;
265 const std::ptrdiff_t o5 = s_istep;
266 const std::ptrdiff_t o6 = -s_istep - s_jstep;
267 const std::ptrdiff_t o7 = -s_jstep;
268 const std::ptrdiff_t o8 = s_istep - s_jstep;
270 const unsigned ni1 = ni-1;
271 const unsigned nj1 = nj-1;
273 s_data += s_istep + s_jstep;
277 for (
unsigned j=1;j<nj1;++j)
279 const float* s = s_data;
280 float* pgi = gi_data;
281 float* pgj = gj_data;
284 *pgi = 0; pgi+=gi_istep;
285 *pgj = 0; pgj+=gj_istep;
287 for (
unsigned i=1;i<ni1;++i)
290 *pgi = 0.125f*(s[o3]+s[o8] - (s[o1]+s[o6])) + 0.25f*(s[o5]-s[o4]);
292 *pgj = 0.125f*(s[o1]+s[o3] - (s[o6]+s[o8])) + 0.25f*(s[o2]-s[o7]);
310 for (
unsigned i=0;i<ni;++i)
314 *gi_data = 0; gi_data+=gi_istep;
315 *gj_data = 0; gj_data+=gj_istep;
323 std::ptrdiff_t s_istep, std::ptrdiff_t s_jstep,
324 double* gi, std::ptrdiff_t gi_istep, std::ptrdiff_t gi_jstep,
325 double* gj, std::ptrdiff_t gj_istep, std::ptrdiff_t gj_jstep,
326 unsigned ni,
unsigned nj)
328 const double* s_data = src;
329 double *gi_data = gi;
330 double *gj_data = gj;
332 if (ni==0 || nj==0)
return;
336 for (
unsigned j=0;j<nj;++j)
348 for (
unsigned i=0;i<ni;++i)
362 const std::ptrdiff_t o1 = s_jstep - s_istep;
363 const std::ptrdiff_t o2 = s_jstep;
364 const std::ptrdiff_t o3 = s_istep + s_jstep;
365 const std::ptrdiff_t o4 = -s_istep;
366 const std::ptrdiff_t o5 = s_istep;
367 const std::ptrdiff_t o6 = -s_istep - s_jstep;
368 const std::ptrdiff_t o7 = -s_jstep;
369 const std::ptrdiff_t o8 = s_istep - s_jstep;
371 const unsigned ni1 = ni-1;
372 const unsigned nj1 = nj-1;
374 s_data += s_istep + s_jstep;
378 for (
unsigned j=1;j<nj1;++j)
380 const double* s = s_data;
381 double* pgi = gi_data;
382 double* pgj = gj_data;
385 *pgi = 0; pgi+=gi_istep;
386 *pgj = 0; pgj+=gj_istep;
388 for (
unsigned i=1;i<ni1;++i)
391 *pgi = 0.125*(s[o3]+s[o8] - (s[o1]+s[o6])) + 0.25*(s[o5]-s[o4]);
393 *pgj = 0.125*(s[o1]+s[o3] - (s[o6]+s[o8])) + 0.25*(s[o2]-s[o7]);
411 for (
unsigned i=0;i<ni;++i)
415 *gi_data = 0; gi_data+=gi_istep;
416 *gj_data = 0; gj_data+=gj_istep;
void vil_sobel_3x3_1plane(const unsigned char *src, std::ptrdiff_t s_istep, std::ptrdiff_t s_jstep, float *gi, std::ptrdiff_t gi_istep, std::ptrdiff_t gi_jstep, float *gj, std::ptrdiff_t gj_istep, std::ptrdiff_t gj_jstep, unsigned ni, unsigned nj)
Compute gradients of single plane of 2D data using 3x3 Sobel filters.
Apply 3x3 sobel operator to image data.