spatialGradient: Make nosse version faster
This commit is contained in:
parent
7b01e32fe8
commit
f92e2ed57a
@ -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…
x
Reference in New Issue
Block a user