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
|
* 1 2 1
|
||||||
*/
|
*/
|
||||||
int j_p, j_n;
|
int j_p, j_n;
|
||||||
|
uchar v00, v01, v02, v10, v11, v12, v20, v21, v22;
|
||||||
for ( i = 0; i < H; i++ )
|
for ( i = 0; i < H; i++ )
|
||||||
{
|
{
|
||||||
p_src = P_src[i]; c_src = P_src[i+1]; n_src = P_src[i+2];
|
p_src = P_src[i]; c_src = P_src[i+1]; n_src = P_src[i+2];
|
||||||
c_dx = P_dx [i];
|
c_dx = P_dx [i];
|
||||||
c_dy = P_dy [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_p = j - 1;
|
||||||
j_n = j + 1;
|
j_n = j + 1;
|
||||||
if ( j_p < 0 ) j_p = j + j_offl;
|
if ( j_p < 0 ) j_p = j + j_offl;
|
||||||
if ( j_n >= W ) j_n = j + j_offr;
|
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]) +
|
// Get values for next column
|
||||||
(p_src[j_n] + c_src[j_n] + c_src[j_n] + n_src[j_n]);
|
v02 = p_src[j_n];
|
||||||
c_dy[j] = -(p_src[j_p] + p_src[j] + p_src[j] + p_src[j_n]) +
|
v12 = c_src[j_n];
|
||||||
(n_src[j_p] + n_src[j] + n_src[j] + n_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