Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv_contrib
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_contrib
Commits
051759c1
Commit
051759c1
authored
Dec 10, 2015
by
Vadim Pisarevsky
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #382 from zhou-chao:l0smooth
parents
752e2a5c
e4c78ef8
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
226 additions
and
0 deletions
+226
-0
ximgproc.bib
modules/ximgproc/doc/ximgproc.bib
+12
-0
edge_filter.hpp
modules/ximgproc/include/opencv2/ximgproc/edge_filter.hpp
+13
-0
perf_l0_smooth.cpp
modules/ximgproc/perf/perf_l0_smooth.cpp
+81
-0
l0_smooth.cpp
modules/ximgproc/src/l0_smooth.cpp
+0
-0
test_l0_smooth.cpp
modules/ximgproc/test/test_l0_smooth.cpp
+120
-0
No files found.
modules/ximgproc/doc/ximgproc.bib
View file @
051759c1
...
...
@@ -89,6 +89,18 @@
organization={ACM}
}
@inproceedings{xu2011image,
title={Image smoothing via L 0 gradient minimization},
author={Xu, Li and Lu, Cewu and Xu, Yi and Jia, Jiaya},
booktitle={ACM Transactions on Graphics (TOG)},
volume={30},
number={6},
pages={174},
year={2011},
organization={ACM}
}
@inproceedings{Revaud2015,
title={EpicFlow: Edge-Preserving Interpolation of Correspondences for Optical Flow},
author={Revaud, Jerome and Weinzaepfel, Philippe and Harchaoui, Zaid and Schmid, Cordelia},
...
...
modules/ximgproc/include/opencv2/ximgproc/edge_filter.hpp
View file @
051759c1
...
...
@@ -378,6 +378,19 @@ it should be 0.25. Setting it to 1.0 may lead to streaking artifacts.
*/
CV_EXPORTS_W
void
fastGlobalSmootherFilter
(
InputArray
guide
,
InputArray
src
,
OutputArray
dst
,
double
lambda
,
double
sigma_color
,
double
lambda_attenuation
=
0.25
,
int
num_iter
=
3
);
/** @brief Global image smoothing via L0 gradient minimization.
@param src source image for filtering with unsigned 8-bit or signed 16-bit or floating-point depth.
@param dst destination image.
@param lambda parameter defining the smooth term weight.
@param kappa parameter defining the increasing factor of the weight of the gradient data term.
For more details about L0 Smoother, see the original paper @cite xu2011image.
*/
CV_EXPORTS_W
void
l0Smooth
(
InputArray
src
,
OutputArray
dst
,
double
lambda
=
0.02
,
double
kappa
=
2.0
);
//! @}
}
}
...
...
modules/ximgproc/perf/perf_l0_smooth.cpp
0 → 100644
View file @
051759c1
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3 - clause BSD License)
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met :
*
* *Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and / or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort(including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "perf_precomp.hpp"
namespace
cvtest
{
using
std
::
tr1
::
tuple
;
using
std
::
tr1
::
get
;
using
namespace
perf
;
using
namespace
testing
;
using
namespace
cv
;
using
namespace
cv
::
ximgproc
;
typedef
tuple
<
Size
,
MatType
,
int
>
L0SmoothTestParam
;
typedef
TestBaseWithParam
<
L0SmoothTestParam
>
L0SmoothTest
;
PERF_TEST_P
(
L0SmoothTest
,
perf
,
Combine
(
SZ_TYPICAL
,
Values
(
CV_8U
,
CV_16U
,
CV_32F
,
CV_64F
),
Values
(
1
,
3
))
)
{
L0SmoothTestParam
params
=
GetParam
();
Size
sz
=
get
<
0
>
(
params
);
int
depth
=
get
<
1
>
(
params
);
int
srcCn
=
get
<
2
>
(
params
);
Mat
src
(
sz
,
CV_MAKE_TYPE
(
depth
,
srcCn
));
Mat
dst
(
sz
,
src
.
type
());
cv
::
setNumThreads
(
cv
::
getNumberOfCPUs
());
declare
.
in
(
src
,
WARMUP_RNG
).
out
(
dst
).
tbb_threads
(
cv
::
getNumberOfCPUs
());
RNG
rnd
(
sz
.
height
+
depth
+
srcCn
);
double
lambda
=
rnd
.
uniform
(
0.01
,
0.05
);
double
kappa
=
rnd
.
uniform
(
1.0
,
3.0
);
TEST_CYCLE_N
(
1
)
{
l0Smooth
(
src
,
dst
,
lambda
,
kappa
);
}
SANITY_CHECK_NOTHING
();
}
}
modules/ximgproc/src/l0_smooth.cpp
0 → 100644
View file @
051759c1
This diff is collapsed.
Click to expand it.
modules/ximgproc/test/test_l0_smooth.cpp
0 → 100644
View file @
051759c1
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3 - clause BSD License)
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met :
*
* *Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and / or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort(including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "test_precomp.hpp"
namespace
cvtest
{
using
namespace
std
;
using
namespace
std
::
tr1
;
using
namespace
testing
;
using
namespace
perf
;
using
namespace
cv
;
using
namespace
cv
::
ximgproc
;
CV_ENUM
(
SrcTypes
,
CV_8UC1
,
CV_8UC3
,
CV_16UC1
,
CV_16UC3
);
typedef
tuple
<
Size
,
SrcTypes
>
L0SmoothParams
;
typedef
TestWithParam
<
L0SmoothParams
>
L0SmoothTest
;
TEST
(
L0SmoothTest
,
SplatSurfaceAccuracy
)
{
RNG
rnd
(
0
);
for
(
int
i
=
0
;
i
<
3
;
i
++
)
{
Size
sz
(
rnd
.
uniform
(
512
,
1024
),
rnd
.
uniform
(
512
,
1024
));
Scalar
surfaceValue
;
int
srcCn
=
3
;
rnd
.
fill
(
surfaceValue
,
RNG
::
UNIFORM
,
0
,
255
);
Mat
src
(
sz
,
CV_MAKE_TYPE
(
CV_8U
,
srcCn
),
surfaceValue
);
double
lambda
=
rnd
.
uniform
(
0.01
,
0.05
);
double
kappa
=
rnd
.
uniform
(
1.5
,
5.0
);
Mat
res
;
l0Smooth
(
src
,
res
,
lambda
,
kappa
);
// When filtering a constant image we should get the same image:
double
normL1
=
cvtest
::
norm
(
src
,
res
,
NORM_L1
)
/
src
.
total
()
/
src
.
channels
();
EXPECT_LE
(
normL1
,
1.0
/
64
);
}
}
TEST_P
(
L0SmoothTest
,
MultiThreadReproducibility
)
{
if
(
cv
::
getNumberOfCPUs
()
==
1
)
return
;
double
MAX_DIF
=
10.0
;
double
MAX_MEAN_DIF
=
1.0
/
8.0
;
int
loopsCount
=
2
;
RNG
rng
(
0
);
L0SmoothParams
params
=
GetParam
();
Size
size
=
get
<
0
>
(
params
);
int
srcType
=
get
<
1
>
(
params
);
Mat
src
(
size
,
srcType
);
if
(
src
.
depth
()
==
CV_8U
)
randu
(
src
,
0
,
255
);
else
if
(
src
.
depth
()
==
CV_16U
)
randu
(
src
,
0
,
65535
);
else
randu
(
src
,
-
100000.0
f
,
100000.0
f
);
for
(
int
iter
=
0
;
iter
<=
loopsCount
;
iter
++
)
{
double
lambda
=
rng
.
uniform
(
0.01
,
0.05
);
double
kappa
=
rng
.
uniform
(
1.5
,
5.0
);
cv
::
setNumThreads
(
cv
::
getNumberOfCPUs
());
Mat
resMultiThread
;
l0Smooth
(
src
,
resMultiThread
,
lambda
,
kappa
);
cv
::
setNumThreads
(
1
);
Mat
resSingleThread
;
l0Smooth
(
src
,
resSingleThread
,
lambda
,
kappa
);
EXPECT_LE
(
cv
::
norm
(
resSingleThread
,
resMultiThread
,
NORM_INF
),
MAX_DIF
);
EXPECT_LE
(
cv
::
norm
(
resSingleThread
,
resMultiThread
,
NORM_L1
),
MAX_MEAN_DIF
*
src
.
total
()
*
src
.
channels
());
}
}
INSTANTIATE_TEST_CASE_P
(
FullSet
,
L0SmoothTest
,
Combine
(
Values
(
szODD
,
szQVGA
),
SrcTypes
::
all
()));
}
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