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
db0cc56c
Commit
db0cc56c
authored
Jun 27, 2015
by
Seon-Wook Park
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
spatialGradient: Re-introduce 2-rows at a time
parent
f958f29c
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
55 additions
and
13 deletions
+55
-13
spatialgradient.cpp
modules/imgproc/src/spatialgradient.cpp
+55
-13
No files found.
modules/imgproc/src/spatialgradient.cpp
View file @
db0cc56c
...
...
@@ -130,13 +130,16 @@ void spatialGradient( InputArray _src, OutputArray _dx, OutputArray _dy,
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_tmp
,
v_sdx
,
v_sdy
;
v_s4m1
,
v_s4m2
,
v_s4n1
,
v_s4n2
,
v_s4p1
,
v_s4p2
,
v_tmp
,
v_sdx1
,
v_sdx2
,
v_sdy1
,
v_sdy2
;
for
(
i
=
0
;
i
<
H
-
2
;
i
+=
2
)
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
];
c_dx
=
P_dx
[
i
];
c_dy
=
P_dy
[
i
];
p_src
=
P_src
[
i
];
c_src
=
P_src
[
i
+
1
];
n_src
=
P_src
[
i
+
2
];
m_src
=
P_src
[
i
+
3
];
c_dx
=
P_dx
[
i
];
c_dy
=
P_dy
[
i
];
n_dx
=
P_dx
[
i
+
1
];
n_dy
=
P_dy
[
i
+
1
];
// 16-column chunks at a time
for
(
j
=
0
;
j
<
W
-
15
;
j
+=
16
)
...
...
@@ -208,23 +211,62 @@ void spatialGradient( InputArray _src, OutputArray _dx, OutputArray _dy,
v_s3p1
=
v_reinterpret_as_s16
(
v_up1
);
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
];
}
v_um
=
v_load
(
&
m_src
[
j
-
1
]);
if
(
left
)
m_src
[
j
-
1
]
=
tmp
;
v_un
=
v_load
(
&
m_src
[
j
]);
if
(
right
)
{
tmp
=
m_src
[
j
+
16
];
m_src
[
j
+
16
]
=
m_src
[
j
+
15
+
j_offr
];
}
v_up
=
v_load
(
&
m_src
[
j
+
1
]);
if
(
right
)
m_src
[
j
+
16
]
=
tmp
;
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
);
// dx
v_tmp
=
v_s2p1
-
v_s2m1
;
v_sdx
=
(
v_s1p1
-
v_s1m1
)
+
(
v_tmp
+
v_tmp
)
+
(
v_s3p1
-
v_s3m1
);
v_sdx
1
=
(
v_s1p1
-
v_s1m1
)
+
(
v_tmp
+
v_tmp
)
+
(
v_s3p1
-
v_s3m1
);
v_tmp
=
v_s2p2
-
v_s2m2
;
v_sdx
=
(
v_s1p2
-
v_s1m2
)
+
(
v_tmp
+
v_tmp
)
+
(
v_s3p2
-
v_s3m2
);
v_sdx
2
=
(
v_s1p2
-
v_s1m2
)
+
(
v_tmp
+
v_tmp
)
+
(
v_s3p2
-
v_s3m2
);
// dy
v_tmp
=
v_s3n1
-
v_s1n1
;
v_sdy
=
(
v_s3m1
-
v_s1m1
)
+
(
v_tmp
+
v_tmp
)
+
(
v_s3p1
-
v_s1p1
);
v_sdy
1
=
(
v_s3m1
-
v_s1m1
)
+
(
v_tmp
+
v_tmp
)
+
(
v_s3p1
-
v_s1p1
);
v_tmp
=
v_s3n2
-
v_s1n2
;
v_sdy
=
(
v_s3m2
-
v_s1m2
)
+
(
v_tmp
+
v_tmp
)
+
(
v_s3p2
-
v_s1p2
);
v_sdy2
=
(
v_s3m2
-
v_s1m2
)
+
(
v_tmp
+
v_tmp
)
+
(
v_s3p2
-
v_s1p2
);
// Store
v_store
(
&
c_dx
[
j
],
v_sdx1
);
v_store
(
&
c_dx
[
j
+
8
],
v_sdx2
);
v_store
(
&
c_dy
[
j
],
v_sdy1
);
v_store
(
&
c_dy
[
j
+
8
],
v_sdy2
);
// dx
v_tmp
=
v_s3p1
-
v_s3m1
;
v_sdx1
=
(
v_s2p1
-
v_s2m1
)
+
(
v_tmp
+
v_tmp
)
+
(
v_s4p1
-
v_s4m1
);
v_tmp
=
v_s3p2
-
v_s3m2
;
v_sdx2
=
(
v_s2p2
-
v_s2m2
)
+
(
v_tmp
+
v_tmp
)
+
(
v_s4p2
-
v_s4m2
);
// dy
v_tmp
=
v_s4n1
-
v_s2n1
;
v_sdy1
=
(
v_s4m1
-
v_s2m1
)
+
(
v_tmp
+
v_tmp
)
+
(
v_s4p1
-
v_s2p1
);
v_tmp
=
v_s4n2
-
v_s2n2
;
v_sdy2
=
(
v_s4m2
-
v_s2m2
)
+
(
v_tmp
+
v_tmp
)
+
(
v_s4p2
-
v_s2p2
);
// Store
v_store
(
&
c_dx
[
j
],
v_sdx
);
v_store
(
&
c_dx
[
j
+
8
],
v_sdx
);
v_store
(
&
c_dy
[
j
],
v_sdy
);
v_store
(
&
c_dy
[
j
+
8
],
v_sdy
);
v_store
(
&
n_dx
[
j
],
v_sdx1
);
v_store
(
&
n_dx
[
j
+
8
],
v_sdx2
);
v_store
(
&
n_dy
[
j
],
v_sdy1
);
v_store
(
&
n_dy
[
j
+
8
],
v_sdy2
);
}
}
i_start
=
i
;
...
...
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