Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
15ea4010
Commit
15ea4010
authored
Jun 27, 2015
by
Seon-Wook Park
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
spatialGradient: Move vector decl into loop
parent
db0cc56c
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
37 additions
and
44 deletions
+37
-44
spatialgradient.cpp
modules/imgproc/src/spatialgradient.cpp
+37
-44
No files found.
modules/imgproc/src/spatialgradient.cpp
View file @
15ea4010
...
...
@@ -115,6 +115,10 @@ void spatialGradient( InputArray _src, OutputArray _dx, OutputArray _dy,
int
i_start
=
0
;
int
j_start
=
0
;
#if CV_SIMD128
uchar
tmp
;
uchar
*
m_src
;
short
*
n_dx
,
*
n_dy
;
// Characters in variable names have the following meanings:
// u: unsigned char
// s: signed int
...
...
@@ -124,18 +128,6 @@ void spatialGradient( InputArray _src, OutputArray _dx, OutputArray _dy,
// n: offset 0
// p: offset 1
// Example: umn is offset -1 in row and offset 0 in column
uchar
tmp
;
v_uint8x16
v_um
,
v_un
,
v_up
;
v_uint16x8
v_um1
,
v_um2
,
v_un1
,
v_un2
,
v_up1
,
v_up2
;
v_int16x8
v_s1m1
,
v_s1m2
,
v_s1n1
,
v_s1n2
,
v_s1p1
,
v_s1p2
,
v_s2m1
,
v_s2m2
,
v_s2n1
,
v_s2n2
,
v_s2p1
,
v_s2p2
,
v_s3m1
,
v_s3m2
,
v_s3n1
,
v_s3n2
,
v_s3p1
,
v_s3p2
,
v_s4m1
,
v_s4m2
,
v_s4n1
,
v_s4n2
,
v_s4p1
,
v_s4p2
,
v_tmp
,
v_sdx1
,
v_sdx2
,
v_sdy1
,
v_sdy2
;
uchar
*
m_src
;
short
*
n_dx
,
*
n_dy
;
for
(
i
=
0
;
i
<
H
-
1
;
i
+=
2
)
{
p_src
=
P_src
[
i
];
c_src
=
P_src
[
i
+
1
];
n_src
=
P_src
[
i
+
2
];
m_src
=
P_src
[
i
+
3
];
...
...
@@ -150,24 +142,25 @@ void spatialGradient( InputArray _src, OutputArray _dx, OutputArray _dy,
// Load top row for 3x3 Sobel filter
if
(
left
)
{
tmp
=
p_src
[
j
-
1
];
p_src
[
j
-
1
]
=
p_src
[
j
+
j_offl
];
}
v_um
=
v_load
(
&
p_src
[
j
-
1
]);
v_u
int8x16
v_u
m
=
v_load
(
&
p_src
[
j
-
1
]);
if
(
left
)
p_src
[
j
-
1
]
=
tmp
;
v_un
=
v_load
(
&
p_src
[
j
]);
v_u
int8x16
v_u
n
=
v_load
(
&
p_src
[
j
]);
if
(
right
)
{
tmp
=
p_src
[
j
+
16
];
p_src
[
j
+
16
]
=
p_src
[
j
+
15
+
j_offr
];
}
v_up
=
v_load
(
&
p_src
[
j
+
1
]);
v_u
int8x16
v_u
p
=
v_load
(
&
p_src
[
j
+
1
]);
if
(
right
)
p_src
[
j
+
16
]
=
tmp
;
v_uint16x8
v_um1
,
v_um2
,
v_un1
,
v_un2
,
v_up1
,
v_up2
;
v_expand
(
v_um
,
v_um1
,
v_um2
);
v_expand
(
v_un
,
v_un1
,
v_un2
);
v_expand
(
v_up
,
v_up1
,
v_up2
);
v_s1m1
=
v_reinterpret_as_s16
(
v_um1
);
v_s1m2
=
v_reinterpret_as_s16
(
v_um2
);
v_s1n1
=
v_reinterpret_as_s16
(
v_un1
);
v_s1n2
=
v_reinterpret_as_s16
(
v_un2
);
v_s1p1
=
v_reinterpret_as_s16
(
v_up1
);
v_s1p2
=
v_reinterpret_as_s16
(
v_up2
);
v_
int16x8
v_
s1m1
=
v_reinterpret_as_s16
(
v_um1
);
v_
int16x8
v_
s1m2
=
v_reinterpret_as_s16
(
v_um2
);
v_
int16x8
v_
s1n1
=
v_reinterpret_as_s16
(
v_un1
);
v_
int16x8
v_
s1n2
=
v_reinterpret_as_s16
(
v_un2
);
v_
int16x8
v_
s1p1
=
v_reinterpret_as_s16
(
v_up1
);
v_
int16x8
v_
s1p2
=
v_reinterpret_as_s16
(
v_up2
);
// Load second row for 3x3 Sobel filter
if
(
left
)
{
tmp
=
c_src
[
j
-
1
];
c_src
[
j
-
1
]
=
c_src
[
j
+
j_offl
];
}
...
...
@@ -183,12 +176,12 @@ void spatialGradient( InputArray _src, OutputArray _dx, OutputArray _dy,
v_expand
(
v_um
,
v_um1
,
v_um2
);
v_expand
(
v_un
,
v_un1
,
v_un2
);
v_expand
(
v_up
,
v_up1
,
v_up2
);
v_s2m1
=
v_reinterpret_as_s16
(
v_um1
);
v_s2m2
=
v_reinterpret_as_s16
(
v_um2
);
v_s2n1
=
v_reinterpret_as_s16
(
v_un1
);
v_s2n2
=
v_reinterpret_as_s16
(
v_un2
);
v_s2p1
=
v_reinterpret_as_s16
(
v_up1
);
v_s2p2
=
v_reinterpret_as_s16
(
v_up2
);
v_
int16x8
v_
s2m1
=
v_reinterpret_as_s16
(
v_um1
);
v_
int16x8
v_
s2m2
=
v_reinterpret_as_s16
(
v_um2
);
v_
int16x8
v_
s2n1
=
v_reinterpret_as_s16
(
v_un1
);
v_
int16x8
v_
s2n2
=
v_reinterpret_as_s16
(
v_un2
);
v_
int16x8
v_
s2p1
=
v_reinterpret_as_s16
(
v_up1
);
v_
int16x8
v_
s2p2
=
v_reinterpret_as_s16
(
v_up2
);
// Load third row for 3x3 Sobel filter
if
(
left
)
{
tmp
=
n_src
[
j
-
1
];
n_src
[
j
-
1
]
=
n_src
[
j
+
j_offl
];
}
...
...
@@ -204,12 +197,12 @@ void spatialGradient( InputArray _src, OutputArray _dx, OutputArray _dy,
v_expand
(
v_um
,
v_um1
,
v_um2
);
v_expand
(
v_un
,
v_un1
,
v_un2
);
v_expand
(
v_up
,
v_up1
,
v_up2
);
v_s3m1
=
v_reinterpret_as_s16
(
v_um1
);
v_s3m2
=
v_reinterpret_as_s16
(
v_um2
);
v_s3n1
=
v_reinterpret_as_s16
(
v_un1
);
v_s3n2
=
v_reinterpret_as_s16
(
v_un2
);
v_s3p1
=
v_reinterpret_as_s16
(
v_up1
);
v_s3p2
=
v_reinterpret_as_s16
(
v_up2
);
v_
int16x8
v_
s3m1
=
v_reinterpret_as_s16
(
v_um1
);
v_
int16x8
v_
s3m2
=
v_reinterpret_as_s16
(
v_um2
);
v_
int16x8
v_
s3n1
=
v_reinterpret_as_s16
(
v_un1
);
v_
int16x8
v_
s3n2
=
v_reinterpret_as_s16
(
v_un2
);
v_
int16x8
v_
s3p1
=
v_reinterpret_as_s16
(
v_up1
);
v_
int16x8
v_
s3p2
=
v_reinterpret_as_s16
(
v_up2
);
// Load fourth row for 3x3 Sobel filter
if
(
left
)
{
tmp
=
m_src
[
j
-
1
];
m_src
[
j
-
1
]
=
m_src
[
j
+
j_offl
];
}
...
...
@@ -225,24 +218,24 @@ void spatialGradient( InputArray _src, OutputArray _dx, OutputArray _dy,
v_expand
(
v_um
,
v_um1
,
v_um2
);
v_expand
(
v_un
,
v_un1
,
v_un2
);
v_expand
(
v_up
,
v_up1
,
v_up2
);
v_s4m1
=
v_reinterpret_as_s16
(
v_um1
);
v_s4m2
=
v_reinterpret_as_s16
(
v_um2
);
v_s4n1
=
v_reinterpret_as_s16
(
v_un1
);
v_s4n2
=
v_reinterpret_as_s16
(
v_un2
);
v_s4p1
=
v_reinterpret_as_s16
(
v_up1
);
v_s4p2
=
v_reinterpret_as_s16
(
v_up2
);
v_
int16x8
v_
s4m1
=
v_reinterpret_as_s16
(
v_um1
);
v_
int16x8
v_
s4m2
=
v_reinterpret_as_s16
(
v_um2
);
v_
int16x8
v_
s4n1
=
v_reinterpret_as_s16
(
v_un1
);
v_
int16x8
v_
s4n2
=
v_reinterpret_as_s16
(
v_un2
);
v_
int16x8
v_
s4p1
=
v_reinterpret_as_s16
(
v_up1
);
v_
int16x8
v_
s4p2
=
v_reinterpret_as_s16
(
v_up2
);
// dx
v_tmp
=
v_s2p1
-
v_s2m1
;
v_sdx1
=
(
v_s1p1
-
v_s1m1
)
+
(
v_tmp
+
v_tmp
)
+
(
v_s3p1
-
v_s3m1
);
v_
int16x8
v_
tmp
=
v_s2p1
-
v_s2m1
;
v_
int16x8
v_
sdx1
=
(
v_s1p1
-
v_s1m1
)
+
(
v_tmp
+
v_tmp
)
+
(
v_s3p1
-
v_s3m1
);
v_tmp
=
v_s2p2
-
v_s2m2
;
v_sdx2
=
(
v_s1p2
-
v_s1m2
)
+
(
v_tmp
+
v_tmp
)
+
(
v_s3p2
-
v_s3m2
);
v_
int16x8
v_
sdx2
=
(
v_s1p2
-
v_s1m2
)
+
(
v_tmp
+
v_tmp
)
+
(
v_s3p2
-
v_s3m2
);
// dy
v_tmp
=
v_s3n1
-
v_s1n1
;
v_sdy1
=
(
v_s3m1
-
v_s1m1
)
+
(
v_tmp
+
v_tmp
)
+
(
v_s3p1
-
v_s1p1
);
v_
int16x8
v_
sdy1
=
(
v_s3m1
-
v_s1m1
)
+
(
v_tmp
+
v_tmp
)
+
(
v_s3p1
-
v_s1p1
);
v_tmp
=
v_s3n2
-
v_s1n2
;
v_sdy2
=
(
v_s3m2
-
v_s1m2
)
+
(
v_tmp
+
v_tmp
)
+
(
v_s3p2
-
v_s1p2
);
v_
int16x8
v_
sdy2
=
(
v_s3m2
-
v_s1m2
)
+
(
v_tmp
+
v_tmp
)
+
(
v_s3p2
-
v_s1p2
);
// Store
v_store
(
&
c_dx
[
j
],
v_sdx1
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment