[opencv] 05/98: Backported several changes from master branch: - #3771 - inline round on ARM - #5633 - documentation for MSER - #5666 - run.py fixes

Mattia Rizzolo mattia at debian.org
Tue Oct 4 17:51:17 UTC 2016


This is an automated email from the git hooks/post-receive script.

mattia pushed a commit to annotated tag 2.4.13
in repository opencv.

commit 7cb78451d10955ff3e7030758c909c1c455a5039
Author: Maksim Shabunin <maksim.shabunin at itseez.com>
Date:   Fri Feb 27 18:59:55 2015 +0300

    Backported several changes from master branch:
    - #3771 - inline round on ARM
    - #5633 - documentation for MSER
    - #5666 - run.py fixes
---
 modules/core/include/opencv2/core/types_c.h        | 26 +++++++++++++++
 .../doc/feature_detection_and_description.rst      | 39 ++++++++++++++++++++--
 modules/ts/misc/run.py                             |  6 ++--
 modules/ts/misc/run_suite.py                       | 34 ++++++++++---------
 modules/ts/misc/run_utils.py                       | 13 ++++----
 5 files changed, 89 insertions(+), 29 deletions(-)

diff --git a/modules/core/include/opencv2/core/types_c.h b/modules/core/include/opencv2/core/types_c.h
index 989b799..9e9231d 100644
--- a/modules/core/include/opencv2/core/types_c.h
+++ b/modules/core/include/opencv2/core/types_c.h
@@ -305,6 +305,30 @@ enum {
 #define  CV_CMP(a,b)    (((a) > (b)) - ((a) < (b)))
 #define  CV_SIGN(a)     CV_CMP((a),0)
 
+#if defined __GNUC__ && defined __arm__ && (defined __ARM_PCS_VFP || defined __ARM_VFPV3__)
+#  define CV_VFP 1
+#else
+#  define CV_VFP 0
+#endif
+
+
+#if CV_VFP
+// 1. general scheme
+#define ARM_ROUND(_value, _asm_string) \
+    int res; \
+    float temp; \
+    asm(_asm_string : [res] "=r" (res), [temp] "=w" (temp) : [value] "w" (_value)); \
+    return res;
+// 2. version for double
+#ifdef __clang__
+#define ARM_ROUND_DBL(value) ARM_ROUND(value, "vcvtr.s32.f64 %[temp], %[value] \n vmov %[res], %[temp]")
+#else
+#define ARM_ROUND_DBL(value) ARM_ROUND(value, "vcvtr.s32.f64 %[temp], %P[value] \n vmov %[res], %[temp]")
+#endif
+// 3. version for float
+#define ARM_ROUND_FLT(value) ARM_ROUND(value, "vcvtr.s32.f32 %[temp], %[value]\n vmov %[res], %[temp]")
+#endif // CV_VFP
+
 CV_INLINE  int  cvRound( double value )
 {
 #if (defined _MSC_VER && defined _M_X64) || (defined __GNUC__ && defined __x86_64__ && defined __SSE2__ && !defined __APPLE__)
@@ -323,6 +347,8 @@ CV_INLINE  int  cvRound( double value )
 #elif defined CV_ICC || defined __GNUC__
 #  ifdef HAVE_TEGRA_OPTIMIZATION
     TEGRA_ROUND(value);
+#  elif CV_VFP
+    ARM_ROUND_DBL(value)
 #  else
     return (int)lrint(value);
 #  endif
diff --git a/modules/features2d/doc/feature_detection_and_description.rst b/modules/features2d/doc/feature_detection_and_description.rst
index c05a71d..effaed7 100644
--- a/modules/features2d/doc/feature_detection_and_description.rst
+++ b/modules/features2d/doc/feature_detection_and_description.rst
@@ -52,13 +52,46 @@ Maximally stable extremal region extractor. ::
         void operator()( const Mat& image, vector<vector<Point> >& msers, const Mat& mask ) const;
     };
 
-The class encapsulates all the parameters of the MSER extraction algorithm (see
-http://en.wikipedia.org/wiki/Maximally_stable_extremal_regions). Also see http://code.opencv.org/projects/opencv/wiki/MSER for useful comments and parameters description.
+The class encapsulates all the parameters of the MSER extraction algorithm (see [wiki]_ article).
 
 .. note::
 
-   * (Python) A complete example showing the use of the MSER detector can be found at opencv_source_code/samples/python2/mser.py
+    * there are two different implementation of MSER: one for grey image, one for color image the grey image algorithm is taken from: [nister2008linear]_ ; the paper claims to be faster than union-find method; it actually get 1.5~2m/s on my centrino L7200 1.2GHz laptop.
 
+    * the color image algorithm is taken from: [forssen2007maximally]_ ; it should be much slower than grey image method ( 3~4 times ); the chi_table.h file is taken directly from paper's source code which is distributed under GPL.
+
+    * (Python) A complete example showing the use of the MSER detector can be found at opencv_source_code/samples/python2/mser.py
+
+.. [wiki] http://en.wikipedia.org/wiki/Maximally_stable_extremal_regions
+.. [nister2008linear] David Nistér and Henrik Stewénius. Linear time maximally stable extremal regions. In Computer Vision–ECCV 2008, pages 183–196. Springer, 2008.
+.. [forssen2007maximally] Per-Erik Forssén. Maximally stable colour regions for recognition and matching. In Computer Vision and Pattern Recognition, 2007. CVPR'07. IEEE Conference on, pages 1–8. IEEE, 2007.
+
+MSER::MSER
+----------
+The MSER constructor
+
+.. ocv:function:: MSER::MSER(int _delta=5, int _min_area=60, int _max_area=14400, double _max_variation=0.25, double _min_diversity=.2, int _max_evolution=200, double _area_threshold=1.01, double _min_margin=0.003, int _edge_blur_size=5)
+
+    :param _delta: Compares (sizei - sizei-delta)/sizei-delta
+    :param _min_area: Prune the area which smaller than minArea
+    :param _max_area: Prune the area which bigger than maxArea
+    :param _max_variation: Prune the area have simliar size to its children
+    :param _min_diversity: For color image, trace back to cut off mser with diversity less than min_diversity
+    :param _max_evolution: For color image, the evolution steps
+    :param _area_threshold: For color image, the area threshold to cause re-initialize
+    :param _min_margin: For color image, ignore too small margin
+    :param _edge_blur_size: For color image, the aperture size for edge blur
+
+MSER::operator()
+----------------
+
+Detect MSER regions
+
+.. ocv:function:: void MSER::operator()(const Mat& image, vector<vector<Point> >& msers, const Mat& mask=Mat() ) const
+
+    :param image: Input image (8UC1, 8UC3 or 8UC4)
+    :param msers: Resulting list of point sets
+    :param mask: The operation mask
 
 ORB
 ---
diff --git a/modules/ts/misc/run.py b/modules/ts/misc/run.py
index a3a1314..ad6a38d 100755
--- a/modules/ts/misc/run.py
+++ b/modules/ts/misc/run.py
@@ -31,7 +31,7 @@ if __name__ == "__main__":
     parser.add_argument("--list", action="store_true", default=False, help="List available tests (executables)")
     parser.add_argument("--list_short", action="store_true", default=False, help="List available tests (aliases)")
     parser.add_argument("--list_short_main", action="store_true", default=False, help="List available tests (main repository, aliases)")
-    parser.add_argument("--configuration", metavar="CFG", default="", help="Visual Studio: force Debug or Release configuration")
+    parser.add_argument("--configuration", metavar="CFG", default=None, help="Force Debug or Release configuration (for Visual Studio and Java tests build)")
     parser.add_argument("-n", "--dry_run", action="store_true", help="Do not run the tests")
     parser.add_argument("-v", "--verbose", action="store_true", default=False, help="Print more debug information")
 
@@ -95,12 +95,12 @@ if __name__ == "__main__":
         try:
             if not os.path.isdir(path):
                 raise Err("Not a directory (should contain CMakeCache.txt ot test executables)")
-            cache = CMakeCache()
+            cache = CMakeCache(args.configuration)
             fname = os.path.join(path, "CMakeCache.txt")
 
             if os.path.isfile(fname):
                 log.debug("Reading cmake cache file: %s", fname)
-                cache.read(path, fname, args.configuration)
+                cache.read(path, fname)
             else:
                 log.debug("Assuming folder contains tests: %s", path)
                 cache.setDummy(path)
diff --git a/modules/ts/misc/run_suite.py b/modules/ts/misc/run_suite.py
index c3d715e..280c21c 100644
--- a/modules/ts/misc/run_suite.py
+++ b/modules/ts/misc/run_suite.py
@@ -48,22 +48,27 @@ class TestSuite(object):
         return sorted(self.getAliases(fname), key = len)[0]
 
     def getAliases(self, fname):
+        def getCuts(fname, prefix):
+            # filename w/o extension (opencv_test_core)
+            noext = re.sub(r"\.(exe|apk)$", '', fname)
+            # filename w/o prefix (core.exe)
+            nopref = fname
+            if fname.startswith(prefix):
+                nopref = fname[len(prefix):]
+            # filename w/o prefix and extension (core)
+            noprefext = noext
+            if noext.startswith(prefix):
+                noprefext = noext[len(prefix):]
+            return noext, nopref, noprefext
         # input is full path ('/home/.../bin/opencv_test_core') or 'java'
         res = [fname]
         fname = os.path.basename(fname)
         res.append(fname) # filename (opencv_test_core.exe)
-        noext = re.sub(r"\.(exe|apk)$", '', fname)
-        res.append(noext) # filename w/o extension (opencv_test_core)
-        nopref = None
-        if fname.startswith(self.nameprefix):
-            nopref = fname[len(self.nameprefix):]
-            res.append(nopref) # filename w/o prefix (core)
-        if noext.startswith(self.nameprefix):
-            res.append(noext[len(self.nameprefix):])
-        if self.options.configuration == "Debug":
-            res.append(re.sub(r"d$", '', noext))  # MSVC debug config, remove 'd' suffix
-            if nopref:
-                res.append(re.sub(r"d$", '', nopref))  # MSVC debug config, remove 'd' suffix
+        for s in getCuts(fname, self.nameprefix):
+            res.append(s)
+            if self.cache.build_type == "Debug" and "Visual Studio" in self.cache.cmake_generator:
+                res.append(re.sub(r"d$", '', s)) # MSVC debug config, remove 'd' suffix
+        log.debug("Aliases: %s", set(res))
         return set(res)
 
     def getTest(self, name):
@@ -101,10 +106,7 @@ class TestSuite(object):
         args = args[:]
         exe = os.path.abspath(path)
         if path == "java":
-            cfg = self.cache.build_type
-            if self.options.configuration:
-                cfg = self.options.configuration
-            cmd = [self.cache.ant_executable, "-Dopencv.build.type=%s" % cfg, "buildAndTest"]
+            cmd = [self.cache.ant_executable, "-Dopencv.build.type=%s" % self.cache.build_type, "buildAndTest"]
             ret = execute(cmd, cwd = self.cache.java_test_binary_dir + "/.build")
             return None, ret
         else:
diff --git a/modules/ts/misc/run_utils.py b/modules/ts/misc/run_utils.py
index dca951d..5841631 100644
--- a/modules/ts/misc/run_utils.py
+++ b/modules/ts/misc/run_utils.py
@@ -152,7 +152,7 @@ parse_patterns = (
     {'name': "opencv_home",              'default': None,       'pattern': re.compile(r"^OpenCV_SOURCE_DIR:STATIC=(.+)$")},
     {'name': "opencv_build",             'default': None,       'pattern': re.compile(r"^OpenCV_BINARY_DIR:STATIC=(.+)$")},
     {'name': "tests_dir",                'default': None,       'pattern': re.compile(r"^EXECUTABLE_OUTPUT_PATH:PATH=(.+)$")},
-    {'name': "build_type",               'default': "Release",  'pattern': re.compile(r"^CMAKE_BUILD_TYPE:STRING=(.*)$")},
+    {'name': "build_type",               'default': "Release",  'pattern': re.compile(r"^CMAKE_BUILD_TYPE:\w+=(.*)$")},
     {'name': "git_executable",           'default': None,       'pattern': re.compile(r"^GIT_EXECUTABLE:FILEPATH=(.*)$")},
     {'name': "cxx_flags",                'default': "",         'pattern': re.compile(r"^CMAKE_CXX_FLAGS:STRING=(.*)$")},
     {'name': "cxx_flags_debug",          'default': "",         'pattern': re.compile(r"^CMAKE_CXX_FLAGS_DEBUG:STRING=(.*)$")},
@@ -174,17 +174,19 @@ parse_patterns = (
 )
 
 class CMakeCache:
-    def __init__(self):
+    def __init__(self, cfg = None):
         self.setDefaultAttrs()
         self.cmake_home_vcver = None
         self.opencv_home_vcver = None
         self.featuresSIMD = None
         self.main_modules = []
+        if cfg:
+            self.build_type = cfg
 
     def setDummy(self, path):
         self.tests_dir = os.path.normpath(path)
 
-    def read(self, path, fname, cfg):
+    def read(self, path, fname):
         rx = re.compile(r'^opencv_(\w+)_SOURCE_DIR:STATIC=(.*)$')
         module_paths = {} # name -> path
         with open(fname, "rt") as cachefile:
@@ -213,10 +215,7 @@ class CMakeCache:
 
         # fix VS test binary path (add Debug or Release)
         if "Visual Studio" in self.cmake_generator:
-            if cfg:
-                self.tests_dir = os.path.join(self.tests_dir, self.options.configuration)
-            else:
-                self.tests_dir = os.path.join(self.tests_dir, self.build_type)
+            self.tests_dir = os.path.join(self.tests_dir, self.build_type)
 
         self.cmake_home_vcver = readGitVersion(self.git_executable, self.cmake_home)
         if self.opencv_home == self.cmake_home:

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/opencv.git



More information about the debian-science-commits mailing list