spatialGradient: Make nosse version faster

pull/4139/head
Seon-Wook Park 10 years ago
parent 7b01e32fe8
commit f92e2ed57a
  1. 26
      modules/imgproc/src/spatialgradient.cpp

@ -284,23 +284,39 @@ void spatialGradient( InputArray _src, OutputArray _dx, OutputArray _dy,
* 1 2 1
*/
int j_p, j_n;
uchar v00, v01, v02, v10, v11, v12, v20, v21, v22;
for ( i = 0; i < H; i++ )
{
p_src = P_src[i]; c_src = P_src[i+1]; n_src = P_src[i+2];
c_dx = P_dx [i];
c_dy = P_dy [i];
for ( j = i >= i_start ? 0 : j_start; j < W; j++ )
// Pre-load 2 columns
j = i >= i_start ? 0 : j_start;
j_p = j - 1;
if ( j_p < 0 ) j_p = j + j_offl;
v00 = p_src[j_p]; v01 = p_src[j];
v10 = c_src[j_p]; v11 = c_src[j];
v20 = n_src[j_p]; v21 = n_src[j];
for ( ; j < W; j++ )
{
j_p = j - 1;
j_n = j + 1;
if ( j_p < 0 ) j_p = j + j_offl;
if ( j_n >= W ) j_n = j + j_offr;
c_dx[j] = -(p_src[j_p] + c_src[j_p] + c_src[j_p] + n_src[j_p]) +
(p_src[j_n] + c_src[j_n] + c_src[j_n] + n_src[j_n]);
c_dy[j] = -(p_src[j_p] + p_src[j] + p_src[j] + p_src[j_n]) +
(n_src[j_p] + n_src[j] + n_src[j] + n_src[j_n]);
// Get values for next column
v02 = p_src[j_n];
v12 = c_src[j_n];
v22 = n_src[j_n];
c_dx[j] = -(v00 + v10 + v10 + v20) + (v02 + v12 + v12 + v22);
c_dy[j] = -(v00 + v01 + v01 + v02) + (v20 + v21 + v21 + v22);
// Move values back one column for next iteration
v00 = v01; v10 = v11; v20 = v21;
v01 = v02; v11 = v12; v21 = v22;
}
}

Loading…
Cancel
Save